批处理脚本搜索并删除所有匹配名称“*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
正如我在 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