我需要帮助创建Windows批处理脚本来列出与给定目录中的此正则表达式不匹配的文件:
std::variant
示例:
输出应为文件名:^[0-9]{5}\s[A-Z].*$
和ABC_12345.txt
和123456-ABC.pdf
。
但是批处理脚本不应输出文件名1234 NO.doc
。
此外,如果脚本可以将列表导出到文件12345 ABC.txt
中,那将会很棒。
答案 0 :(得分:1)
FINDSTR 可用于过滤 DIR 的输出以获取所需列表:
@dir /A-D /B | %SystemRoot%\System32\findstr.exe /I /R /V /C:"^[0123456789][0123456789][0123456789][0123456789][0123456789] [ABCDEFGHIJKLMNOPQRSTUVWXYZ]" >C:\temp\DoesNotMatch.txt
DIR 的输出是因为/A-D
仅以裸格式显示当前目录中的文件(属性而非目录),这是因为选项/B
表示仅具有扩展名的文件名,但是没有文件路径。在命令提示符窗口dir /?
中运行以获取有关此命令及其选项的帮助。
此 DIR 的输出通过重定向操作符|
重定向到 FINDSTR 。有关详细信息,请阅读Microsoft关于Using command redirection operators的文章。
FINDSTR 不区分大小写,这是因为/I
进行了正则表达式搜索,因为/R
匹配了用选项/C:
和双引号指定的表达式的行,并且由于选项/V
会输出反转的结果,这意味着正则表达式不匹配任何字符串的行。
此处必须使用选项/C:"..."
来指定要解释的字符串,因为/R
是正则表达式,而不是原义字符串,否则将仅使用"..."
来解释空格字符作为两个正则表达式搜索字符串之间的分隔符,它们将在每行上进行或运算。
由于 FINDSTR 支持的正则表达式语法非常有限,因此正则表达式搜索字符串看起来有些奇怪。在命令提示符窗口findstr /?
中运行,以获取有关此命令及其选项和正则表达式支持的帮助。我建议另外阅读SS64 - FINDSTR和What are the undocumented features and limitations of the Windows FINDSTR command?
^
...表示由于没有文件路径输出而在文件名开头的行首。
[0-9]
可以使用,但也可以匹配¹
,²
,³
。因此,[0123456789]
仅用于真正匹配这10位数字中的任何一个。
FINDSTR 不支持像{5}
这样的乘法器。因此,有必要在搜索表达式中编写五次数字字符类定义。
FINDSTR 不支持与Unicode标准匹配的任何空白字符的字符类\s
。但是在文件名中不允许使用垂直空格或在空格中非常不寻常,在文件名中不允许使用水平制表符,文件名中可以使用不间断空格,但这也不是很常见。 Unicode代码值为U + 1680,U + 180E,U + 2000到U + 2008的特殊字符很可能也从未在文件名中使用过。因此\s
可以用普通的空格字符代替。
[A-Z]
可以使用,但也可以与ÄäÖöÜü
之类的其他许多字符匹配,以在此处仅列出一些字符。因此最好使用[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
来匹配不区分大小写的ASCII字符。
FINDSTR 的输出已通过>
重定向到文件C:\temp\DoesNotMatch.txt
中,如果在使用此单个命令行执行批处理文件时已经存在该文件,则该文件将被覆盖。 / p>