批处理正则表达式:查找文件名中包含数字的文件

6
我希望能够提供一个使用正则表达式查找文件名中包含数字或特定数字范围的批处理文件示例。请问是否有这样的方法?能否提供一个简单的示例呢?

你需要精确的范围和文件名格式是什么? - Hand-E-Food
3个回答

11

其中一部分功劳归于Y.A.P的回答。

以下代码将获取目录中任何文件名至少包含一个数字的所有文件:

@Echo Off
CD C:\Folder\To\Process
Dir /B>Dir.temp
FindStr /R "[0-9]" "Dir.temp">FindStr.temp
Del Dir.temp
For /F "tokens=*" %%a In (FindStr.temp) Do Call :WorkIt "%%a"
Del FindStr.temp
Exit /B

:WorkIt
:: Insert code here.  Use %1 to get the file name with quotes.  For example:
Echo Processing %1...
Exit /B

FindStr行包含正则表达式。命令行版本的正则表达式是有限制的。您需要查找哪个确切的范围并且文件名是什么格式?

例如,如果您知道所有文件都有3位数字,您可以使用表达式[0-2][0-9][0-9]将其限制为从000到299的所有项。


2
嗨,可以通过将 dir /B 的输出导入到 findstr 中来摆脱中间文件 Dir.temp。像这样 dir /B | findstr /R "[0-9]" > FindStr.temp。否则,非常好的帖子,对我帮助很大。干杯! - Jagger

2
我猜你在谈论命令提示符/MS-Dos批处理文件吗?
如果是的话,很遗憾,答案是否定的。普通的批处理文件只支持以下通配符:
    * = match all

并且 ? = 匹配 1

所以:

      mytune*.mp?

会匹配:
      mytune01.mp3, mytune01.mpg, mytune-the-best.mpe

然而,还有另一种选择...
如果你使用的是现代Windows版本,那么很有可能你已经安装了PowerShell。点击“开始”->“运行”,然后输入PowerShell并按回车键,如果你看到一个类似命令提示符窗口的东西,那么就说明你已经安装了PowerShell。如果没有,那么可以在微软网站上下载。
一旦你安装好了PowerShell,如果想直接开始使用,你可以在这里找到所有关于正则表达式的PS信息:

http://powershell.com/cs/blogs/ebook/archive/2009/03/30/chapter-13-text-and-regular-expressions.aspx

我建议先花一个小时左右学习基础知识。

是的,你猜对了,我在谈论Windows批处理。 我猜想这样的东西不存在,但问一下也无妨。 无论如何,谢谢 :) - Ori
绝对的... PowerShell 肯定可以做你想要的事情,而且可以用来代替批处理文件。 - shawty

1

在findstr中有一个功能。 请查看这里


1
findstr 只在文件内搜索给定的字符串,在这种情况下,我认为 OP 是关于命令行正则表达式的。 - shawty
如果您将命令输出写入文件,则可以使用findstr搜索它。 - Hand-E-Food

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接