Batch file Windows批处理文件以删除除少数文件夹以外的所有文件夹
我正在编写一个.bat脚本来删除所有文件夹,但大约有五个预设文件夹。我所做的是创建一个对每个文件夹进行寻址的for循环,然后forloop通过IF语句检查文件夹名称是否与字符串匹配,在这种情况下,它使用GOTO转到RD命令下面的行,从而跳过删除操作 但是,这将结束for循环,这意味着在删除第一个异常之前,每个文件夹都是如此 有没有更好的方法来实现我想要的,或者对我的脚本进行了调整Batch file Windows批处理文件以删除除少数文件夹以外的所有文件夹,batch-file,cmd,Batch File,Cmd,我正在编写一个.bat脚本来删除所有文件夹,但大约有五个预设文件夹。我所做的是创建一个对每个文件夹进行寻址的for循环,然后forloop通过IF语句检查文件夹名称是否与字符串匹配,在这种情况下,它使用GOTO转到RD命令下面的行,从而跳过删除操作 但是,这将结束for循环,这意味着在删除第一个异常之前,每个文件夹都是如此 有没有更好的方法来实现我想要的,或者对我的脚本进行了调整 @echo off echo Starting... for /d %%i in ("C:\demo\*") do
@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
未经测试
@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
)
)
该命令的转到存在。您可以使用连续的IFs在bat中模拟和调节。您还可以使用一个或多个内部FOR循环遍历要跳过的文件夹。您可以使用正则表达式及其与“|”选项的组合来查找文件夹并删除内容。 使用这种方法,您只需在正则表达式部分[0-9a-z]中添加/删除字符串,将来就可以使用Ex-use正则表达式[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
)
goto中断了上下文的连接。不要忘记,这在路径有空格的系统文件中无法工作。。。如果您有类似于“C:/ProgramFiles(86x)/…”的路径,则必须使用:for/d%%i in('type“C:\demo*”)do(