循环的批处理文件无法在for循环

时间:2017-07-31 12:38:23

标签: batch-file for-loop

任务很简单,可以从文件中输入" input.txt"其中包含需要在源文件中替换的关键字" source.txt"并使用关键字的名称创建新文件。你能否提出一些错误的建议。

@echo off &setlocal
setlocal enableextensions disabledelayedexpansion
set "search=POP"
set "source=dev500_ABC_eu.env"
for /f %%a in (input.txt) do (
set "replace=%%a"
set "newfile=devga520_%replace%_eu.env"
for /f "delims=" %%i in (%textfile%) do (
   set "line=%%i"
   setlocal enabledelayedexpansion
   set "line=!line:%search%=%replace%!"
   echo(!line!
   endlocal
)>"%newfile%"
)

这里在input.txt中,假设它有" PQR"。所以它应该取代" POP"在" PQR"的文件中并使用名称dev500_PQR_eu.env

生成新文件
Input file.txt
line 1 --> PQR
line 2 --> XYX
line 3 --> NOB
line 4 --> BOB

预期输出:替换字符后的4个不同文件" ABC"使用输入文件文本例如:whereevr" ABC"它应该被dev500_ABC_eu.env中的PQR和要用文本重命名的新文件替换。

dev500_PQR_eu.env  --> replaced name and content as well by PQR.
dev500_XYX_eu.env 
dev500_NOB_eu.env 
dev500_BOB_eu.env 

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

...
set "source=dev500_ABC_eu.env"
for /f %%a in (input.txt) do (set "replace=%%a")
set "newfile=devga520_%replace%_eu.env"
(
for /f "delims=" %%i in (%textfile%) do (
   set "line=%%i"
   setlocal enabledelayedexpansion
   set "line=!line:%search%=%replace%!"
   echo(!line!
   endlocal
)
)>"%newfile%"

有关详细信息,请参阅SO上的delayed expansion项。代码块中的任何%var%(带括号的系列行)将在首次遇到块时被var的值替换。

您需要在区块外设置replace

您的修订已澄清事项。

@ECHO Off
SETLOCAL
SET "search=POP"
set "source=dev500_ABC_eu.env"
:: This is a replacement source file I used for testing...
set "source=c:q45416169_1.txt"
for /f %%a in (c:q45416169.txt) do (
 set "replace=%%a"
 set "newfile=devga520_%%a_eu.env"
 CALL DEL %%newfile%% >NUL 2>nul
 for /f "delims=" %%i in (%source%) do (
   set "line=%%i"
   setlocal enabledelayedexpansion
   set "line=!line:%search%=%%a!"
   >>!newfile! echo(!line!
   endlocal
 )
)

我使用了一个名为q45416169.txt的文件,其中包含我的测试数据。

我使用了一个名为q45416169_1.txt的文件,其中包含一些虚拟文本数据供我测试。

我在代码中留下了replace的作业,但它现在已经多余了。