正如我在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
大小写-不敏感的/L
L迭代匹配。附加了子目录名,并在后附加了一个反斜杠,使其不与"…"匹配;。。。\npmnotamatch";。
如果findstr
找到匹配,则errorlevel
设置为0
,因此应跳过该目录,否则删除。
要非常小心。请参阅有关董事会名称的注意事项