简体   繁体   English

替换查找特殊字符字符串-批处理

[英]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. 谢谢您的提示,我已经调整了我的主批处理文件,但变量TARG_FILE没有改变。 I am trying to extract the file name from FileList_for_Import.txt which contains data as 我正在尝试从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!

   )

` Output of this batch is as !TARG_FILE! `该批次的输出为!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. 但是使用以下语句,它将在第一次迭代中替换为file1.txt,而在第二次迭代中,其值不变且不会替换。

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 我用一个文件filelist.txt

toto.txt
titi.txt
tata.txt

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

Output in DebugInfo.txt : 在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>"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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