使用批处理文件删除所有驱动器上文件夹名称中带有“foo”或“bar”的所有文件夹

使用批处理文件删除所有驱动器上文件夹名称中带有“foo”或“bar”的所有文件夹

我在尝试着删除所有驱动器上具有上述命名模式的所有文件夹,但仅限于第一个文件夹级别,即驱动器号正下方,例如:

F:\this folder's name contains FOO and should be deleted

...没有确认也没有错误消息(例如,如果没有找到文件夹),使用批处理文件。

我发现了这一点: 使用批处理文件删除名称中带有 tmp 的所有文件夹并想知道那里的解决方案是否是一个好的起点?

@echo off
set dir="c:\FOLDERLOCATION\"
FOR /D /R %dir% %%X IN (*.tmp) DO RMDIR /S /Q "%%X"
pause
exit

答案1

阅读并关注FOR- 有条件地执行命令多次。。您可以申请FOR-文件夹, 或者FOR 命令结果如下:

FOR-文件夹(缺点:不区分大小写;通配符不允许使用类似正则表达式的模式,所以我们需要多次运行循环)。

@echo off
set "dir=c:\FOLDERLOCATION\"
pushd "%dir%"
::                          ↓↓↓↓                      echo for debugging
FOR /D /R %%X IN (*foo*) DO echo RMDIR /S /Q "%%~fX"
FOR /D /R %%X IN (*bar*) DO echo RMDIR /S /Q "%%~fX"
::                          ↑↑↑↑                      echo for debugging
popd
pause

FOR 命令结果结合findstr(优点:findstr独立允许区分大小写和类似正则表达式的搜索模式):

@echo off
set "dir=c:\FOLDERLOCATION\"
FOR /F "delims=" %%X IN ('dir /B/S /A:D "%dir%" ^| findstr /I "foo|bar"') DO 2>NUL echo RMDIR /S /Q "%%~fX"
:: ECHO in above line merely for debugging
pause

缺点是dir列表是静态生成的,所以我们需要使用重定向错误消息2>NUL

相关内容