Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批量重写原始文件_Batch File - Fatal编程技术网

Batch file 批量重写原始文件

Batch file 批量重写原始文件,batch-file,Batch File,如何更改下面的脚本以编辑原始文件而不是生成新文件?另外,我如何使该脚本在同一目录中的所有.html文件上执行,而不必一次指定一个文件 @echo off setlocal EnableDelayedExpansion call :processFile < template.html > final.html goto :EOF :processFile set line=EOF set /P line= if "!line!" == "EOF" goto :EO

如何更改下面的脚本以编辑原始文件而不是生成新文件?另外,我如何使该脚本在同一目录中的所有.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
@echo关闭
setlocal EnableDelayedExpansion
调用:processFilefinal.html
后藤:EOF
:processFile
设置行=EOF
设定/付款行=
如果“!line!”==“EOF”转到:EOF
集合X=
设置“lineNoGen=!line:Gen_1_=$!”
如果“!lineNoGen!”neq“!line!”(
对于(“!lineNoGen:Gen.1.=$!”)中的/F“tokens=1-3 delims=$”%%a,请执行以下操作(
设置“beforeGen=%%a”
设置“中间值=%%b”
设置“afterGen=%%c”
设置“X=!中间值:~0,1!”
set/A Xm1=X-1,Xp1=X+1
回声!前一代!后一代!Xm1!!中间:~1!后一代:~1!
)
)
回声!排队!
如果定义为X(
回声!前一代!后一代!Xp1!!中间:~1!后一代:~1!
)
转到:进程文件

据我所知,Windows批处理没有内置选项。 我只会使用一个临时文件:

call :processFile < template.html > tmp_file
move tmp_file template.html
theConvertProgram < template.html > tmp_file
mv tmp_file template.html
有关更多信息,请参阅

具有临时文件的解决方案:

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

这个方法会起作用,但是您如何编写它以自动执行目录中所有扩展名为.html而不是“template.html”的文件呢?这会起作用吗
call:processFile<*.html>tmp_文件
move tmp_文件*.html
@Blainer这不起作用,您需要一个for循环:
for%%f in(*.html)do(call:processFile<%f>tmp_文件;move tmp_文件%%f)
,有关更多示例,请参阅。