Windows高级文件匹配

Her*_*CSO 11 regex windows batch-file

我正在尝试使用批处理文件列出目录中的文件,使得仅文件名(减去扩展名)仅匹配数字模式,例如125646543.pdf,这很容易表达为正则表达式[\ d] +\.pdf但当然我没有仅使用Windows机制的这些细节...我正在尝试使用仅限Windows的机制,因为我无法在目标服务器上安装任何其他东西,并且需要支持至少在Windows Server 2000和2003上.

我会针对这个特定的例子采取一个特定的解决方案,或者更通用的东西,比那些更为先进的东西*和?

我已经尝试使用set/a来为文件名添加一个数字,但由于它将字符串解释为环境变量而0(如果它们未定义),这不能很好地工作.我也尝试使用if %% ~na GTR 0,但它也匹配文本文件名,例如report.pdf,因为它似乎在这种情况下进行字符串比较.

pax*_*blo 25

findstr可以在Windows下正常运行正则表达式.我试试:

dir /b | findstr /i "^[0-9][0-9]*\.pdf$"
Run Code Online (Sandbox Code Playgroud)

"dir /b"给你的文件名只,每行一个.正则表达式匹配一个或多个数字,后跟一个句点,后跟您想要的扩展名.对于任何扩展,您可以:

dir /b | findstr "^[0-9][0-9]*\.[^\.]*$"
Run Code Online (Sandbox Code Playgroud)

显然,如果有其他情况更复杂,您可以调整正则表达式以适应.它没有UNIX正则表达式的全部功能,但它相当不错.

以下命令文件显示如何处理当前目录中满足"全数字"要求的每个pdf文件.

@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq" %%i in (`dir /b ^| findstr /i "^[0-9][0-9]*\.PDF$"`) do (
    set fspec=%%i
    echo.Processing !fspec!
)
endlocal
Run Code Online (Sandbox Code Playgroud)

网站http://www.robvanderwoude.com/batchfiles.php是CMD文件魔术(以及更多东西)的非常好的资源.