我正在编写一个.bat脚本来删除所有文件夹,但大约有五个预先设置的文件夹。我所做的是创建一个解决每个文件夹的for循环,然后如果文件夹的名称与字符串匹配,则forloop检查IF语句,在这种情况下,它使用GOTO转到RD命令下面的行,这样删除被删除。
但是,这会结束for循环,这意味着每个文件夹都会被删除。
有没有更好的方法来实现我想要的,或者我的脚本是否有调整?
@echo off
echo Starting...
for /d %%i in ("C:\demo\*") do (
if "%%i" == "C:\demo\mark" goto skipdel
if "%%i" == "C:\demo\pjotr" goto skipdel
if "%%i" == "C:\demo\jasper" goto skipdel
rd /s /q %%i
echo Deleted
:skipdel
)
echo Done.
pause
答案 0 :(得分:1)
未经测试
@echo off
echo Starting...
for /d %%i in ("C:\demo\*") do (
if not "%%i" == "C:\demo\mark" if not "%%i" == "C:\demo\pjotr" if not "%%i" == "C:\demo\jasper" (
rd /s /q %%i
echo Deleted
)
)
goto存在for命令。您可以使用连续的IF模拟AND条件。您还可以使用一个内部FOR循环遍历要跳过的文件夹。
答案 1 :(得分:0)
您可以使用正则表达式及其与“|”的组合查找文件夹和删除内容的选项。 使用这种方法你只需要在正则表达式部分[0-9a-z]中添加/删除字符串,以便将来使用正则表达式 [mark | pjotr | jasper]。
以下是方法 -
FOR /f "tokens=*" %%G IN ('dir "c:\demo" /b /ad ^| findstr /i "^[0-9a-z][^/]*$"' ) DO (
REM Efficeint way to delete files and folder. Remove nul if you want verbose output
del /f/s/q "c:\demo\%%G\*.*" > nul
rmdir /s/q "c:\demo\%%G" > nul
)