首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >批处理,只在前10个字符(在txt文件中)中找到数字和字母组合的字符串,然后打印整行。

批处理,只在前10个字符(在txt文件中)中找到数字和字母组合的字符串,然后打印整行。
EN

Stack Overflow用户
提问于 2013-09-16 08:27:02
回答 4查看 2.1K关注 0票数 2

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

代码语言:javascript
运行
复制
@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文件,在它们自己的行中,如下所示:

代码语言:javascript
运行
复制
00 A1234 QWERTZ  
AA B5678 ASDFGH

批处理将检查字符串组合A1234和B5678的所有文件,并打印出包含该组合的整行。

我希望你们能理解我,因为我的英语不是最好的。另外,我在cmd方面也不是很有经验,所以如果可能的话,请让它尽可能简单(可以理解) :)。

非常感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-16 10:18:54

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

使用以下批处理文件:

代码语言:javascript
运行
复制
@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

对于裂缝:我知道是有缺陷的。这样,就可以避免使用

代码语言:javascript
运行
复制
setlocal ENABLEDELAYEDEXPANSION

代码语言:javascript
运行
复制
        echo !_:~0,10!|findstr "PATERN1 PATERN2"&&call echo !_!

但我认为这是不好的风格,因为这往往会造成问题,特别是如果你想要回音包括'!‘因此,我总是在我的示例中使用调用和double %样式,但不能避免DELAYEDEXPANSION。

票数 0
EN

Stack Overflow用户

发布于 2013-09-16 08:44:08

如果在使用cmd时设置为死区,则可以将findstr与regex标志一起使用,如下所示:

代码语言:javascript
运行
复制
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

票数 0
EN

Stack Overflow用户

发布于 2013-09-16 09:25:43

如果我猜对了,您想在前10个字符中搜索多个特定的字母数字组合。我认为您可以使用正则表达式来完成这一任务,但不幸的是findstr无法处理其他模式。

代码语言:javascript
运行
复制
findstr /r "(pattern1|pattern2)"

不管用。因此,您必须扩展到grep,这可以找到这里,n个模式的语法是:

代码语言:javascript
运行
复制
grep -h -E -e "^.. ({PATTERN 1}|{PATTERN 2}|...|{PATTERN 2})" *.txt

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

代码语言:javascript
运行
复制
grep -h -E -e "^.. (A1234|B5678)" *.txt

在每个*.txt中搜索以2个随机字母开头的任何行,后面跟着一个空格,然后是A1234或B5678,然后打印出这一行。开头的-h抑制行的文件名的输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18823489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档