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