GUI に慣れてるととっつきにくいコマンドライン。
しかし、世の中には CUI しかないアプリケーションもあります。
毎回コマンドプロンプトから入力するのは大変ですが、
バッチファイルを作っておくとダブルクリックで実行できて便利。
今回は rtmpdump のバッチファイルを例に解説します。
::rtmpdump.bat
set rtmpdump="..\rtmpdump.exe"
%rtmpdump%^
--rtmp "rtmp://"^
--tcUrl ""^
--app ""^
--playpath ""^
--swfVfy "http://"^
--pageUrl "http://"^
--flashVer ""^
--flv ""
pause
exit
最初の行から解説していきますね。
::rtmpdump.bat
rem rtmpdump.bat
最初はコメント行です。
正式には rem のあとにコメントを書きます。
: はラベルの表記なのですが
:: はコメントの簡略表記として使われてるようです。
set rtmpdump="..\rtmpdump.exe"
%rtmpdump%^
次は変数 rtmpdump に値として rtmpdump.exe のパスをセットしてます。
フルパスでもバッチファイルからの相対パスでもOKです。
変数をコマンドとして展開する場合、スペースで区切られるので
パス名にスペースを含むときはダブルクォートで囲みましょう。
次に %rtmpdump% のように変数名を % で囲むと値が展開されます。
さて、rtmpdump にはこのあとオプションをいくつか渡す必要があります。
すると一行がえらく長くなって見づらいし、修正もしにくいので複数行に分けます。
単純に改行するとコマンドとして途切れてしまうので
改行を ^ (キャレット)でキャンセルします。
--rtmp "rtmp://"^
--tcUrl ""^
--app ""^
--playpath ""^
--swfVfy "http://"^
--pageUrl "http://"^
--flashVer ""^
--flv ""
先ほどの ^ (キャレット)を使ってオプションをこんな感じで書けます。
一行に書くより遙かに見やすいですね。
ここでも引数にスペースを含まない限り、
ダブルクォートで囲む必要はありませんが念のため囲ってます。
rtmpdump のオプションについてはドキュメントを読んでください。
pause
exit
ここはある意味肝です。
普通にバッチファイルをダブルクリックすると
実行後にコマンドプロンプトが閉じてしまうので
エラーが起きたのか成功したのかすら分かりません。
そこで、 pause を入れることで勝手に閉じるのを防げます。
exit はなくてもいいのですが、ここで終了するので
このあとにコメントやメモを書いておけます。
オプションやヘルプなんかを貼っておくと便利ですね。
ここまで説明してなんですが、rtmpdump で検索して来たあなた。
RTMPExplorer を使った方が簡単ですよ。
@echo off
@echo off と書くと以後のコマンド入力が表示されなくなります。
出力だけ見たいときに書いておくとスッキリします。
rtmpdump のバッチでは変数展開をチェックしたいので書いてませんけど。
%rtmpdump%^
-オプション^
> output.txt 2>&1
出力を保存したいときはこんな感じでリダイレクトを使って、テキストファイルに書き出します。
リダイレクトの詳細は以下を参照してください。
コマンド リダイレクト演算子を使用する - microsoft
バッチパラメータ
バッチファイルは引数を使うことも出来ます。
%0 はバッチファイル名、%1 ~ %9 は引数で置換されます。
ドラッグアンドドロップしたファイル名は %1 になります。
@echo off
echo %1
pause
上のコードを C:\test.bat と保存してコマンドプロンプトから使う例です。
組み込みの環境変数 %date% を引数として渡してます。
C:\test.bat %date%
また、 %~(修飾子)(引数番号) とすると、ファイル名の一部を取り出したりできます。
@echo off
echo ファイル名
echo %~0
echo フルパス名
echo %~f0
echo ドライブ名
echo %~d0
echo パス名のみ
echo %~p0
echo ファイル名のみ
echo %~n0
echo 拡張子のみ
echo %~x0
echo ショートネーム
echo %~s0
echo ファイル属性
echo %~a0
echo ファイル日付
echo %~t0
echo ファイルサイズ
echo %~z0
echo.
echo ドライブ名 + パス名
echo %~dp0
echo ファイル名 + 拡張子
echo %~nx0
echo.
pause
日付・時間を使う
ファイル名などに日付・時間を入れたいこともありますね。
そんなときは、組み込みの環境変数 date、time を使います。
::datetime.bat
@echo off
echo 今日の日付
echo %date%
:: 2012/01/01
echo 現在時刻
echo %time%
:: 12:00:00.00
pause
ここで問題なのは / (スラッシュ)、 : (コロン) はファイル名に使えないことです。
要らないものは置換してしまいましょう。
書式は %変数名:置換対象文字列=置換後文字列% となります。
echo %date:/=%
:: 20120101
echo %time::=%
:: 120000.00
echo %date:/=%_%time::=%
:: 20120101_120000.00
このままで用が足りる場合もあるでしょうが、
細かく整形したい場合は抽出しちゃいましょう。
書式は %変数名:~m,n% (m,nは数字)となります。
m 文字目から n 文字を抽出します。
1番目の文字を 0 として数えることに注意。
m がマイナスの場合は、後ろから数えます。
set dt=%date%
set yyyy=%dt:~-10,4%
set mm=%dt:~-5,2%
set dd=%dt:~-2,2%
set date2=%yyyy%-%mm%-%dd%
echo %date2%
:: 2012-01-01
set tm=%time: =0%
set hh=%tm:~0,2%
set mm=%tm:~3,2%
set ss=%tm:~6,2%
set time2=%hh%-%mm%-%ss%
echo %time2%
:: 12-00-00
echo %date2%_%time2%
:: 2012-01-01_12-00-00
これで好きなように整形できますね。
補足しておくと、Windows2000では日付が
日 2012/01/01
のように曜日が頭に付くので、後ろから数えてます。
また、時間が1桁の場合
1:00:00.00
のように頭にスペースが付くので 0 に置換します。
短く書きたい場合は
:: yyyy-mm-dd
echo %date:~-10,4%-%date:~-5,2%-%date:~-2,2%
:: Windows2000を考慮しない場合
echo %date:~0,4%-%date:~5,2%-%date:~8,2%
:: hh-mm-ss
set time2=%time: =0%
echo %time2:~0,2%-%time2:~3,2%-%time2:~6,2%
入門編としてはこれぐらい押さえておけばいいでしょう。
制御文やループを使いたいという方は参考サイトをどうぞ。
- 参考サイト -
コマンドライン リファレンス - microsoft
Windowsコマンドプロンプト基礎文法最速マスター - CX's Memo
バッチファイル基礎文法リファレンス - 学習ノート
連載:Windows 2000コマンドライン徹底活用 - @IT
バッチ・ファイル中で日付をファイル名に使用する - @IT