タグ

ブックマーク / www.odin.hyork.net (2)

  • Studio ODIN - blog風小ネタ集 > MS-DOSでコマンドの実行結果を変数に入れる

    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" は、 コマンド文の囲みに、"`"(バッククォーテーション)を 使用するオプションです。 このオプ

    syonx
    syonx 2017/02/23
  • Studio ODIN - blog風小ネタ集 > コマンドプロンプトの遅延環境変数

    コマンドプロンプトで FOR ループなどを使っているときに 「あれ? 変数の値が変わらない??」ということがあります。 例えば、バッチファイルに次のように書いてあるとします。 FOR /F %%i IN ('SET') DO ECHO %%i これは、コマンド SET の実行結果をずらっと表示します。 この結果の件数を取得するためにカウンタを付けたとします。 SET COUNT=0 FOR /F %%i IN ('SET') DO SET /A COUNT=%COUNT%+1 ECHO %COUNT% 上手く行きそうなのですが、結果は 1 が出力されます。 これは変数の“即時展開”というもので、 ループの中の %COUNT% が先に評価されてしまうので 結果的には次のような処理になってしまうためです。 SET COUNT=0 FOR /F %%i IN ('SET') DO SET /A

  • 1