пакетная перезапись оригинального файла - PullRequest
0 голосов
/ 20 марта 2012

Как бы я изменил приведенный ниже скрипт для редактирования исходного файла вместо генерации нового? Кроме того, как заставить этот сценарий выполняться для всех файлов .html в одном каталоге вместо указания одного файла за раз.

@echo off
setlocal EnableDelayedExpansion
call :processFile < template.html > final.html
goto :EOF

:processFile
   set line=EOF
   set /P line=
   if "!line!" == "EOF" goto :EOF
   set X=
   set "lineNoGen=!line:Gen_1_=$!"
   if "!lineNoGen!" neq "!line!" (
      for /F "tokens=1-3 delims=$" %%a in ("!lineNoGen:Gen.1.=$!") do (
         set "beforeGen=%%a"
         set "betweenGens=%%b"
         set "afterGen=%%c"
         set "X=!betweenGens:~0,1!"
         set /A Xm1=X-1, Xp1=X+1
         echo !beforeGen!Gen_1_!Xm1!!betweenGens:~1!Gen.1.!Xm1!!afterGen:~1!
      )
   )
   echo !line!
   if defined X (
       echo !beforeGen!Gen_1_!Xp1!!betweenGens:~1!Gen.1.!Xp1!!afterGen:~1!
   )
goto :processFile

1 Ответ

0 голосов
/ 20 марта 2012

Насколько я знаю, для Windows Batch нет опции на месте. Я бы просто использовал временный файл:

call :processFile < template.html > tmp_file
move tmp_file template.html

Если Unix / Linux пользователь заинтересован в ответе:

Колин Уотсон sponge (упакован для Debian в пакете moreutils):

theConvertProgram < template.html | sponge template.html

См. https://unix.stackexchange.com/a/29744/15241 для получения дополнительной информации.

Решение с временным файлом:

theConvertProgram < template.html > tmp_file
mv tmp_file template.html

улучшенная версия с mktemp:

TEMP_FILE="$(mktemp)"
theConvertProgram < template.html >  "$TEMP_FILE"
mv "$TEMP_FILE" template.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...