• ベストアンサー

0バイトファイルの判断

Windowsのバッチ処理についての質問です。 バッチから0バイトファイルを判断し削除するというようなものを作りたいです。 例えば、 C:\TEMP内にある0バイトのファイルを全て削除 上記のようなものをif文等で判断させることは可能でしょうか? OS:WindowsXP 以上、よろしくお願いいたします。

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

追記 必ず「fcとfindがちゃんと動いている」のを確認してから実行すること。 本番の実行前に del %1 の行を echo %1 >> result.txt に変更しておき、最初にいきなりファイルを消させず、消すはずのファイル一覧をresult.txtに出力させておき、result.txtに希望通りの結果がリストされたか確認しておく事。 確認して消してはいけないモノが消される対象になってないか確認し、確認してから変更した行を del %1 に戻して、本番実行すること。 間違って消しちゃいけないファイルが消されても責任は取れないので、実行は自己責任で、バックアップを取ってから行なうこと。

kal1119
質問者

お礼

ご回答ありがとうございました。 参考になりました。

その他の回答 (3)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.4

forのヘルプ(for /?)を見ると以下の記述が見つかりました。 > %~zI - %I ファイルのサイズに展開します。 なのでこれを使ってファイルサイズを取得できると思います。 以下はサンプルコードです。 ---------------------------------------------------------- REM カレントディレクトリのファイル名とファイルサイズを表示 FOR %%I IN (*) DO ECHO %%I %%~zI REM カレントディレクトリの*.txtファイルの内、サイズ0のものを削除 FOR %%I IN (*.txt) DO IF %%~zI==0 DEL %%I

kal1119
質問者

お礼

ご回答ありがとうございました。 参考になりました。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

xp だという前提なら for %i in (*.*) do if %~zi EQU 0 echo %i で、ファイルサイズが0バイトのファイルを列挙できますので、 上の例で echo しているところをdelにするなり なんなりすればよろしいかと。 多分 cmd.exeが使えるならどのWindowsでもいけます。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

・0バイトのファイルを作る方法 echo "" | find "@@" > zero.tmp ・0バイトのファイルかどうか調べる方法 fc /b 対象ファイル zero.tmp | find "FC: 相違点は検出されませんでした" > NUL ・調べた結果を判断する方法 if errorlevel 1 goto skip 完成したバッチファイル @echo off echo "" | find "@@" > zero.tmp fc /b %1 zero.tmp | find "FC: 相違点は検出されませんでした" > NUL if errorlevel 1 goto skip del %1 :skip del zero.tmp 使い方 上記のバッチファイルをzerodel.batとして保存し、 C:\>cd \temp C:\TEMP>for %f in (*.*) do call zerodel.bat %f と実行。 *注意* 1.標準DOSコマンドのfc.exe、find.exeがインストールしてあること。 2.fc.exe、find.exeにパスが通してあること。 3.WindowsXPではfc.exeが「FC: 相違点は検出されませんでした」のメッセージを出すが、Windows98では「FC: 違いは見つかりませんでした.」のメッセージを出すのでOSの違いに注意すること。 4.バッチファイルを実行するカレントディレクトリは、書き込み可能、ファイル作成可能であること。

関連するQ&A