更正文件中两个分隔符之间的多个字符串

时间:2016-04-08 13:32:14

标签: windows batch-file

我在创建批处理文件时遇到问题,这会为我纠正一些文本文件。所以我需要你的建议。 我需要在字段中获取数据| No = xxx |数字格式,没有任何字母字符,特殊字符或空格

我正在寻找可以完成这项工作的批处理代码,因为我有很多文件存在这个问题。

文本文件(input.txt)是这样制作的:

|Job=1|Typ=S|Action=Order|No=531.04220440.00|
|Job=1|Typ=P|Action=Information|M=1|
|Job=2|Typ=S|Action=Order|No=ALR-2005605 |
|Job=2|Typ=P|Action=Information|M=3|
….
|Job=99|Typ=S|Action=Order|No=AF502033H|
|Job=99|Typ=P|Action=Information|M=1|

顺便说一句,我无法理解JREPL。 我必须创建文件来纠正| No =和|之间的输入 在批处理(output.txt)

之后,文件示例应如下所示
|Job=1|Typ=S|Action=Order|No=5310422044000|
|Job=1|Typ=P|Action=Information|M=1|
|Job=2|Typ=S|Action=Order|No=2005605|
|Job=2|Typ=P|Action=Information|M=3|
….
|Job=99|Typ=S|Action=Order|No=502033|
|Job=99|Typ=P|Action=Information|M=1|

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q36500938.txt"
SET "outfile=%destdir%\outfile.txt"
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
 ECHO "%%a"|FIND "|No=" >nul
 IF ERRORLEVEL 1 (ECHO(%%a
 ) ELSE (
  SET "line=%%a"
  CALL :process
 )
)
)>"%outfile%"

GOTO :EOF

:process
SET "tail="
:procloop
SET "line=%line:~0,-1%"
SET "char=%line:~-1%"
IF "%char%"=="=" (
 FOR %%x IN ("%line%%tail%|") DO ECHO(%%~x
 GOTO :EOF 
)
IF "%char%" geq "0" IF "%char%" leq "9" SET "tail=%char%%tail%"
GOTO procloop

您需要更改sourcedirdestdir的设置以适合您的具体情况。

我使用了一个名为q36500938.txt的文件,其中包含我的测试数据。

生成定义为%outfile%

的文件

虽然没有明确说明,但您希望消除每行末尾|No=|之间的所有非数字。

以上只是检测该行是否包含|No=,并假设如果它出现,则它在最后一个字段中。如果没有出现,只需回流线。如果确实显示,请处理line中的行。

处理只是删除最后一个字符,然后确定新的最后一个字符是否为=。如果是,假设它是=中的No=,那么添加回尾部并关闭|并输出它。通过将所需的字符串放在引号中,您可以使用for将其分配给%%x,然后使用%%~x删除封闭的引号 - 否则您将遇到难以解决的语法错误。

如果最后一个字符不是=但是0 .. 9则累积它,否则忽略它并继续处理,直到检测到=

答案 1 :(得分:0)

这是一个简单的JREPL.BAT解决方案

call jrepl "\D" "" /p "(\|No=)([\c|]+)(\|)$" /prepl "$1+{$2}+$3" /f input.txt /o output.txt