トップページ > プログラム > 2016年10月12日 > k+jI1aQa

書き込み順位&時間帯一覧

8 位/239 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000122000005



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net

書き込みレス一覧

【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
637 :デフォルトの名無しさん[sage]:2016/10/12(水) 16:51:21.25 ID:k+jI1aQa
質問です。サブディレクトリのファイルで、0バイトのファイルだけを削除したいです。

以下のページにあるサンプルをベースに、dirに /s をつけてサブディレクトリも
対象とするようにしました。

バッチで自動的に作成したファイルを容量チェックして削除する方法ってありますか? (DOSプロンプト活用相談室LOG)
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/delerase/4-0062.html

実行してみると、0バイト以外のファイルも条件が成立してしまい、
動作してくれません。OSがwindows10のせいでしょうか。

FOR /F %%F IN ('dir /s /B') DO ( CALL :CheckFile %%F )
EXIT /B

:CheckFile
SET FileAttrib=%~a1
IF NOT %FileAttrib:~0,1%==d (
IF not "%~z1" == "0" (
ECHO "%1" はファイルサイズが %~z1 で、0 なので削除します。
REM DEL %1
)
)
EXIT /B

==をEQUに変えてみたり、ダブルクォートをつけたりしましたが変化なしでした。
どのように直せば、0バイトのみが引っかかるようにできるか、宜しくお願いします。
なお、上記コードは、安全のためdelはREMをつけたままです。
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
638 :デフォルトの名無しさん[sage]:2016/10/12(水) 17:01:12.97 ID:k+jI1aQa
すいません補足です。

>IF not "%~z1" == "0" (

これは、notがないのが正常な状態です。
なにをやっても条件が成立してしまうので、
ためしにnotをつけて、論理が反転するか試したところ、
これも全部条件が成立してしまいました。

その実験をしたときの残骸のnotが残ってしまいました。
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
642 :デフォルトの名無しさん[sage]:2016/10/12(水) 17:32:19.00 ID:k+jI1aQa
ありがとうございます。指摘の件を全て直しましたが、ダメでした。

FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )
EXIT /B

:CheckFile
SET FileAttrib=%~a1
IF %~z1==0 (
ECHO "%1" はファイルサイズが %~z1 で、0 なので削除します。
REM DEL %1
)
EXIT /B


実行結果

 IF 1695606 == 0 (
 "F:\TEST\file.txt" はファイルサイズが 1695606 で、0 なので 削除します。
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
650 :デフォルトの名無しさん[sage]:2016/10/12(水) 18:13:42.95 ID:k+jI1aQa
>>646
すみません、こちらの勘違いでした。教えていただいたコードで動きました。
echo off していないため、条件が成立しないコードが表示されてるのを見て、
あたかも実行されているかのように勘違いしてるだけでした。

この手のトラブルが嫌いなので対象のファイル名に空白は入っていませんでした。
完成形ですが、空白が含まれているファイル名も処理する場合は、以下で大丈夫でしょうか。

echo off
FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )
echo 処理終わり。
pause
EXIT /B

:CheckFile
SET FileAttrib=%~a1
IF "%~z1"=="0" (
ECHO "%1" はファイルサイズが %~z1 で、0 なので削除します。
DEL "%1"
) else (
ECHO "%1" はファイルサイズが %~z1 で、削除しません。
)
EXIT /B
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
651 :デフォルトの名無しさん[sage]:2016/10/12(水) 18:31:53.33 ID:k+jI1aQa
うーん・・・このバッチだと、0バイトかどうか調べる対象ディレクトリが1000個、総ファイルが10万個とか有ると、
最初のforから全然進んでくれないようです。
core-i5で10分待っても開始されず。ディスクの能力じゃ無く、BATのCPU消費率が上がります。

>>647さんの書き方で、大量ファイルの処理時の挙動は変化するか、これから試してみます。
大量処理に適した書き方などがあったらご教示ください。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。