Как изменить URL-адрес тега изображения в нескольких файлах HTML, используя пакетный скрипт?
Есть более 10 HTML-файлов с тегами изображений. Каждый раз, когда мы размещаем нашу сборку на тестовом сайте, нам нужно менять источник img. например <img src=/live/Content/xyz.png />
в <img src=/test/Content/xyz.png />
,
Посмотрев вокруг и немного почитав, я придумал следующий пакетный скрипт, однако не могу понять, как мне идти дальше:
for /r %%i in (*.html) do echo %%i
for %%f in (*.html) do (
FOR /F %%L IN (%%f) DO (
SET "line=%%L"
SETLOCAL ENABLEDELAYEDEXPANSION
SET "x= <--------------------WHAT DO I SET HERE?
echo %x%
ENDLOCAL )) pause
Это мой первый пакетный скрипт, может кто-нибудь направить меня в правильном направлении?
1 ответ
@ECHO OFF
SETLOCAL enabledelayedexpansion
for /r U:\ %%i in (*.html) do (
echo found %%i
SET outfile="%%~dpni.lmth"
(
SETLOCAL disabledelayedexpansion
FOR /F "usebackq delims=" %%L IN ("%%i") DO (
SET "line=%%L"
SETLOCAL ENABLEDELAYEDEXPANSION
SET "line=!line:/live/=/test/!
echo !line!
ENDLOCAL
)
ENDLOCAL
)>!outfile!
)
pause
GOTO :EOF
Как насчет этого развития?
Примечания: я изменил ваш FOR/R
в ECHO
HTML-файл обрабатывается и используется %%i
вместо того, чтобы переключиться на %%f
, U:
мой RAMDRIVE; вам нужно изменить это, чтобы удовлетворить.
outfile
устанавливается для генерации имени файла, которое соответствует имени файла HTML, но с .lmth
расширение (не может обновить на месте) - он получает это от ~dpn
префикс i
, что означает d
разрываться, p
и n
суть файла %%i
, Он цитируется, чтобы позаботиться о потенциальных пробелах в имени файла или пути.
Следующее логическое утверждение (for /f...[lines] )>!outfile!
который отправляет любой echo
редактировать текст в новый файл !outfile!
, enabledelayedexpansion
во второй физической строке партия делает !outfile!
значение RUN-TIME - как оно изменяется в пределах FOR r
внешняя петля.
Поскольку фактическое имя файла HTML в %%i может содержать пробелы, его необходимо заключить в кавычки, отсюда и предложение 'usebackq' в FOR/F
, delims=
предложение гарантирует, что ВСЯ строка из файла "%%i"
применяется к %%L
- не только первый токен (ну, фактически, делает всю строку первым токеном).
SET
Команда заменяет строку "/test/" для любого вхождения "/live/" в значении переменной RUN-TIME line
и присваивает результат line
, Результирующее значение тогда ECHO
д - который перенаправлен на outfile
Обратите внимание, что в вашем оригинале вы будете назначать x
в set x=
но echo %x%
воспроизвел бы x
как это было, когда строка была PARSED, потому что пакет заменяет значение любой переменной на%var% как часть фазы синтаксического анализа. Следовательно, линия стала бы просто ECHO
(поскольку x
скорее всего, не будет назначен) и причудливо echo
государство (Echo is OFF
)
Пара гатч здесь. Первый, %
и некоторые другие символы, как известно, трудно обрабатывать пакетно, так что будьте осторожны. Следующий, FOR/F
будет обходить пустые строки. Это может быть преодолено при необходимости. В-третьих, это заменит ЛЮБОЕ появление /live/
в любом случае с /test/
Удачи!
Изменить для поддержки восклицательных знаков: 20130711T0624Z
добавленной SETLOCAL enabledelayedexpansion
линия и ENDLOCAL
как раз перед )>!outfile!
соответствовать