ようこそゲストさん

Super Neurotic Junction

メッセージ欄

2011年12月の日記

2011/12/26(月) batファイルでメッセージを出す方法

2011/12/26 13:45 研究課題snjx
あー。

いまどきの人って、windowsのバッチファイルなんて使うのかしらなどという疑問は置いておいて。

以前に書いたWindowsってsleepコマンドないんだねーの応用編として、バッチファイルからメッセージボックスのポップアップを出す方法をかいておく。

まぁ、簡単な話で、以下のような感じ。
echo msgbox "メッセージよぉん",vbCritical,"タイトルよぉん" > %TEMP%/msgboxtest.vbs & %TEMP%/msgboxtest.vbs
この内容のバッチファイルを作って実行すると、以下のような感じの画面が出てくる。
msgboxtest.PNG

このワンライナーはいろいろ応用が利きそう。

1: 通りすがり 2013年03月06日(水) 午前10時22分

すっげぇΣ(・ω・ノ)ノ
batにたった1行でポップアップが組み込める!
ありがたく使わせていただきます!

2: 企業内システム管理者 2013年04月04日(木) 午後0時11分

まさに探していた例文でした。感謝!

3: snjx URL 2013年04月22日(月) 午後6時49分

あらまぁこんな古いコンテンツへようこそ。
お役に立てればこれ幸い。

…てことは、あれ?batファイルって結構使ってんのかな。

4: ポップマン 2013年07月08日(月) 午後2時58分

デモで「ポップアップが出たら○○する」という条件を作りたくてこちらに辿り着きました。以前までは、バッチ内で"msg"コマンドを使用していたのですが、こちらのほうが見栄えがいいので使わせていただきます(^o^)

5: snjx URL 2013年07月16日(火) 午前11時43分

今年に入ってどうしたことでしょうか。
バッチファイルはやってんの?まじ?

いや、みなさんそんな断りがないと使えないようなたいそうなテクニックではないので好き勝手にコピペしてください。
ま、小さいことでも問題解決の一助にでもなれば。

6: snjx URL 2013年07月16日(火) 午前11時56分

あ、そうだ
このバッチそのまま動かすと、%TEMP%にごみが残るので、そこだけお含み置きくださいな。

7: 西郷 2013年07月17日(水) 午後10時43分

参考にさせて頂きました。
助かりました。

ちなみに作成されたvbsファイルを即デリートさせるのって
ありだと思いますか?
それともそのままTEMPに残しておいた方がいいと思いますか?

8: snjx URL 2013年07月17日(水) 深夜1時46分

コストと内容によってどちらでもお好みで。

もともとバッチファイルなんてアドホックな用途ばっかりなんで、上記例題を書こうと思ったときは、後始末なんて考えていませんでした。
しかし、業務で使用される場合は、実行環境にゴミが残るのはよろしくないという場合もありましょう。その場合は、同じスクリプトの中で用済みのゴミは自分で削除するコードを入れておくのは「あり」だと思います。

9: 西郷 2013年07月18日(木) 午後8時38分

わかりやすい説明ありがとうございました。

10: bbs 2013年12月03日(火) 午後3時18分

バッチでこんなに簡単にメッセージボックス出せるとは思いませんでした!
ありがとうございます。使わせていただきます。

11: patchman 2013年12月12日(木) 午後2時45分

batで強制的に稼働中のプロセスをKillっているbatがあるのですが、何もメッセージなしで使っているので、メッセージが出ればなと思い、ここへ来ました。分かりやすい説明ありがとうございます。

12: mize 2014年10月15日(水) 午後3時26分

感動です。使わせていただきます。ありがとうございます。

13: よっちゃん 2015年01月14日(水) 深夜1時58分

すげー

14: dada 2015年03月05日(木) 午後4時20分

参考にさせて頂きます。ありがとうございました。

15: gakke 2015年05月31日(日) 午後2時41分

やっと見付けました。。。(^o^)

16: けんし 2015年07月25日(土) 午後2時53分

とても助かりますた

17: かな 2015年08月08日(土) 午前9時36分

ありがとうございます。使わせて頂きます(^○^)

18: hacker(仮) 2015年10月03日(土) 午後5時01分

ありがとうございます!
ってかbat流行ってんのかな?

19: ゆうた 2015年10月11日(日) 午後9時53分

たどり着きました...ありがたく使わせて頂きます。

20: ぷげら 2015年10月23日(金) 午後6時06分

メッセージの改行どうしたらいいでしょう
"はてな"&vbCr&"はてな"としましたがだめでした

21: ぷげら 2015年10月23日(金) 午後6時06分

メッセージの改行どうしたらいいでしょう
"はてな"&vbCr&"はてな"としましたがだめでした

22: ぷげら 2015年10月24日(土) 午前11時48分

&じゃなくて+でだきますた

23: snjx 2015年10月28日(水) 午後2時07分

ぷげらさん、すみませんめったに自分のとこ見に来ないので見逃していました。
自己解決なさったようで何よりでした。

24: ・w・ URL 2016年05月10日(火) 午前10時37分

@if(0)==(0) ECHO OFF
echo ■BATによる前処理です。■
cscript.exe //nologo //E:JScript "%~f0" %*
echo ■BATによる後処理です。■
@pause
GOTO :EOF
@end

WScript.echo("■WSHによる処理です。■");
=========================
このようにすれば、WSH/JScriptコード※VBSではありません。
をインクルード可能です。

引用元:BATとWSHのコードを1ファイルに混在させるためのshebang記法(複雑なバッチを1ファイルで実現)

メッセージボックスの命令文は
WScript.CreateObject("WScript.Shell").Popup("メッセージよぉん",0,"タイトルよぉん", 0 + 16)
です。詳しくはURL参照

25: snjx 2016年05月16日(月) 午前11時27分

おーなるほど、batファイルの中でcscriptを読んじゃうわけですね。
これは面白い。
http://computer-technology.hateblo.jp/entry/20131025/p1

ただ、ここまでくると素直にvbsかjsで作っちゃったほうがいいと思うけど…
レガシーのbatファイルがたくさんあってメンテしなきゃならない時には有効ですね。

26: 通りすがり 2016年07月29日(金) 午後0時01分

なるほど、ありがとうございました!

…だけでは何なので、ご参考まで

バッチファイルのエスケープはハットです.>20さん、見てるかな?
"はてな" ^& vbCrLf ^& "はてな"
でいけるハズ

それと、echo msgbox ... > ... の代わりに、
echo WScript.Quit(MsgBox(...)) > ... とやると、
%ERRORLEVEL%で分岐ができますね
ただし、7さんのような用途で、& %TEMP%... まで1行につなげてしまうと、
%ERRORLEVEL% は del の結果となってしまうので注意です
(ハマりました)

27: Uk45.ckw 2016年08月03日(水) 午前10時42分

お、おお(感激
友達に送るウイrいやいやメッセージのために使わせていただきますw

28: snjx 2016年08月10日(水) 午前11時11分

…なぜ、この記事だけこんなに伸びてるんだろう。

29: 通行人 2016年09月16日(金) 午後5時18分

ありがたやありがたや
使わせていただきます!

30: すげー 2016年09月26日(月) 午後3時07分

汎用性すげー
いただき!

31: ありがたい 2016年10月25日(火) 午後6時32分

いただきまーす
thx!

32: 純白に輝く流星るけぴす√ 2017年06月22日(木) 午後11時04分

moraimasu

33: tyhshi 2018年07月22日(日) 午後1時58分

AccessVBAだけはかろうじてわかります。自作アプリの第三者のセットアップにAccessを使うなんて変なのでwとりあえずバッチと格闘してますのでごちそうになりますw

34: ぱねぇ 2020年08月25日(火) 午前9時12分

天才現る

35: その 2020年09月08日(火) 午後4時25分

ありがとうもろこし

36: コアラ 2021年03月28日(日) 午前10時49分

なんか文字化けする。

37: ほい 2021年09月08日(水) 午前11時09分

すごいです。感謝

38: ゆっくり-games 2021年11月20日(土) 午後9時50分

UTF-8ではなくANSIで文字を保存すると文字化けしません(それ以外だと文字化けします)

39: 匿名くん 2024年02月28日(水) 午前10時37分

おもろい


名前:  非公開コメント   

E-Mail(任意/非公開):
URL(任意):
  • TB-URL  http://snjx.info/diary/snjx/049/tb/

2011/12/25(日) awstats_buildstaticpages.plが勝手にプレフィックスをつけくさる件について

2011/12/25 18:21 研究課題snjx
なんかねー以前もこの時期に、季節と関係ないネタで更新したよねーほほほ。

さて、自サイトのアクセス解析にawstatsを入れてみたんだけど、若干はまった部分があったのでメモしてみる。
なんでだろ、きっと俺一人じゃないのだろうにあんまり情報がなかった。awsatatsってあんまり使われてないんかな?

まず、現象。

Apacheアクセスログ解析(AWStats)
こちらを参考に、awstatsをインストールしてアクセス解析仕込んだのね。

インストールと設定はおおむねうまくいったのね。で、単発ではちゃんと動くようになったんだけど、どうもなんだか、index.htmlの統計ページから個別の「全リスト」へのリンクが間違ってるくさい。
手順に間違いはないようなのに、404が返ってくるのだ。

ディレクトリの中を見てみると、index.htmlでは「snjx.info.yyyymm.allhosts.html」とかでaタグ書かれているのが、実際のファイルでは「awstats.snjx.info.yyyymm.allhosts.html」なんてファイル名で作られていた。

ありゃー。

で、どうしたのか

これはつまり、統計ページを作るところでaタグが間違っているのか、月別の詳細ページを作るところでファイル名が間違っているのかどっちかだと見当をつけた上で、それぞれどこで作っているのか手順の再検討を始めたわけさ。
で、awstatsreport.shの中身をもにょもにょ読んでいると「awstats_buildstaticpages.pl」ってのが実際のファイル作成を担っている模様。ははぁawstatsを直接キックしているわけじゃないのね。

直接、awstats_buildstaticpages.plをたたいて、あれこれ実験してみてよくわかったけど、こいつが詳細ページのファイル名に勝手にawstatsとかつけるくさい。そのくせ、統計ページのaタグはホスト名から始まっているだけなのだ。悪さをしているのはこいつ。

で、けっきょく、awstats_buildstaticpages.pl を修正した。
446行目くらいを以下のように。

# Launch all other awstats output
for my $output (@OutputList) {
    my $command="$smallcommand -output=$output";
    print "Build $output page: $command\n";
    $retour=`$command  2>&1`;
#    $OutputFile=($OutputDir?$OutputDir:"")."awstats.$OutputSuffix.$output.$StaticExt"; # 勝手につける文言を削除
    $OutputFile=($OutputDir?$OutputDir:"")."$OutputSuffix.$output.$StaticExt";
    open("OUTPUT",">$OutputFile") || error("Couldn't open log file \"$OutputFile\" for writing : $!");
    print OUTPUT $retour;
    close("OUTPUT");
    $cpt++;
    push @pages, $OutputFile;    # Add page to @page for PDF build
}

続きを読む


名前:  非公開コメント   

E-Mail(任意/非公開):
URL(任意):
  • TB-URL  http://snjx.info/diary/snjx/048/tb/