我在创建批处理文件时遇到问题,这会为我纠正一些文本文件。所以我需要你的建议。 我需要在字段中获取数据| 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|
感谢您的帮助。
答案 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
您需要更改sourcedir
和destdir
的设置以适合您的具体情况。
我使用了一个名为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