
バッチファイルの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も見ています
-
DOS コマンドの~zfの意味を教えてください。
Windows Vista・XP
-
バッチファイルでディレクトリの使用容量を取得したい
ネットワーク
-
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
-
4
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
5
テキストファイルから最終行の抽出
Windows Me・NT・2000
-
6
Dirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)
UNIX・Linux
-
7
ファイルサイズ判定バッチ
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
echoの出力の最後のスペースを...
-
DOSプロンプト:一番速く10万...
-
echo "abc" >> test.txt で、先...
-
bashで、gotoのようなラベルに...
-
バッチファイル 現在のフォルダ...
-
バッチファイルで改行の出力
-
【VBA】テキストファイルから特...
-
複数テキストファイル連結につ...
-
テキスト形式に相応しい拡張子
-
コマンドプロンプトで標準エラ...
-
sedでの変更をファイルに反映さ...
-
文字数順にソートするには
-
ファイルを検索して削除する
-
ファイル名の一部を変更するバ...
-
複数のテキストファイルを行ご...
-
linuxのjoinコマンドがうまくい...
-
特定のファイルだけをサブディ...
-
バッチファイルのfor文の使い方...
-
コマンドプロンプトで相対パス...
-
NULLの置き換えについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
echoの出力の最後のスペースを...
-
xcopyで特定のファイルのみをコ...
-
【VBA】テキストファイルから特...
-
リダイレクト >> を複数のファ...
-
コマンドプロンプトで相対パス...
-
echo "abc" >> test.txt で、先...
-
コマンドにてテキストファイル...
-
FTPのバッチファイルで日付を引...
-
バッチファイルで改行の出力
-
NULLの置き換えについて
-
バッチファイル 現在のフォルダ...
-
バッチファイル 指定行の切り出し
-
bat処理の実行結果ログ出力方法...
-
コマンド実行結果を環境変数に...
-
bashで、gotoのようなラベルに...
-
複数テキストファイル連結につ...
-
コマンドプロンプトで標準エラ...
-
【DOSコマンド】for の デリミ...
-
バッチファイルのfor文の使い方...
-
.txtって、縦書きにはならない...
おすすめ情報