• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コマンドプロンプトの出力内容の加工の仕方について)

コマンドプロンプトの出力内容の加工方法と容量一覧表示

このQ&Aのポイント
  • コマンドプロンプトでフォルダとの容量一覧を表示する方法について調べています。duコマンドは日本語表示ができず、du.exeはバイト単位の表示しかできないため、他の方法を模索中です。
  • フォルダとの容量一覧を表示するためには、duコマンドやdu.exeを使用することが一般的ですが、表示方法に制約があります。テキスト処理ツールを使用し、数値の変換方法を試行錯誤しているが、良い方法が見つかっていません。
  • C言語などのプログラム言語を使用せずに、コマンドプロンプトの出力内容を加工する方法を模索中です。duコマンドやdu.exeは制約があるため、他のアプローチを検討したいと思っています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

切り分けにはforを使う 計算にはset /aを使う ただしset/aは小数点以下の計算が出来ないから、そこは自分で作る 具体的には @echo off for /f "usebackq tokens=1,*" %%i in ( `du -t e:\` ) do ( echo %%iB %%j call :b2k %%i "%%j" call :b2m %%i "%%j" echo. ) pause>NUL exit 0 :b2k set num=%~1 set /a K=1024 set /a int=%1 / %K% set /a dec1= (( %num% %% %K% ) * 10 ) / %K% set /a dec2=(((( %num% %% %K% ) * 10 ) %% %K% ) * 10 ) / %K% set KB=%int%.%dec1%%dec2% echo %KB%KB %~2 exit /b 0 :b2m set num=%~1 set /a M=1024*1024 set /a int=%1 / %M% set /a dec1= (( %num% %% %M% ) * 10 ) / %M% set /a dec2=(((( %num% %% %M% ) * 10 ) %% %M% ) * 10 ) / %M% set MB=%int%.%dec1%%dec2% echo %MB%MB %~2 exit /b 0 みたいな感じ。 ざっくり作ったんで小数点以下第二位までの表示、かつ第三位の四捨五入とかはしてないです。 適当にいじってみてください。

MetalLover
質問者

お礼

Chronos198さん 大変ご丁寧な説明をありがとうございます。 是非、参考にさせていただきます。

MetalLover
質問者

補足

かなりスキルがある方のようだったので、追加で質問をさせていただきたいと思います。 コマンドプロンプトのバッチファイルを実行した場合、 コマンド履歴が消えてしまい、↑ボタンでコマンドをさかのぼれなくなってしまうようです。 これを回避する方法はないのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • コマンドプロンプトで他のドライブに移動できない

    はじめまして、こんにちは。 OSはVistaを使っています。 コマンドプロンプトのcdコマンドによって、 EドライブにあるUSBリムーバブルディスクに移動しようとすると、 C:\Users\kei>cd e: E:\ C:\Users\kei>cd e:\ C:\Users\kei> のようになり、移動できません。 そこで、アクセス権を調べると C:\Users\kei>cacls e: e:\ Everyone:(OI)(CI)F のようになっており、フルコントロールが与えられていましたので、 アクセス権の問題でもないようです。 何かいい方法を知っておられる方がいらっしゃれば、是非アドバイスを頂きたいと思います。 では、よろしくお願い致します。

  • コマンドプロンプトについて

    WindowsXPのコマンドプロンプトを使おうとすると、 C:\Documents and Settings(以下略)のように表示されてしまいます。 「Documents and Settings~」の部分を消したいのですが、 どのようにすればよいのでしょうか?

  • コマンドプロンプトの基本

    よろしくお願いします。 目的はお気に入りにはフォルダーがあり、フォルダーも階層があります。ファイルベースで一覧表示したいのです。 コマンドプロンプトで下記を入力すれば、うまいことできるみたいですが、 C:\Users\ユーザ名\Favorites>dir /a-d /s ユーザ名の後に>があり、なかなかうまいこといきません。 https://gyazo.com/757e699f7977e19acaa95bf084037bc5 なんとかしてC:\Users\ユーザ名\Favorites>dir /a-d /sを入力する方法はないでしょうか。

  • コマンドプロンプトにおけるコマンドライン引数の展開

    こんにちは。 コマンドプロンプトにおける、コマンドライン引数の展開のされ方について、質問させて下さい。 具体的に言うと、二重引用符で囲まれたコマンドライン引数が、 どのようにして各コマンドに渡されるのかを詳しく知りたいと思っています。 まずコマンドプロンプトが、コマンドラインの特殊文字を展開し、 それらが各コマンドに渡される事は知っています。 特に、2つの二重引用符で囲まれた文字列に含まれる特殊文字は普通の文字として扱われる事、 二重引用符は「\」によってエスケープできる事は知っています。 これらを理解した上で、以下のような事を試しました。 まず、以下のような、1.cというCプログラムを作成し、ビルドしました。 ____________________ #include <stdio.h> int main(int argc,char *argv[]) { int i; for(i=1; i<=9; i++) if(argv[i]) printf("argv[%d]=「%s」\n", i, argv[i]); return 0; } ____________________ 次に以下のようなバッチスクリプトを作成しました。 ____________________ @echo off echo %%~1:「%~1」 echo %%~2:「%~2」 echo %%~3:「%~3」 ____________________ その後、以下のようにして同じコマンドライン引数を、これらのプログラムに渡すと、 以下のような結果になりました。 ____________________ C:\Users\kei >1.exe "\"ab c\"" de argv[1]=「"ab c"」 argv[2]=「de」 C:\Users\kei >1.bat "\"ab c\"" de %~1:「\"ab」 %~2:「c\""」 %~3:「de」 ____________________ なぜ両者の出力結果に、違いが出るのかが分からず困っています。 コマンドプロンプロの仕様だと、1.exeの出力は予想通りだったのですが、 1.batの出力では、コマンドライン引数がスペースで区切られていると、 それらを二重引用符で囲んでも、1つの引数としてみなしてくれませんでした。 これだけでは不十分だと思い、以下のように、 Windowsコマンドではない、ダウンロードしてきたlessと Windowsコマンドであるtypeで、同じ事を試しました。 ____________________ C:\Users\kei >less "\"ab c\"" fa ab c: No such file or directory fa: No such file or directory C:\Users\kei >type "\"ab c\"" fa 指定されたファイルが見つかりません。 処理中にエラーが発生しました: \ab パラメータが間違っています。 ____________________ この結果をみると、lessでは1.exeと同じようにコマンドラインが解釈され、 moreでは1.batと同じようにコマンドラインが解釈されているようです。 こういった事実は 「まずコマンドプロンプトが、コマンドラインの特殊文字を展開し、 それらが各コマンドに渡される」 というコマンドプロンプトの仕様と矛盾しているので、頭が混乱しています。 こういった問題について、何か御存じの方がいらっしゃれば、情報提供をお願い致します。 長くなりましたが、よろしくお願い致します。

  • duコマンド

    fedora4 homeディレクトリ以下の 各ユーザーディレクトリごとの使用量を MB単位で知りたいのですが、 どういうコマンドになるでしょう。 モノの本にはdu -h でいいと書いていますが、 サブフォルダの詳細まで出てきてしまいます。 各ユーザのディレクトリ合計使用量(MB単位) ディレクトリの場所(home/username) という単位で表示したいのですが、可能でしょうか。 よろしくお願いします

  • コマンドプロンプト

    コマンドプロンプトで robocopy a b /mir /xo robocopy c d /mir /xo robocopy e f /mir /xo というバッチファイルを作ったとして、共通部分の/mir /xoを毎回打たなくてもいい方法はあるのでしょうか。 理想としては aaa = /mir /xo robocopy a b aaa robocopy c d aaa robocopy e f aaa みたいにできると、助かります。

  • WinVISTA コマンドプロンプトで cdコマンドが?

    WindowsVISTA コマンドプロンプト画面で最初カレントディレクトリがC:\USER\xxxxxxx\xxxxxxのように表示され、cd:\CとするとC:\>と変更出来ますが、cd D:\とかcd E:\ 、cd D:\DATAといったコマンドに応じず、相変わらず C:\> のままです。どなたか変更方法をご存じの方居られましたらお教え下さい。

  • コマンドプロンプトへの文字のコピーの仕方

    例えばフォルダのアドレス欄からコマンドプロンプトへC:\Documents and Settings\…などをコピーしたいのですがコピペだと^Vとなってしまいます。 何かいい方法ないでしょうか?ちなみにコマンドプロンプトからコピーしようとするとドラッグ操作も効かない状態です。コマンドプロンプトから文字を取得する方法も教えていただければと思います。 Win_XP SP3を使用しています。宜しくお願いいたします。

  • コマンドプロンプト

    コマンドプロンプトで下記の処理がしたいです。 複数のフォルダに同じファイル名(INDEX.txt)が存在しております。 フォルダA   INDEX.txt フォルダB   INDEX.txt ... フォルダZ   INDEX.txt INDEX.txtの中身以下の状態です。 (フォルダBならAの部分がB)  0001,フォルダA,  0002,フォルダA,  ...  0100,フォルダA, これに対して一括の処理で下記のように1行目に「0000」を書き加えたいです。  0000  0001,フォルダA,  0002,フォルダA,  ...  0100,フォルダA, どなたか、詳しい方お教え頂ければと思います。 宜しくお願い致します。

  • Windowsのコマンドプロンプト教えて下さい

    デスクトップにTestフォルダがあり中には100.epsというファイルがあります。 100.epsのファイルをローカルディスクC:のProgram Filesの中にコピーするコマンドプロンプト教えて下さい。 何度試してもコマンドの構文が誤っています。が表示されてしまいます。 新たな例文だと混乱しますのでTestフォルダと100.epsでのコピーコマンド教えて下さい。 .cmdや.batで自動処理したいです。 宜しくお願いします。