2

我想在特定文件夹中具有特定文件扩展名的所有文件中搜索如下所示的字符串:“tt1234567”

这适用于 Linux:

find /media/ -name "*.txt" -exec grep -oa "tt[0-9]\{7\}" {} \;

我怎样才能将其重写为批处理?也许是这样的?

cd C:\media\
dir /S /B *.txt >> [A little code that matches (tt[0-9]{7})] >> c:\blabla.txt
4

2 回答 2

2

编辑:删除了可能有问题的引号。
编辑:固定代码。

FINDSTR.EXE没有正确实现 REGEX 标准,因此通过指定的次数匹配 [0-9] 0 将无法正常工作。

cd C:\media\
for /f %%x in ('dir /S /B *.txt') do (
  echo %%x| findstr /r "^tt[0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.[tT][xX][tT]$" >> c:\blabla.txt
)

%%x和之间不要加空格|,否则会不匹配。

没有必要将FOR命令分成三行,我这样做只是为了便于阅读。
您可以删除(并将)其全部放在一行上。


或者,您可以下载并使用SED.

希望这可以帮助!

于 2012-10-20T23:06:16.657 回答
0

cmd.exe有管道运算符,所以你可以使用

dir /S /B *.txt | findstr "tt[0-9][0-9][0-9][0-9][0.9][0-9][0-9]\.txt$" >> c:\blabla.txt
  • findstr默认情况下打开了正则表达式和不区分大小写的选项。
  • 支持的(非常有限的)正则表达式语法findstr记录在TechNet Library中。
于 2013-06-10T14:37:20.903 回答