2014-04-23 2 views
0

힌트와 함께 주 배치 파일을 조정했지만 변수 TARG_FILE이 변경되지 않았습니다. 나는이 배치의 데이터 찾기 바꾸기 특수 문자 문자열 - 일괄

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! 

    ) 

`

`

file1.txt 
file2.txt 

같은 출력이 ! TARG_FILE 같다 포함 FileList_for_Import.txt에서 파일 이름을 추출하기 위해 노력하고 있습니다!

file1.txt 
file2.txt 

각 반복에 받고 있지만, 아래 문은 첫 번째 반복과 나던 변경 대체하지 않습니다 두 번째 반복이 값은 File2.txt로 대체합니다.

set FinalreplaceLine=!FinalreplaceLine:%PREVFILE_NM%=%TARG_FILE%! 

도움이나 소중한 제안에 미리 감사드립니다.

+0

는 루프 문제에 대한 내 편집을 확인합니다. – SachaDee

답변

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! 

편집 :

나는 fileold.txt의 대체 이름이됩니다

toto.txt 
titi.txt 
tata.txt 

이와 파일 Filelist.txt의합니다. DebugInfo.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! 

출력 :

"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>"