2017-03-09 5 views
1

私はすべてのフォルダを削除するための.batスクリプトを作成していますが、約5つのプリセットファイルを削除しています。私がやったことは、すべてのフォルダを処理する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

後藤FORコンテキストを破ります。 – npocmaka

+0

これは、パスが空白のシステムファイルではうまくいかないことを忘れないでください: "C:/ Program Files(86x)/ ..."のようなパスがある場合は、/ 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 
    ) 

) 

後藤は、コマンドの存在をテストしていません。連続したIFでバットでAND条件をエミュレートすることができます。もう1つの内部FORループでスキップしたいフォルダを反復することもできます。

+1

パス/ファイル名を 'if'で比較するために'/I'スイッチを使うことを強くお勧めします... – 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 

) 
関連する問題