バッチファイルの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で質問しましょう!
似たような質問が見つかりました
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- その他(学校・勉強) Japanese schools tests 1 2022/08/19 14:41
- 中学校受験 Japanese schools 1 2022/08/22 15:53
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- 英語 Mann-Whitney U test was used for statistical analy 2 2022/10/06 14:04
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- 中学校 Where did Judy and Emi see Judy’s friend in Americ 0 2023/01/29 21:55
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
バッチファイルでディレクトリの使用容量を取得したい
ネットワーク
-
フォルダのファイルサイズをMB表示させたい
その他(パソコン・スマホ・電化製品)
-
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
-
4
バッチファイル フォルダサイズの取得方法
その他(プログラミング・Web制作)
-
5
コマンドプロンプトでフォルダの容量を表示させるには
その他(ソフトウェア)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
echoの出力の最後のスペースを...
-
echo "abc" >> test.txt で、先...
-
【VBA】テキストファイルから特...
-
xcopyで特定のファイルのみをコ...
-
コマンドプロンプトで標準エラ...
-
コマンド実行結果を環境変数に...
-
NULLの置き換えについて
-
FTPのバッチファイルで日付を引...
-
複数のテキストファイルをひと...
-
コマンドにてテキストファイル...
-
sedの置換文字に変数を使用した...
-
bat処理の実行結果ログ出力方法...
-
コマンドプロンプトによるファ...
-
バッチファイルで改行の出力
-
ADSL回線が自動的に切断され、...
-
batファイルの結果をテキストに...
-
viエディタでの新規ファイル作...
-
linuxのjoinコマンドがうまくい...
-
バッチファイル 現在のフォルダ...
-
エクセルのセルに設定したハイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
xcopyで特定のファイルのみをコ...
-
コマンドにてテキストファイル...
-
echoの出力の最後のスペースを...
-
echo "abc" >> test.txt で、先...
-
バッチファイル 指定行の切り出し
-
バッチファイルで改行の出力
-
コマンドプロンプトで標準エラ...
-
コマンド実行結果を環境変数に...
-
【VBA】テキストファイルから特...
-
batファイルの結果をテキストに...
-
コマンドプロンプトで相対パス...
-
.txtって、縦書きにはならない...
-
bashで、gotoのようなラベルに...
-
コマンドプロンプトでFTPでエラー
-
NULLの置き換えについて
-
sedの置換文字に変数を使用した...
-
linuxのjoinコマンドがうまくい...
-
FTPのバッチファイルで日付を引...
-
bat処理の実行結果ログ出力方法...
-
バッチファイルのfor文を使って...
おすすめ情報