我正在尝试使用批处理文件列出目录中的文件,使得仅文件名(减去扩展名)仅匹配数字模式,例如像125646543.pdf这样的东西很容易表达为正则表达式[\ d] + \ .pdf但当然我没有这样的细节只有Windows机制......我试图用Windows-做这个只有机制,因为我无法在目标服务器上安装任何其他东西,至少在Windows Server 2000和2003上需要支持它。
我会针对这个特定的例子采取一个特定的解决方案,或者更具通用性的东西,而不仅仅是那些东西*和
我已经尝试使用set / a来为文件名添加一个数字,但由于它将字符串解释为环境变量而0(如果它们未定义),这不能很好地工作。我也试过使用if %% ~na GTR 0,但它也匹配文本文件名,例如report.pdf,因为它似乎在这种情况下进行字符串比较。
答案 0 :(得分:25)
findstr
可以在Windows下正常使用正则表达式。我试试:
dir /b | findstr /i "^[0-9][0-9]*\.pdf$"
"dir /b"
只为您提供文件名,每行一个。正则表达式匹配一个或多个数字,后跟一个句点,后跟您想要的扩展名。对于任何扩展,您可以这样做:
dir /b | findstr "^[0-9][0-9]*\.[^\.]*$"
显然,如果还有其他情况更复杂,您可以调整正则表达式以适应。它没有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
网站http://www.robvanderwoude.com/batchfiles.php是CMD文件魔术(以及更多内容)的非常好的资源。
答案 1 :(得分:2)
Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder = "c:\test"
Set objFolder = objFS.GetFolder(strFolder)
For Each strFile In objFolder.Files
strFileName = strFile.Name
strExtension = objFS.GetExtensionName(strFile)
strBase = objFS.GetBaseName(strFile)
If IsNumeric(strBase) Then 'check if numeric
WScript.Echo strBase
'continue to process file here.......
End If
Next
有关vbscript的更多信息,请阅读manual
答案 2 :(得分:0)
我将目录结果通过管道传递给grep:
dir [<Drive>:][<Path>] * | grep /regex/