任务很简单,可以从文件中输入" 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
任何帮助将不胜感激。感谢。
答案 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
的作业,但它现在已经多余了。