UNIX/Linuxでは、コマンドの実行結果は簡単に変数に入れることができますが DOSでは、ちょっと工夫が必要です。
といっても、慣れれば呪文みたいなものなのです。 呪文のカギは FOR コマンドです。 下のサンプルでは、「TIME /T」の結果を ローカル変数 NOWTIME に入れています。
C:\>FOR /F "usebackq" %t IN (`TIME /T`) DO SET NOWTIME=%t C:\>ECHO NOWTIME=%NOWTIME% NOWTIME=21:57
/F は、IN の結果やリストを1行ずつ処理するオプションです。 1行ごとに DO 以下のコマンドを繰り返すわけですが、 コマンドの実行結果が1行なので、1回だけ値がセットされます。
"usebackq" は、 コマンド文の囲みに、"`"(バッククォーテーション)を 使用するオプションです。 このオプションを付けない場合、下のように シングルクォーテーションで、 コマンドを囲みます。
C:\>FOR /F %t IN ('TIME /T') DO SET NOWTIME=%t
UNIX/Linux のように「コマンドの実行はバッククォーテーションだよね」って 人は、このオプションを付けてください。
バッチファイルに書くときは、下のように書きます。
@ECHO OFF FOR /F "usebackq" %%t IN (`HOSTNAME`) DO SET HNAME=%%t ECHO %HNAME%
FOR コマンド内の "%" は "%%" にしなくてはなりません。
HOSTNAME は、 ホスト名を出力するコマンドです。 WindowsXP以上で、インターネットプロトコル(TCP/IP)が インストールされていると使用できます。 (ホスト名が欲しいだけならば、環境変数 %COMPUTERNAME% もあります)