我使用
findstr
搜索包含随机文件名的文件,包括 9 或 10 个随机数字和随机文件扩展名。
我的测试目录中有以下文件:
ABCD142359865.pdf
EDFGH9658798563.docx
ZdgBE158795832.sql
GHrK147859632.mdb
!!!!!789548796.eml
XGU125965879.jpg
我有以下行直接传递给 cmd:
FOR /F "delims=" %%A IN ('dir /a-d /b /s "%~dp0" ^| findstr /i /r "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\."') DO del /a /q "%%~A"
FOR /F "delims=" %%A IN ('dir /a-d /b /s "%~dp0" ^| findstr /i /r "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\."') DO del /a /q "%%~A"
它按预期工作,但是否可以将这两个命令合二为一?
根据您的正文和显示的示例,我会提供以下建议:
@For /F "EOL=? Delims=" %%G In ('Dir /A:-D-L /B /S ^| %SystemRoot%\System32\findstr.exe /R /C:"[^\\0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]\.[^\.][^\.]*$" /C:"[^\\0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]\.[^\.][^\.]*$"') Do @Del /A /F "%%G" 2>NUL
上面应该将所有扩展名为一个或多个非句点字符的文件传递给 Do
命令,其基本名称以任何非数字字符结尾,后跟
only九个或十个数字字符的序列。
根据您的评论要求,为确保文件名具有一个或多个非句点字符的扩展名,以及以任何英文字母字符或感叹号结尾的基本名称,后跟仅九个或十个数字字符的序列,您可以尝试:
@For /F "EOL=? Delims=" %%G In ('Dir /A:-D-L /B /S ^| %SystemRoot%\System32\findstr.exe /R /C:"[a-Z!][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]\.[^\.][^\.]*$" /C:"[a-Z!][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]\.[^\.][^\.]*$"') Do @Del /A /F "%%G" 2>NUL
请注意,在后一个版本中,您应确保未启用延迟变量扩展。
为了测试,您可能希望将
@Del /A /F "%%G" 2>NUL
更改为 @Echo Del /A /F "%%G" 2>NUL