赫勒洛, 不起作用的脚本如下,
@echo off
setlocal EnableDelayedExpansion
echo.
echo.
echo.
(for /F "delims=" %%a in (find.txt) do (
set "in=%%a"
for %%v in (INT CHAR) do if "!in:*%%v=%%v!" neq "!in!" set "out=!in:*%%v=%%v!"
echo !out!
)) > D:\test\TGT.txt
每行都以字符串结尾,例如:
abc
或abc_01
/DEF
或DEF_02
等
请建议一个脚本,该脚本将仅捕获和打印以
INT
或 CHAR
开头的行,并且最后一个字符串末尾没有 _01
或 _02
。这里_
(下划线)是识别和忽略该行的关键。
source.txt
INT SDFF 9784 abc
INT SDFF 098 abc_01
INT SDFF 9784 abc_02
ABC INT SDFF 098 abc_03
CHAR SDFF 9784 xyz
CHAR SDFF 098 XYZ_02
INT jkdf 981 DEF
out.txt
(预期结果)
INT SDFF 9784 abc
CHAR SDFF 9784 xyz
INT jkdf 981 DEF
此线路过滤任务的简单解决方案:
%SystemRoot%\System32\findstr.exe /B /R "CHAR\> INT\>" "source.txt" | %SystemRoot%\System32\findstr.exe /R /V "_[0123456789][0123456789]*$" >"out.txt"
第一个 FINDSTR 使用区分大小写的 r 正则表达式在文件
source.txt
中搜索以单词 CHAR
或单词 INT
开头的行 b。例如以
CHARACTER
或 INT32
开头的行会被第一个 FINDSTR 忽略。
注意: 搜索字符串中的空格被
"
括起来,而搜索字符串中没有留下 /C:
,则被解释为逻辑 OR。
找到的行将被重定向,并使用
|
作为第二个 FINDSTR 的输入。
第二个FINDSTR使用区分大小写的r正则表达式搜索以下划线和一个或多个数字结尾的行,并输出插入的v结果,这意味着所有以下划线和一个结尾的行NOT或更多数字。
注意: 也可以使用
[0-9]
代替 [0123456789]
,但 [0-9]
还包括三个字符 ¹²³
。
第二个 FINDSTR 的输出通过
>
重定向到文件 out.txt
。
打开命令提示符,运行
findstr /?
并阅读输出帮助以获取有关所使用选项和正则表达式的更多详细信息。
另请参阅有关 使用命令重定向运算符 的 Microsoft 文章,了解重定向运算符
|
和 >
的说明。