2017-03-09 155 views
1

我正在編寫一個.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 
+3

轉到打破了上下文。 – npocmaka

+0

,不要忘記,這在路徑中有空格的系統文件中不起作用...如果你有如下路徑:「C:/ Program Files(86x)/ ...」你必須使用:for/d% ('type「C:\ demo \ *」')do( –

回答

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語句存在於命令。你可以用連續的IF來模擬和條件。您也可以使用一個內部的FOR循環迭代要跳過的文件夾。

+1

)我強烈建議使用switch'/ I'來比較路徑/文件名,用'if'... – aschipfl

0

您可以使用正則表達式及其與'|'的組合選項來查找文件夾並刪除內容。 使用這種方法,您只需在正則表達式部分[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 

) 
相關問題