繁体   English   中英

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

[英]Replace find Special characters string - Batch

谢谢您的提示,我已经调整了我的主批处理文件,但变量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%! 

在此先感谢您的帮助或提出宝贵建议。

您的代码正在我的计算机上工作??? 但您可以这样尝试:

@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.txt

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

暂无
暂无

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

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