我正在尝试遍历我拥有的数千个文件夹,并删除特定目录中没有指定名称的所有文件夹。这是我到目前为止所做的。
@ECHO OFF
SETLOCAL
SET "sourcedir=C:\testing\%%a\all\base\"
SET "keepfile=test.bat"
SET "keepdir=keepthisfolder"
FOR /d %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepdir%" RD /S /Q "%%a"
FOR %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepfile%" DEL "%%a"
GOTO :EOF
我已经尝试了数十种遍历数组的组合,但只有在我给它一个确切的名称时才有效。它以这种方式满足我的需要,但这意味着要逐一进行。
根据我的评论,如果
%%a
中的 C:\testing\%%a\all\base\
部分未知,我建议您将脚本更改为:
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "sourcedir=C:\testing"
Set "keepfile=test.bat"
Set "keepdir=keepthisfolder"
For /D %%G In ("%sourcedir%\*") Do (
For /D %%H In ("%%~fG\all\base\*") Do If /I Not "%%~nxH" == "%keepdir%" RD /S /Q "%%H"
For %%I In ("%%~fG\all\base\*") Do If /I Not "%%~nxI" == "%keepfile%" Del /F "%%I"
)
GoTo :EOF