- ベストアンサー
指定以外のファイルやフォルダを削除したい。
デスクトップ上にあるファイル、フォルダの内、 指定したファイル、フォルダ以外を削除するBATファイル、 もしくはVBSを作成したいのですが、 どのような記述をすれば良いのでしょうか? OSはWindows2000 server SP4です。 どなたかご教示よろしくお願いいたします。 例: デスクトップに以下の2つのファイルと1つのフォルダがあり、 これ以上デスクトップにファイルやフォルダを増やしたくないのですが、 「hoge2.txt」 「hoge.lnk」 「hoge」 誤って以下のファイルとフォルダを作成してしまいました。 「hoge1.txt」 「hoge.jpg」 「hoge2」 「hoge2.txt」と「hoge.lnk」「hoge」は常にデスクトップに残し、 「hoge1.txt」と「hoge.jpg」「hoge2」を一括削除したい。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
以下のようなバッチファイルで可能です。 デスクトップのファイルのうち、指定したファイル名(フォルダ名)に一致するもの以外をすべて削除します。バッチでの削除ですのでゴミ箱には残りませんのでご注意ください。 デスクトップに残すファイル・フォルダの指定をバッチの下から5行目の( )内に記述します。 当方このバッチのテスト中にデスクトップのファイルをかなり消してしまいました:-) 記述ミスにはくれぐれもご注意を。 :---------------------------------------------------- sample.bat echo off pushd %userprofile%\デスクトップ for %%f in ( * ) do call :sub "%%f" for /D %%f in ( * ) do call :sub "%%f" d popd exit /b :sub set flag=OFF for %%e in ( hoge2.txt hoge.lnk hoge ) do if %1=="%%e" set flag=ON if "%flag%"=="ON" goto :EOF if "%2"=="" del %1 if "%2"=="d" rd /S /Q %1 goto :EOF
その他の回答 (3)
- deadline
- ベストアンサー率63% (1239/1943)
ANo.#1の補足 Part 2。 ANo.#1では、ファイル名の指定を間違えた場合、削除したくないファイルが削除されてしまいますので、 @echo off echo. の後に、 if not "%~1"=="" if not exist %1 (echo ファイル名の指定が間違っています:%1) && goto :eof if not "%~2"=="" if not exist %2 (echo ファイル名の指定が間違っています:%2) && goto :eof if not "%~3"=="" if not exist %3 (echo ファイル名の指定が間違っています:%3) && goto :eof if not "%~4"=="" if not exist %4 (echo ファイル名の指定が間違っています:%4) && goto :eof if not "%~5"=="" if not exist %5 (echo ファイル名の指定が間違っています:%5) && goto :eof if not "%~6"=="" if not exist %6 (echo ファイル名の指定が間違っています:%6) && goto :eof if not "%~7"=="" if not exist %7 (echo ファイル名の指定が間違っています:%7) && goto :eof if not "%~8"=="" if not exist %8 (echo ファイル名の指定が間違っています:%8) && goto :eof if not "%~9"=="" if not exist %9 (echo ファイル名の指定が間違っています:%9) && goto :eof を入れて、ファイルの実在を確認するようにした方が良いかもしれません。
- deadline
- ベストアンサー率63% (1239/1943)
ANo.#1の補足。 ここのサイトは、投稿の各行頭のスペースやタブコードを自動的に削除するようになっていて、インデントが分かりにくくなるために、ANo.#1のバッチファイルの各行頭は、タブコードを全角スペース2つに置き換えていますので、コピー&ペーストする場合には、全角スペースを削除するか、半角スペースまたはタブコードに置き換えてください。
- deadline
- ベストアンサー率63% (1239/1943)
指定したファイルを除外するというのは、少々面倒なので、ちょっと、下にびろ~~んと長くなりますが・・・。 注意: バッチファイルのパラメータの指定の制限上、除外するファイル名やフォルダ名の指定は9つまでです。 解説: 半角スペースを含むファイル名やフォルダ名を指定する場合には、ファイル名やフォルダ名を二重引用符(")で括る必要があり、パラメータ 「%1」、「%2」、・・・、「%9」には二重引用符がついた状態のファイル名やフォルダ名が入っていますが、「for %%f in (*.*)」で「%%f」に入るファイル名やフォルダ名には二重引用符がつかず、if文を「if /i "%%f"=="%1"」のように「%1」、「%2」、・・・、「%9」で指定すると、二重引用符が2つ重なってうまく比較できなくなってしまうので、「%~1」、「%~2」、・・・、「%~9」で二重引用符を取り除いたものを二重引用符で括っています。 @echo off echo. rem ファイルの削除 for %%f in (*.*) do ( if /i "%%f"=="%~1" ( echo %%f not delete. ) else ( if /i "%%f"=="%~2" ( echo %%f not delete. ) else ( if /i "%%f"=="%~3" ( echo %%f not delete. ) else ( if /i "%%f"=="%~4" ( echo %%f not delete. ) else ( if /i "%%f"=="%~5" ( echo %%f not delete. ) else ( if /i "%%f"=="%~6" ( echo %%f not delete. ) else ( if /i "%%f"=="%~7" ( echo %%f not delete. ) else ( if /i "%%f"=="%~8" ( echo %%f not delete. ) else ( if /i "%%f"=="%~9" ( echo %%f not delete. ) else ( erase "%%f" ) ) ) ) ) ) ) ) ) ) rem フォルダの削除 for /d %%d in (*.*) do ( if /i "%%d"=="%~1" ( echo %%d not delete. ) else ( if /i "%%d"=="%~2" ( echo %%d not delete. ) else ( if /i "%%d"=="%~3" ( echo %%d not delete. ) else ( if /i "%%d"=="%~4" ( echo %%d not delete. ) else ( if /i "%%d"=="%~5" ( echo %%d not delete. ) else ( if /i "%%d"=="%~6" ( echo %%d not delete. ) else ( if /i "%%d"=="%~7" ( echo %%d not delete. ) else ( if /i "%%d"=="%~8" ( echo %%d not delete. ) else ( if /i "%%d"=="%~9" ( echo %%d not delete. ) else ( rmdir /s /q "%%d" ) ) ) ) ) ) ) ) ) )
お礼
ありがとうございます。参考にさせていただきます。
お礼
非常にわかりやすかったです。ありがとうございます。