Как изменить 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! соответствовать

Другие вопросы по тегам