2

我有一个关于批处理文件的问题。我需要一个批处理文件,它将在每行的前 10 个字母中找到一串数字和字母组合(在多个 .txt 文件中),并将整行打印到输出 .txt 文件中。目前我一直在使用这个:

@echo off  
findstr "A1234 B5678" "*.txt"  
for /f "delims=" %%A in ('findstr "A1234 B5678" "*.txt"') do (echo %%A >> OUTPUTFILE.txt) 

所以我在上面寻找的是目录中所有txt文件中字母A1234和B5678(只是一个例子)的组合,并将它们打印到outputfile.txt中。效果很好,但我需要稍微改进一下。我只想批量在每行的前 10 个字母中找到这个组合(A1234 和 B5678),并将整行打印到输出 txt 文件中。例如,我们将有多个 txt 文件,它们本身将具有如下行:

00 A1234 QWERTZ  
AA B5678 ASDFGH

批处理将检查所有文件的字符串组合 A1234 和 B5678,并打印出包含该组合的整行。
我希望你们能理解我,因为我的英语不是最好的。此外,我在 cmd 方面的经验也不是很丰富,所以如果可能的话,请让它尽可能简单(易于理解):)。
非常感谢!

4

4 回答 4

0

还有另一种更复杂的方法,但它不依赖额外的代码。它将当前目录中的所有 txt 文件分成几行。这些行的前 10 个字符被输入 findstr。如果 findstr 成功,它将将该行回显到控制台。

使用以下批处理文件:

@echo off
setlocal
for /f "delims=" %%I in ('dir/B *.txt') do (
    for /f "delims=" %%J in (%%I) do (
        set "_=%%J"
        call echo %%_:~0,10%%|findstr "PATTERN1 PATTERN2"&&call echo %%_%%
    )
)
endlocal
goto:eof

对于裂缝:我知道有 ENABLEDELAYEDEXPANSION。所以可以通过使用来避免调用风格

setlocal ENABLEDELAYEDEXPANSION

        echo !_:~0,10!|findstr "PATERN1 PATERN2"&&call echo !_!

但我认为这是不好的风格,因为这往往会导致问题,特别是如果你想要回应的任何内容包括“!” 所以我在我的例子中总是使用 call 和 double %% 风格,除了 DELAYEDEXPANSION 是无法避免的。

于 2013-09-16T10:18:54.160 回答
0

如果您对使用 cmd 不以为然,则可以将 findstr 与正则表达式标志一起使用,如下所示:

C:\>type test.txt
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678

C:\>findstr /R "^*[A][0-9]* [B][0-9]*$" test.txt
BB A1234 B5678
BB A1234 B5678
BB A1234 B5678
BB A1234 B5678
BB A1234 B5678
BB A1234 B5678
BB A1234 B5678

-- ab1

于 2013-09-16T08:44:08.653 回答
0

这使用了一个findrepl.bat类似于 grep 但作为普通批处理文件运行的帮助批处理文件 - 可以在这里找到 - http://www.dostips.com/forum/viewtopic.php?f=3&t=4697

findrepl.batjscript在 Windows Scripting Host 中使用,除非您的 IT 管理员禁用 WSH,否则它将正常工作。

@echo off 
for %%a in (*.txt) do (
echo ============="%%a"================>>search
type "%%a"|findrepl "^.. (A1234|B5678)">>search 
)
ren search search.txt
于 2013-09-16T09:52:27.007 回答
0

如果我没听错,您想在前 10 个字符中搜索多个特定的字母数字组合。我认为您可以使用正则表达式来做到这一点,但不幸的是 findstr 无法处理替代模式。

findstr /r "(pattern1|pattern2)"

不起作用。所以你必须分支到 grep 的 windows 可以在这里找到 n 模式的语法是:

grep -h -E -e "^.. ({PATTERN 1}|{PATTERN 2}|...|{PATTERN 2})" *.txt

因此,对于您的示例,您可以使用:

grep -h -E -e "^.. (A1234|B5678)" *.txt

在每个 *.txt 中搜索以 2 个随机字母开头的任何行,然后是空格,然后是 A1234 或 B5678,并打印出该行。开头的 -h 禁止输出该行的文件名。

于 2013-09-16T09:25:43.583 回答