批处理脚本搜索 &删除所有与名称匹配的文件夹 "*Cache*" 但从遍历中省略某些路径



正如我在Q-title中所问的,对于任何名称中包含*Cache*的目录,我如何遍历整个%SYSTEMDRIVE%根文件夹,并从内到外完全清除该目录,但在遍历删除中保留某些路径,如%APPDATA%npm

我有以下命令来遍历和删除名称中包含Cache(不区分大小写(的所有文件夹,并完全删除这些文件夹:

pushd "%SYSTEMDRIVE%"
for /d /r %%a in ("*Cache*") do if exist "%%a" ( echo "%%a" & rd /s /q "%%a" )
popd

但我想完全跳过对%APPDATA%npm的研究,我如何才能做到这一点?

注意:操作系统:Windows 10 64位

@ECHO Off
SETLOCAL
pushd "%SYSTEMDRIVE%"
for /d /r %%a in ("*cache*") do if exist "%%a" ECHO "%%a"|FINDSTR /i /L /c:"%appdata%npm" >NUL&IF ERRORLEVEL 1 (echo delete "%%a") ELSE (echo skip "%%a")
POPD
GOTO :EOF

第一个问题:您需要pushd到驱动器的根目录,否则您将选择该驱动器上当前登录的目录。

然后简单地将找到的directorynameecho发送到findstr,以查看该名称是否包含要排除的directorynname。该名称需要加引号,以允许使用包含&的名称。Findstr查找与appdata中包含的常量字符串的/i大小写-不敏感的/LL迭代匹配。附加了子目录名,并在后附加了一个反斜杠,使其与"…"匹配;。。。\npmnotamatch";。

如果findstr找到匹配,则errorlevel设置为0,因此应跳过该目录,否则删除。

要非常小心。请参阅有关董事会名称的注意事项

最新更新