• ベストアンサー

指定以外のファイルやフォルダを削除したい。

デスクトップ上にあるファイル、フォルダの内、 指定したファイル、フォルダ以外を削除する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」を一括削除したい。

質問者が選んだベストアンサー

  • ベストアンサー
  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.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

moon879
質問者

お礼

非常にわかりやすかったです。ありがとうございます。

その他の回答 (3)

  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.3

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)
回答No.2

ANo.#1の補足。 ここのサイトは、投稿の各行頭のスペースやタブコードを自動的に削除するようになっていて、インデントが分かりにくくなるために、ANo.#1のバッチファイルの各行頭は、タブコードを全角スペース2つに置き換えていますので、コピー&ペーストする場合には、全角スペースを削除するか、半角スペースまたはタブコードに置き換えてください。

  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.1

指定したファイルを除外するというのは、少々面倒なので、ちょっと、下にびろ~~んと長くなりますが・・・。 注意:  バッチファイルのパラメータの指定の制限上、除外するファイル名やフォルダ名の指定は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"                   )                 )               )             )           )         )       )     )   ) )

moon879
質問者

お礼

ありがとうございます。参考にさせていただきます。

関連するQ&A

  • vbsでD&Dで同名ファイルの違う拡張子のファイルだけを削除したい。

    vbsでD&Dで同名ファイルの違う拡張子のファイルだけを削除したい。 出来れば複数のファイルD&D出来ると有り難いです。 demo1.txt demo2.txt この二つを作成したvbsにドロップして 指定したフォルダーの中から指定した拡張子例えばdoc wmv avi (指定フォルダーの中) demo1.doc demo2.wmv demo2.avi これらのファイルがあった場合削除すると言う物を作りたいのですがどんなふうに組んだら良いのでしょうか? 簡単に言えば ドロップするファイルは削除しないで指定しているフォルダーの中に有る同じ名前の違う拡張子のファイルを削除すると言うものを作りたいのです。 特にvbsで必ずと言う訳ではなくbatも可能なら平気なので何方かお力下さい。

  • dos コマンドを vbsで行うには。

    こんにちは。  --ip.bat の内容---- ipconfig >> C:\WINDOWS\デスクトップ\ip.txt ---------- ip.batのアイコンをクリックすると、テキストファイルが作成されますが、これと同じことをvbsでするにはどうゆう記述になりますでしょうか? もしくは、vbsでBATファイルを呼び出す方法は?

  • ファイルフォルダーを削除したい

    私のパソコンのデスクトップ画面に、ダウンロードのファイルフォルダーがあります。以前に私が何らかの方法で作成したのです。 でも最近、そのデスクトップ画面のファイルフォルダーを削除したいと思っています。もともとあるウィンドウ内のライブラリのダウンロードファイルフォルダーは、残しておきたいのです。 デスクトップ画面に作成したファイルフォルダーのみ削除する方法はありませんか?

  • 画像ファイルの一括削除

    画像ファイルの一括削除 こんばんわ。急ぎでお願いします。 私はDドライブにたくさんのフォルダがあり、そのフォルダの中にいろいろな種類のファイルが混ざっています。しかし、そのなかの画像ファイルだけを削除できるような便利なフリーソフトはありませんでしょうか。 たとえば、「OKWave」というフォルダのなかにJPGやPNG、TXT、THML、AVIなどなどの拡張子のファイルがあるとします。その中の「JPG」と「PNG」だけ削除するというようなフリーソフトが欲しいんです。フォルダのなかのフォルダ(指定フォルダ以下のすべてのフォルダ)のファイルも同様に削除出来るものがいいんですが・・・ わがままですみませんがどうぞよろしくお願いします。

  • ファイルの削除

    日付をファイル名とし、データ量で「-」と「数字」を付加した 2ページ目以降が作成され、日によって1~10ページ程度の htmlファイルが以下のように出来上がります。 ./hoge/20141106.html ./hoge/20141106-2.html ./hoge/20141106-3.html 以下の処理で「./hoge/20141106.html」は削除できましたが、 「-2」や「-3」以降も削除する記述をご教示お願いします。 unlink("hoge/$temp.html"); どうぞ宜しくお願いします。

    • ベストアンサー
    • Perl
  • MS-DOSでのファイル/フォルダ一括削除

    以下のようなフォルダ、ファイルがあるとし、LOGDIR下にある「200803」の文字列を 含まないファイル及びフォルダをDOSコマンド(Win2003)で削除(できれば一括で) する方法を模索しています。 Cドライブ   |   |   +LOGDIR      |      +---LOG20080228_084539    <--- 削除対象ディレクトリ      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      +---LOG20080229_101553    <--- 削除対象ディレクトリ      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      +---LOG20080301_132059    <--- 削除対象ディレクトリでない      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      +---LOG20080302_185945    <--- 削除対象ディレクトリでない      |     |      |     +-------log1.txt      |     |      |     +-------log2.txt      |      |-----test20080229_085523.txt    <--- 削除対象ファイル      |      |-----test20080229_092310.txt    <--- 削除対象ファイル      |      |-----test20080301_153859.txt    <--- 削除対象ファイルでない      | 方法をご存知の方、いらっしゃいませんか?

  • batファイルで親フォルダのコピー

    素人で大変申し訳ございません。 batファイルについて教えてください。 ・「batファイルがあるフォルダ」の一つ上の階層にある「hoge」フォルダを  「hoge_bak」にして、「batファイルがあるフォルダ」にコピーしたい ・相対パスで指定したい。 ・コマンドプロンプトではなく、「bat」ファイルで作成したい のですが、batファイルの書き方がわかりません。 ご存知の方、batファイルに書く「ソース」を教えて頂きたいので よろしくお願いします。 ※ネットで参考文献をいろいろ見たのですが、  私の知識が足りなさすぎて実現できませんでした。。。

  • フォルダ内のファイル名を一括変更したい

    windows10を使っています。 指定したフォルダ内のファイル名を一括変更したいです。 具体的には、以下のようにファイル名内の空白を「_」に置換したいです。 変更前:スクリーンショット 2021-01-01 104535.jpg ↓ 変更後:スクリーンショット_2021-01-01_104535.jpg バッチファイルで手軽に実行できるとうれしいです。 やりたいことの具体例: 空白置換.batを実行したら、空白置換.batが置いてあるフォルダ内のファイル名が一括変更できる。 空白置換.bat内で、変更対象とする拡張子を指定できる。 よろしくお願いいたします。

  • 全てのjpgファイルを一つ上の階層に移動したいです

    ネットワークカメラの設定で年月日時分秒を利用してjpgファイルが 以下の様にUPされます。 ./www/hoge/20160309/19/194512_1.jpg ./www/hoge/20160309/19/194512_2.jpg ./www/hoge/20160309/20/203317_1.jpg ./www/hoge/20160309/21/214055_1.jpg ./www/hoge/20160310/07/070503_1.jpg ./www/hoge/20160310/07/082235_1.jpg 時間だけを表している2桁数字のフォルダが邪魔なので、jpgファイル 全てを一括で一階層上の年月日8桁の数字フォルダ内に移動するには、 どのように記述すれば良いかご教示お願いします。 ネットワークカメラは24時間作動しているので、手動で移動するのは 面倒です。どうぞ宜しくお願いします。

  • フォルダ毎にファイルを仕分ける

    お世話になります。今1つのフォルダの中にtxtファイルとPDFファイルとgif、jpgファイルがたくさんあります。そのファイルをファイル名毎に新規フォルダを作成して、おのおのフォルダへ仕分けしたいのですが、自動でフォルダを作成し、ファイルを仕分けてくれるフリーソフトはありませんでしょうか? ○○.PDF、○○.txt、○○.gifを○○フォルダを新規作成し、中へ入れる、という具体なのですが、フリーソフトなどありましたら教えてください。よろしくお願いします。