Windows批处理文件删除除几个文件夹以外的所有文件
问题描述:
我正在编写一个.bat脚本来删除所有文件夹,但大致是五个预设文件夹。我所做的是创建一个for循环来处理每个文件夹,然后forloop通过IF语句检查文件夹的名称是否与字符串匹配,在这种情况下,它使用GOTO转到RD命令下面的行,以便删除被跳过。Windows批处理文件删除除几个文件夹以外的所有文件
但是,这结束了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
答
未测试
@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语句存在于命令。你可以用连续的IF来模拟和条件。您也可以使用一个内部的FOR循环迭代要跳过的文件夹。
+1
)我强烈建议使用switch'/ I'来比较路径/文件名,用'if'... – aschipfl
答
您可以使用正则表达式及其与'|'的组合选项来查找文件夹并删除内容。 使用这种方法,您只需在正则表达式部分[0-9a-z]中添加/删除字符串,将来没有太大问题,Ex使用正则表达式[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
)
转到打破了上下文。 – npocmaka
,不要忘记,这在路径中有空格的系统文件中不起作用...如果你有如下路径:“C:/ Program Files(86x)/ ...”你必须使用:for/d% ('type“C:\ demo \ *”')do( –