谢谢你,提示我调整了我的主批处理文件,但变量TARG_FILE没有改变。 我试图从FileList_for_Import.txt中提取文件名,其中包含数据
file1.txt
file2.txt
`
Cls
DIR /o-d /b D:\Data\All_Inputfiles\*.* > D:\Data\FileList_for_Import.txt
REM Start Loop thru the file names that are available in FileList_for_Import.txt
REM Loop thru file
SETLOCAL EnableDelayedExpansion
@echo off
Set AllInputFile= D:\Data\FileList_for_Import.txt
SET INTEXTFILE=C:\DataLoader\Load.xml
set OUTTEXTFILE=D:\Data\tmp_out.txt
SET BackupPath=D:\Data\BackupLoad.xml
Set TempFile=D:\Data\tmp.txt
SET DbgFile=D:\Data\debuginfo.txt
Rem Remove Debug files
Del !DbgFile!
REM Del D:\Data\debugerr.txt
ECHO " Start ">!DbgFile!
ECHO !AllInputFile!>>!DbgFile!
ECHO " "###########Start of MAIN OF LOOP ############"
REM pause
for /f "tokens=*" %%a in (!AllInputFile!) do (
set "TARG_FILE=%%a"
REM ECHO line=%%a "TARG_FILE "!TARG_FILE!>>!DbgFile!
REM Get the 2nd line from the debugpayload file
REM for /f "tokens=1*delims=:" %%G in ('findstr /n "^" C:\DataLoader\Load.xml') do if %%G equ 2 set "DbgLine=%%H"
REM ECHO " "DbgLine "!DbgLine!>>!DbgFile!
Del !TempFile!
REM Copy !INTEXTFILE! !BackupPath!
findstr /g "InFilePath" !INTEXTFILE!>!TempFile!
REM set /p "DbgLine="< !TempFile!
set /p DbgLine=< !TempFile!
ECHO "DbgLine "!DbgLine!>>!DbgFile!
SET PREVFILE_NM=!DbgLine:~75,-13!
ECHO "PREVFILE_NM "!PREVFILE_NM! "TARG_FILE " !TARG_FILE! "Before Replace FinalreplaceLine "!FinalreplaceLine!>>!DbgFile!
set FinalreplaceLine=!DbgLine!
REM ECHO "Before Replace FinalreplaceLine "!FinalreplaceLine!>>!DbgFile!
set FinalreplaceLine=!FinalreplaceLine:%PREVFILE_NM%=%TARG_FILE%!
ECHO "FinalreplaceLine "!FinalreplaceLine!>>!DbgFile!
)
` 该批次的输出为 !TARG_FILE!正在进行每次迭代
file1.txt
file2.txt
但是在下面的语句中,它在第一次迭代中替换为file1.txt,在第二次迭代中,它的值不会被替换。
set FinalreplaceLine=!FinalreplaceLine:%PREVFILE_NM%=%TARG_FILE%!
提前感谢您的帮助或宝贵的建议。
答案 0 :(得分:0)
您的代码正在我的电脑上工作??? 但你可以尝试这样:
@echo off
SETLOCAL EnableDelayedExpansion
SET DbgFile=D:\Data\debuginfo.txt
::*******REM This block doesnt work********
set string=" <InFilePath>D:\Data\All_Inputfiles\oldfile.txt</InFilePath>"
set FinalreplaceLine=!string!
set PREVFILE_NM=oldfile.txt
set TARG_FILE=newfile.txt
ECHO "Before Replace FinalreplaceLine "!FinalreplaceLine!>!DbgFile!
set FinalreplaceLine=!FinalreplaceLine:%PREVFILE_NM%=%TARG_FILE%!
ECHO "FinalreplaceLine "!FinalreplaceLine!>>!DbgFile!
编辑:
我用
制作文件filelist.txttoto.txt
titi.txt
tata.txt
这将是fileold.txt的替换名称。
@echo off
SETLOCAL EnableDelayedExpansion
SET DbgFile=D:\Data\debuginfo.txt
for /f "delims=" %%a in (FileList.txt) do call:replace "%%a"
exit/b
:replace
set string=" <InFilePath>D:\Data\All_Inputfiles\oldfile.txt</InFilePath>"
set FinalreplaceLine=!string!
set PREVFILE_NM=oldfile.txt
set TARG_FILE=%~1
ECHO "Before Replace FinalreplaceLine "!FinalreplaceLine!>>!DbgFile!
set FinalreplaceLine=!FinalreplaceLine:%PREVFILE_NM%=%TARG_FILE%!
ECHO "FinalreplaceLine "!FinalreplaceLine!>>!DbgFile!
DebugInfo.txt中的输出:
"Before Replace FinalreplaceLine "" <InFilePath>D:\Data\All_Inputfiles\oldfile.txt</InFilePath>"
"FinalreplaceLine "" <InFilePath>D:\Data\All_Inputfiles\toto.txt</InFilePath>"
"Before Replace FinalreplaceLine "" <InFilePath>D:\Data\All_Inputfiles\oldfile.txt</InFilePath>"
"FinalreplaceLine "" <InFilePath>D:\Data\All_Inputfiles\titi.txt</InFilePath>"
"Before Replace FinalreplaceLine "" <InFilePath>D:\Data\All_Inputfiles\oldfile.txt</InFilePath>"
"FinalreplaceLine "" <InFilePath>D:\Data\All_Inputfiles\tata.txt</InFilePath>"