Windows批处理文件删除除几个文件夹以外的所有文件夹

时间:2017-03-09 11:27:25

标签: batch-file cmd

我正在编写一个.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

2 个答案:

答案 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

)