• ベストアンサー

特定ファイルをのぞいてすべて削除するBATの作成

フォルダ内に存在するファイルを削除するBATを作りたいと思っています。条件定義は以下のような感じです。 1:消したくないファイルの拡張子だけ判明している(仮にTXT) 2:その他はすべて削除対処とする(いろいろなファイルが存在) 3:フォルダも存在していれば消す。(サブフォルダもある可能性がある) どう書いていいかでつまづいています。コマンド判定とか分岐処理をうまく使えば出来る気もするのですが・・。 よかったら教えてください<(_ _)>

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

  • ベストアンサー
回答No.3

No.2 です。 > 例えば新しいフォルダ(2)は消えないのですが、新しいフォルダは消えます。 すみません、こちらに関しては、ファイル名の半角/全角の問題ではなく、 ファイル名中にスペースが存在する場合の考慮もれによるもののようですね。 # "新しいフォルダ (2)" は ( の前にスペースが入っていると思われます。 No.2の回答の .bat ファイルで、 call :delempdir %%~fd echo delete file: %%~ff の2箇所を、 call :delempdir %%~sd echo delete file: %%~sf と変更 (いずれも %%~f を %%~s に変更) してみてください。 これにより削除対象となるファイル名が MS-DOS の8.3形式に置換されますので、 ファイル名にスペースが含まれていても正しく削除されるはずです。 > AB.TXTは消えないのですがABTXTは消える こちらについては、元のご要望が「拡張子が .txt 以外のファイルおよびフォルダを すべて削除する」という風に読めましたので、これで問題ない動作だと思うのですが。 もしこれで問題があるようでしたら、補足をいただければと思います。

riat12
質問者

補足

うまくいっています。ありがとうございました。

その他の回答 (2)

回答No.2

BATファイルだとちょっと大変ですね。 私の環境はXPなので、そのまま動くかどうかはわかりませんが、 試しに書いてみました。再帰呼び出しの形になっていてちょっと ややこしいので、REM文を参考に追いかけてみてください。 ※注意 一応手元で簡単な動作確認はしましたが、十分なデバッグ等は 行っていませんので、そのまま業務等で使用するのは危険です。 あくまで参考としてどうぞ。 ---- @echo off :finddir rem === サブディレクトリを探す for /d %%d in (*) do ( rem === サブディレクトリが存在する場合は、移動して更にその下を探す cd %%d call :finddir cd .. rem === 処理したディレクトリが空ならば削除 call :delempdir %%~fd ) rem === .txt 以外のファイルを削除する for %%f in (*) do ( if /i "%%~xf" neq ".txt" ( echo delete file: %%~ff del %%f ) ) exit /b rem === 指定されたディレクトリ(%1)が空ならば削除する :delempdir rem === ディレクトリ下にファイルが存在するならサブルーチンを抜ける for %%f in (%1\*) do exit /b rem === ディレクトリを削除 echo delete dir: %1 rmdir %1 exit /b ---- やはり、Windows系ならば、VBScript(WSH:Windows Scripting Host) 辺りを使う方が はるかに簡単ですね…。

riat12
質問者

補足

こんばんは。 とても参考になります。現在VISTAでテストしているのですが、不思議なことに2バイト文字(今のとろこ半角文字では問題ない感じなだけで全文字テストしてません)で消えるファイル(フォルダ)と消えないというパターンが出ています。例えば新しいフォルダ(2)は消えないのですが、新しいフォルダは消えます。AB.TXTは消えないのですがABTXTは消える、という具合です。 昔Win98時代にとあるワクチンソフトでスキャン出来るデータと出来ないものとがありました。その時はファイル名称に使われている文字コードが問題だったのですが・・・。 BATのせいという気もしないのですが・・・。 理由がはっきりしなくて困っています。

  • Donotrely
  • ベストアンサー率41% (537/1280)
回答No.1

batやcmdじゃ難しいと思います。 vbsかPowerShellならできると思いますが。 どうしてもというならインチキ臭いですが、 *.txtをどっかにコピーして退避しておき、 全部削除して戻すとかならできるかも。

riat12
質問者

補足

やはり難しいでしょうか?使える機材はOSのVISTAというプラットホームだけなので・・。

関連するQ&A

専門家に質問してみよう