2013-12-18 93 views
0

我有一个报头总是用H开始一个文件在文件结尾替换文本;以及与结束; 4使用bat文件

然后会有一个或多个开始的行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)add ;;;;;;;;;;;;;;;;;;;;;在以L开头的行上结束1之前;

任何人都可以协助?

问候撕毁

编辑:添加代码标签


编辑: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 
+0

它真的必须在批处理脚本中完成吗? 并且是PowerShell的可能性? – woutervs

+0

@回响 SETLOCAL EnableDelayedExpansion FOR/F “令牌= * delims =” %%一个中(contents.txt)做( 集合/ A N + = 1个 组标线= %%一个 回波!标线!>> output.txt set subLine =!strLine:〜0,1! if/i。!subLine!EQU .H; echo!strLine!;;; 4 )我试图将其输出到一个文件中......它似乎是工作bfor一行,但那么类型L ... – user3115573

+0

它应该运行在Windows服务器..也可能是wsf – user3115573

回答

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作为结果文件名。

+0

我会尝试。谢谢! – user3115573

+0

Hi.Thanks - 它工作完美。我试图添加一个命令来在同一个进程中移动q20660695.txt和newfile.txt。它说该文件被另一个进程使用。任何想法如何做,或者我应该只是一个独立的过程? – user3115573

+0

你需要在''> newfile.txt'和第一个'GOTO:EOF'之间出现'MOVE'行 – Magoo