コマンドプロンプト 実行結果の桁をそろえたい

このQ&Aのポイント
  • バッチの実行結果の件数を、5桁の右寄せでテキストファイルに出力したいが、数字が1桁の場合はスペースを追加する方法は?
  • コマンドプロンプトでバッチを実行し、結果の桁揃えを行いたい。具体的には、結果の件数を5桁で右寄せし、数字が1桁の場合はスペースを追加して表示したい。
  • コマンドプロンプトのバッチで、結果の桁揃えを行いたい。結果の件数を5桁で右寄せし、数字が1桁の場合はスペースを追加して表示したい。
回答を見る
  • ベストアンサー

コマンドプロンプト 実行結果の桁をそろえたい

バッチの実行結果の件数%count%を、5桁の右寄せ(結果が1桁のばあいは、スペース4桁を頭に入れてる)でテキストファイルresult.txt に出力したいのですが、下記のように書くと、 table1 : ("d\n",0) 件  と出力されてしまいます。 table1 :    0 件   と出力されるようにするにはどうしたらよいのでしょうか? for /f %%i in ('mysql -u root -p ^< "c:\bat\test.sql"') do set count=("%5d\n",%%i) echo table1 : %count% 件 >> "c:\bat\result.txt"

  • MySQL
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>何故かエラーになって じゃ、手抜きしないで念のためキャストしてみますか? select concat('result:',lpad(cast(count(*) as signed),5,' ')) as result from table1 union all select concat('result:',lpad(cast(count(*) as signed),5,' ')) from table2 union all select concat('result:',lpad(cast(count(*) as signed),5,' ')) from table3; それでもエラーになるようなら一度UNIONしないで落ちるかどうかみてみては? select concat('result:',lpad(cast(count(*) as signed),5,' ')) as result from table1;

tohiyu
質問者

お礼

成功しました。ありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>スペース4桁を頭に入れてる 前回のつづきですね select concat('result:',lpad(count(*),5,' ')) as result from table1 union all select concat('result:',lpad(count(*),5,' ')) from table2 union all select concat('result:',lpad(count(*),5,' ')) from table3; で、いかがですか?

tohiyu
質問者

補足

アドバイスしていただいた通りに実行したつもりですが、 何故かエラーになって何も出力されなくなってしまいます。 何かありましたら、おしえていただきたいです。

関連するQ&A

  • コマンドプロンプト 複数の実行結果を変数に

    複数のテーブルのデータ件数を取得して変数に入れ、result.txtに結果を出力したいのですが、下のように書くと、1つのテーブルのデータ件数しか出力されません。複数の結果を出力するにはどうしたらよいか教えてください。 for /f %%z in ('mysql -u root -p ^< "c:\bat\test.sql"') do set count=%%z echo result: %count% >> "c:\bat\result.txt" test.sqlの中身を、 select count(*) from table1; select count(*) from table2; select count(*) from table3; とすると何も出力されず、 select count(*) from table1; とすると、1つの結果だけ出力されます。

    • ベストアンサー
    • MySQL
  • コマンドプロンプトでのファイル操作について

    コマンドプロンプトでのファイル操作について、ご存知のかたどうか教えてください。 a.txt b.txtという2つのファイルがあるとします。 <a.txtの内容> 1111 2222 3333 <b.txtの内容> aaaa bbbb cccc 上記の2つのファイルを読み取りc.txtというファイルへ以下のように 出力したいのですが、コマンドプロンプト(batでも問題ありません) にてできるのでしょうか? <c.txtの内容> 1111,aaaa 2222,bbbb 3333,cccc ご教授のほど、宜しくお願いします。

  • コマンド実行結果のファイル出力

    systeminfo echo list volume | diskpart のコマンドを実行結果をテキストファイルに出力したいのですが、 echo list volume | diskpart > "c:\status.txt" systeminfo >> "c:\status.txt" としてバッチで実行しても、何も出力されていないません。 コマンドを画面で入力すると、画面に表示されます。 どうしたらよいか教えてください。

  • サービスDosコマンドでのログ出力について

    Windowsのサービスの起動batの結果(正常に完了したかどうか)Cドライブに出力したいと考えております。 どのようにbatファイルを書き換えれば正常にログを取得できるのか、どなたかご教示頂けますとありがたいです。 起動.bat -------------------------------------- net start "servicename1" net start "servicename2" 起動.bat > c:\起動結果.txt pause -------------------------------------- 吐き出されたhenkou結果.txt -------------------------------------- C:\>net start servicename1 -------------------------------------- DOS画面(出力したいもの) -------------------------------------- C:\>net start "servicename1" サービス1は正常に起動しました。 C:\>net start "servicename1" サービス1は正常に起動しました。 C:\>henkou.bat 1>c:\henkou結果.txt -------------------------------------- という内容にログを出力できたらと考えております。 お分かりの方がいらしたら、ご教示いただけたら幸いです。

  • VBAでコマンドプロンプトの結果を変数に代入

    コマンドラインソフトのffmpegを使って、動画の再生時間などを取得したいのですが VBAでコマンドプロンプトの結果を変数に代入する方法について教えてください。 "D:\xxxx\ffmpeg\bin\ffmpeg" -i "d:\xxxx\aaff.mp4" 2>&1 | grep Duration これをコマンドプロンプトで実行すると d:\xxxx\aaff.mp4の再生時間などがコマンドライン上に表示されます。 これを変数に代入するために、 http://officetanaka.net/excel/vba/tips/tips27.htm このページを参考にして Sub Sample1() Dim WSH, wExec, sCmd As String, Result As String Set WSH = CreateObject("WScript.Shell") ''(1) sCmd = """D:\xxxx\ffmpeg\bin\ffmpeg"" -i ""d:\xxxx\aaff.mp4"" 2>&1 | grep Duration" Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) ''(3) Do While wExec.Status = 0 ''(4) DoEvents Loop Result = wExec.StdOut.ReadAll ''(5) MsgBox Result Set wExec = Nothing Set WSH = Nothing End Sub を実行しました。 しかしResultには何の文字列も代入されませんでした。 恐らく、このページのタイトルにもあるように「MS-DOSコマンドの標準出力を取得する」 とあるので、標準出力しか取得できないのではないかと思います。 それでは一般的なコマンドラインソフトの実行結果を変数に代入するにはどうしたら良いでしょうか?

  • SqlServerのスクリプト実行について

    Windows2003ServerにてSqlServer2005をバッチファイルから実行する時について質問させてください。 下記の「sql.bat」にて「script.sql」を実行した場合、「log.txt」に出力される内容は'222'をアップデートした結果「(x行処理されました)」のみが出力されますが、'000'や'111'を更新した結果も出力させたい場合、「script.sql」を3分割し、「sql.bat」で3ファイル実行するしかないのでしょうか。 「sql.bat」 sqlcmd -S SERVERNAME -d SCHEMANAME -i c:\script.sql -o c:\log.txt 「script.sql」 update tablename set data1 = 'aaa' where data1 = '000' update tablename set data1 = 'bbb' where data1 = '111' update tablename set data1 = 'ccc' where data1 = '222'

  • bat処理の実行結果ログ出力方法について

    Windows2003Serverで、bat処理でネットワーク共有したHDDにバックアップデータを移動する処理を組込しているのですが、実行される場合、されない場合があるため、実行結果をログ出力したいと思っています。 MV D:TEST.TXT Z:\TEST.TXT >>D:\LOG.TXT として出力しますと、エラーであっても、正常であっても何も出力されませんでした。 コマンドプロンプト上で返される結果(ファイルが存在しない場合、「指定されたファイルが見つかりません」の表示をする等)をログ出力する方法はないでしょうか? ご教授下さい。

  • 計算結果を別セルに分割して入力したい

    教えてください。A1からA10に2桁の単価数字から4桁の単価数字が入力される表があり、B1からB10に利用回数を1桁数字から2桁数字を入力して掛けた結果をC1からC10に反映させた表があります。このC1の値をD1からI1のセルへ桁数ごと分けて、右よせで数字を反映させたいのですが可能でしょうか。 たとえば A1:180 掛ける B1:5  結果C1:900 このC1:900を G1:9 H1:0 I1:0 としたいのです。 よろしくおねがいします。

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

    こんにちは。 コマンドプロンプトにおける、コマンドライン引数の展開のされ方について、質問させて下さい。 具体的に言うと、二重引用符で囲まれたコマンドライン引数が、 どのようにして各コマンドに渡されるのかを詳しく知りたいと思っています。 まずコマンドプロンプトが、コマンドラインの特殊文字を展開し、 それらが各コマンドに渡される事は知っています。 特に、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と同じようにコマンドラインが解釈されているようです。 こういった事実は 「まずコマンドプロンプトが、コマンドラインの特殊文字を展開し、 それらが各コマンドに渡される」 というコマンドプロンプトの仕様と矛盾しているので、頭が混乱しています。 こういった問題について、何か御存じの方がいらっしゃれば、情報提供をお願い致します。 長くなりましたが、よろしくお願い致します。

  • 4桁の英字の3桁目を当てるプログラム

    乱数でとってくる4ケタの英字の3桁目を入力して当てるプログラムを 組もうとしているのですが、コンパイラしてもいまいちうまくいきません。 特に下に書いたプログラムのこの部分が違っていると思い どのように修正したらよいのか指摘していただきたいです。 human=getchar(); if(comp[2]!=human) { ero=1; } よろしくお願いします。 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> int sleep(unsigned long x) { clock_t c1=clock(),c2; do{ if((c2=clock())==(clock_t)-1) { return 0; } }while(1000.0*(c2-c1)/CLOCKS_PER_SEC<x); return 1; } int main(void) { int num,val,i,j; char comp[21]; char human; int ero=0; int try_count=0; int seikai=0; clock_t start,end; int num1; char eiji[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; srand(time(NULL)); puts("英字記憶トレーニング"); do{ printf("挑戦するレベル(3~20):"); scanf("%d",&num1); }while(num1<3 || num1>20); printf("%d個の英字を記録しましょう。\n",num1); start=clock(); do{ for(i=0;i<num1;i++) { comp[i]=eiji[rand()%strlen(eiji)]; } comp[num1]='\0'; printf("%s",comp); fflush(stdout); sleep(125*num1); printf("\r%*s\r3番目の英字を入力してください:",num1,""); human=getchar(); if(comp[2]!=human) { ero=1; } if(ero==0) { printf("正解です。\n"); seikai++; } else { printf("\a間違いです。\n"); } try_count++; }while(try_count<2); end=clock(); printf("%d回中%d回成功しました。\n",try_count,seikai); printf("%.1f秒でした。\n",(double)(end-start)/CLOCKS_PER_SEC); return 0; }