findstr:组合 2 个命令

问题描述 投票:0回答:1

我使用

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"

它按预期工作,但是否可以将这两个命令合二为一?

windows batch-file cmd
1个回答
0
投票

根据您的正文和显示的示例,我会提供以下建议:

@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

© www.soinside.com 2019 - 2024. All rights reserved.