使用.bat文件替换文件末尾的文本

时间:2013-12-18 14:23:22

标签: replace batch-processing

我有一个文件,其中一个标题始终以H开头;并以; 4

结尾

然后会有一个或多个以L开头的行;并以; 1

结束

看起来像这样:

H;;69622;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4
L;;0092820046;;2,000;;;;;;;;;;;20131216;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;1
L;;0092825046;;5,000;;;;;;;;;;;20131216;;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0;;;;;;;;;;;;;;;;;;;;;;1

我需要做一个做两件事的批处理工作:

1)添加;;;在以H开头的行上结束4之前; 2)添加;;;;;;然后在以L开头的行上结束1;

任何可以提供帮助的人?

最好的问候Tore

修改:添加了代码标记


编辑:OP的最终代码版本

 @ECHO OFF 
 setLocal EnableDelayedExpansion 
 IF NOT EXIST c:\tmp\barex\barex\ordchgr.edi GOTO :EOF
 move c:\tmp\barex\barex\ordchgr.edi c:\tmp\barex\contents.txt 
 set SAVESTAMP=%DATE:/=%%TIME::=% 
 set SAVESTAMP=%SAVESTAMP: =% 
 SET "add2H=;;;" 
 SET "add2L=;;;;;;" 
 ( 
  FOR /f "delims=" %%a IN (c:\tmp\barex\contents.txt) DO ( 
   SET line=%%a 
   CALL :repl 
  ) 
 )>c:\tmp\barex\output.txt 
 move output.txt c:\tmp\barex\edi\ordcgr%SAVESTAMP%.edi 
 move contents.txt c:\tmp\barex\edi\contents%SAVESTAMP%.txt 
 GOTO :EOF 
 :repl 
 IF %line:~0,1%==H ECHO %line:~0,-1%%add2H%%line:~-1% 
 IF %line:~0,1%==L ECHO %line:~0,-1%%add2L%%line:~-1% 
 GOTO :eof

1 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL
SET "add2H=;;;"
SET "add2L=;;;;;;"
(
 FOR /f "delims=" %%a IN (q20660695.txt) DO (
 SET line=%%a
 CALL :repl
 )
)>newfile.txt
GOTO :EOF
:repl
IF %line:~0,1%==H ECHO %line:~0,-1%%add2H%%line:~-1%
IF %line:~0,1%==L ECHO %line:~0,-1%%add2L%%line:~-1%
GOTO :eof

这应该按照你的要求去做。我使用q20660695.txt作为输入文件名,newfile.txt作为结果文件名。