简体   繁体   中英

Replace find Special characters string - Batch

Thank you, with your hint I have adjusted my main batch file but variable TARG_FILE is not changing. I am trying to extract the file name from FileList_for_Import.txt which contains data as

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!

   )

` Output of this batch is as !TARG_FILE! is getting with each iteration as

file1.txt
file2.txt

but with the below statement it replaces as file1.txt in the first iteration and in second iteration it value doesn't change doesnt replace.

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

Thanks in advance for your help or valuable suggestions.

You're code is working on my computer ??? but you can try like this :

@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!

EDIT :

I make a file filelist.txt with

toto.txt
titi.txt
tata.txt

this will be the replacing name of 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!

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM