
バッチファイルのfor文を使ってファイルサイズをMbyteで表したい。(WindowsXP)
for文を使って、フォルダー内のファイル名とサイズ一覧を作ろうとしています。
1)for %%i in (c:\test\*.*) do echo %%i %%~zi>> c:\test\testfiles.txt
で一応はできたのですが、これではファイルサイズがわかりにくいので、メガバイト単位にしたいのです。(だいたいわかればいいので1024で割るとかはしない)
2)for %%i in (c:\test\*.*) do echo %%i %%~zi/1000000>> c:\test\testfiles.txt
3)for %%i in (c:\test\*.*) do set /a x=%%~zi/1000000 & echo %%i %%x>> c:\test\testfiles.txt
としてもうまくいきません。
%%~ziが数値でなく文字列のため、だと思うのですが、3)は%の付け方とかも間違ってそう。
どう書けばメガバイト単位で一覧を出せるでしょうか?
あれ?
4)for %%i in (c:\test\* ) do if %%~zi GEQ 1000000 echo %%i>> c:\test\testfiles.txt
とすれば1メガ以上のファイル名一覧が出ますね。 ということは%%~ziは数値なのか。
どなたか、どこが間違っているのか教えていただけないでしょうか
No.3ベストアンサー
- 回答日時:
for文では処理が難しいなら、関数呼び出しに切り替えれば良いのです。
次の例(sample.bat)では、ShowFileSize関数に、第一引数がファイル名、第二引数がファイルサイズを与えます。この関数内であれば、好きなだけ加工ができます。
この例では、バイトサイズ(BSIZE) -> KB -> MBと二段階に加工しています。
ただし、四則演算では、巨大数値(GB)になるとマイナスになります。
そこで、環境変数の最後の3文字を切り捨てることで、回避しています。(KSIZEの計算例)
ファイル・サイズに制限があれば、1024や1000等で割ることも可能です。(MSIZEの計算例)
後は、echo行で、c:\test\testfiles.txtにリダイレクトさせれば、問題解決です。
------ sample.bat -------------------------
@echo off
set ARG1=%1
for %%i in (%ARG1%) do call :ShowFileSize %%i %%~zi
goto :EOF
:ShowFileSize
set NAME=%1
set BSIZE=%2
set /A KSIZE=%BSIZE:~,-3%
set /A MSIZE=%KSIZE%/1000
echo %NAME% %BSIZE%B, %KSIZE%KB, %MSIZE%MB
exit /b
---------- 実行例 ---------------
C:\>sample Y:\vmware\*.zip
win2k3sp2.zip 4101185818B, 4101185KB, 4101MB
目から鱗ですっ!
全くの初心者なもので
Callの使い方のとても良い勉強になりました。
もう一つ
数値と考えて、割り算することばかりを考えていました。 自分にとってはコロンブスの卵です。
そうか、右から3(or6)文字切り捨てればオッケーでしたね。応用に,を3桁ずつ入れるとか、いろいろやってみます。
ありがとうございました。
No.2
- 回答日時:
2つほど問題がありそうなので,バッチファイルを2つに分けました.
問題1:(私が)for内で環境変数の値を参照する記法がわからない
通常は%x%ですが,for内だと出力されませんでした.
問題2:setの遅延展開が関係しそう?
http://fdays.blogspot.com/2007/12/blog-post_06.h …
checksize.bat:
for %%i in (c:\test\*.*) do set /a x=%%~zi/1000000 & CALL checksizeSub.bat %%i
checksizeSub.bat:
echo %1 %x% >> c:\test\testfiles.txt
なお,小数点以下は扱ってくれないので,1000000バイト以下のファイルですと何でも0になってしまいます.
1000000バイト以上のファイルをディレクトリに入れて試してみてください.
以上,参考になれば幸いです.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
バッチファイルでディレクトリの使用容量を取得したい
ネットワーク
-
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
-
4
Dirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)
UNIX・Linux
-
5
DOS コマンドの~zfの意味を教えてください。
Windows Vista・XP
-
6
テキストファイルから最終行の抽出
Windows Me・NT・2000
-
7
ファイルサイズ判定バッチ
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
xcopyで特定のファイルのみをコ...
-
echoの出力の最後のスペースを...
-
複数のファイルの追加
-
コマンドプロンプトで相対パス...
-
【VBA】テキストファイルから特...
-
リダイレクト >> を複数のファ...
-
自動で表示されるメモ帳ありま...
-
コマンドにてテキストファイル...
-
nkfで全角ハイフンが半角になる...
-
ダウンロードするとメモ帳に表...
-
バッチファイル 現在のフォルダ...
-
NULLの置き換えについて
-
バッチファイルで改行の出力
-
ファイル名ソートにハイフン
-
ワードのテキストボックスの中...
-
echo "abc" >> test.txt で、先...
-
linuxのjoinコマンドがうまくい...
-
バッチファイルのfor文を使って...
-
【DOSコマンド】for の デリミ...
-
TXTファイルの 重複文字
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
echoの出力の最後のスペースを...
-
xcopyで特定のファイルのみをコ...
-
【VBA】テキストファイルから特...
-
echo "abc" >> test.txt で、先...
-
コマンドプロンプトで相対パス...
-
リダイレクト >> を複数のファ...
-
コマンドプロンプトで標準エラ...
-
バッチファイル 指定行の切り出し
-
バッチファイルのfor文を使って...
-
コマンド実行結果を環境変数に...
-
バッチファイル 現在のフォルダ...
-
NULLの置き換えについて
-
バッチファイルで改行の出力
-
.txtって、縦書きにはならない...
-
複数テキストファイル連結につ...
-
バッチコマンドの「set」で入力...
-
Diskpart のリダイレクトの質問...
-
DOSプロンプト:一番速く10万...
-
特定のファイルだけをサブディ...
-
nkfで全角ハイフンが半角になる...
おすすめ情報