批处理脚本搜索并删除所有匹配名称“*Cache*”但从遍历中遗漏某些路径的文件夹

Batch Script Search & Delete all folders that match name "*Cache*" but leave out certain paths from traversal

正如我在 Q-title 中所问的那样,我如何遍历整个 %SYSTEMDRIVE% 根文件夹以查找名称中包含 *Cache* 的任何目录,并从内到外完全清除该目录但忽略来自此类遍历删除的某些路径,例如 %APPDATA%\npm ?

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

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

但我想完全跳过对 %APPDATA%\npm 的研究,我该如何实现?

注: OS:Windows 10 64Bit

@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到您的驱动器的根目录,否则您将select该驱动器上的currently-logged目录。

然后简单地 echo 找到 findstr 的目录名称,以查看该名称是否包含要排除的目录名称。需要引用该名称以允许包含 & 的名称。 Findstr 查找 /i case-Insensitive /L Literal match to the constant-string 包含在 appdata 中。附加了 subdirectotyname,并在 that 后附加了一个反斜杠,这样它就可以 not 匹配 "...\npmnotamatch".

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

要非常非常小心。请参阅 Caution regarding directorynames