[前の記事]« 環境変数の文字列の一部(先頭から4文字)を参照するには
[次の記事]バッチからunlha32.dll等に直接パラメータを渡してファイル圧縮は可能? »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「FOR /F」索引へ
▲カテゴリー「SET, PATH, %環境変数%」索引へ

コマンド実行結果を環境変数にセットするには?


909) コマンド結果を環境変数にセットするには? あらあら 2002/11/19(火) 23:31


WINNT4.0にてバッチファイルを作成しています。
そこでコマンドの実行結果を環境変数にセットしたいのですが、
どのようにしたらよいかわかりません。
具体的には

①set aaaa=
にてバッチ内にて変数を作成
②attribコマンドの結果を①にて作成した変数aaaaにセットしたい

です。
もし、出来るようでしたら教えてください。
よろしくお願いします。


913) Re:コマンド結果を環境変数にセットするには? SYSOP 2002/11/20(水) 01:37


あらあらさん こんにちは。

 えっと、カタカナは全角を使用してください。
 (実際には書き込めてしまうけれど)掲示板の仕様上「半角カナは不可」となっており、発言検索画面上では化ける、などの実害があります。

>①set aaaa=
>にてバッチ内にて変数を作成
>②attribコマンドの結果を①にて作成した変数aaaaにセットしたい

 attribコマンドの、どういう結果をセットなさりたいのでしょうか。
 attrib ファイル名
 のような構文での実行結果でしょうか。(たぶんそうなのだろうとは思いますが)もう少し詳しくご質問ください。

SYSOP YanaKen

[個人homepage ]http://homepage3.nifty.com/yanaken/
[@pay窓口 ]http://pay.nifty.com/pay/servlet/pr?i=BDKQ048560
[@pay導入について]http://bbs1.nifty.com/mes/cf_wrent/FPCU_B017/



930) Re:コマンド結果を環境変数にセットするには? ひろ 2002/11/22(金) 15:41


あらあらさん こんにちは。
SYSOPさん こんにちは。

実は私も同様の質問を抱えているため、
同じく質問させていただきます。
(ちなみにこのような質問の仕方はマナー違反になるのでしょうか?
 なにぶん掲示板などに投稿するのが始めてなもので…
 失礼があったらごめんなさい。)

私の場合には、サービスのステータス確認(開始・停止)
をバッチファイル内で行い、その実行結果を変数に取得し、
変数の内容をIF文で判定しようと考えております。

処理の流れ
①SET aaaa=
②コマンドを実行してその結果をaaaaに格納
③IF文でaaaaの値を判定

②のコマンドとしては、特定のソフトウェアのコマンドのため、
ここでは記述できません。(申し訳ありません)
ということで、[attrib ファイル名]
を実行するということでご質問いたします。

なお、OSはWindows2000もしくはWindows2000 Serverになります。

どなたかご回答よろしくお願いいたします。


>あらあらさん こんにちは。

> えっと、カタカナは全角を使用してください。
> (実際には書き込めてしまうけれど)掲示板の仕様上「半角カナは不可」となっており、発言検索画面上では化ける、などの実害があります。

>>①set aaaa=
>>にてバッチ内にて変数を作成
>>②attribコマンドの結果を①にて作成した変数aaaaにセットしたい

> attribコマンドの、どういう結果をセットなさりたいのでしょうか。
> attrib ファイル名
> のような構文での実行結果でしょうか。(たぶんそうなのだろうとは思いますが)もう少し詳しくご質問ください。

>SYSOP YanaKen

>[個人homepage ]http://homepage3.nifty.com/yanaken/
>[@pay窓口 ]http://pay.nifty.com/pay/servlet/pr?i=BDKQ048560
>[@pay導入について]http://bbs1.nifty.com/mes/cf_wrent/FPCU_B017/



932) Re2:コマンド結果を環境変数にセットするには? SYSOP 2002/11/22(金) 19:34


ひろさん こんにちは。

>②のコマンドとしては、特定のソフトウェアのコマンドのため、
>ここでは記述できません。(申し訳ありません)
>ということで、[attrib ファイル名]
>を実行するということでご質問いたします。

 うーん。そのコマンドと「attrib ファイル名」の出力結果仕様は、どの程度似ているのでしょう。
 また、実際にattrib a.txt のようなコマンドを実行した場合、

A  H   E:\a.txt

 ……のような形式の結果が画面(標準出力)に1行返ります。一方、同じ「ファイル名」でも、attrib *.txtのようにワイルドカードを使った場合は、複数行にわたって結果が返ります。

 どちらを想定してお答えすればよいでしょうか。また、それらの結果から、具体的には「何を(どの部分を)」取得なさりたい場合を仮定したらよいでしょう。

 そのへんが不確かなようなら別途に新規発言されたほうがよいように思われますし、そのさい、「どういうタイプの出力をどういう規準で環境変数にとりこみたいのか」について、おおざっぱにはわかるような内容にしないと、コメントはしづらいと思います。
 さらに、できれば「最終的な目的」も(言える範囲で)はっきり説明がなされていれば、「それだったらattribじゃなくてdirを使えばもっと簡単にできるよ」とか、そういう別視点からの解法も含め、いろんなアドバイスが寄せられる確率は上がると思います。

 ちなみに、ものすごく一般的に「コマンドの結果を環境変数に格納する方法」という話でよければ、

・コマンドがerrorlevelを返す仕様で、そのerrorlevelの結果を環境変数にセットしたい場合なら、" if errorlevel.."を使えば簡単。
・文字出力結果等を参照したい場合は、何かしらの「文字列加工手段」が必要で、それが標準コマンドの範囲で可能かどうかはケースバイケース
・その他はさらに臨機応変/ケースバイケース。

 ……てな感じになると思います。

SYSOP YanaKen

[個人homepage ]http://homepage3.nifty.com/yanaken/
[@pay窓口 ]http://pay.nifty.com/pay/servlet/pr?i=BDKQ048560
[@pay導入について]http://bbs1.nifty.com/mes/cf_wrent/FPCU_B017/


938) Re3:コマンド結果を環境変数にセットするには? ひろ 2002/11/25(月) 10:20


SYSOPさん。こんにちは。
ご回答していただきましてありがとうございました。

ただし、大雑把な質問で誠に申し訳ありませんでした。

では、かなり具体的にご質問させていただきます。

今回の目的は、あるサービスの起動・停止確認をバッチファイルで行うことです。
使用するコマンドは「mictl」というあるソフトウェアのコマンドです。

mictlの構文は
mictl name=[サービス名] status
です。[サービス名]に該当するサービスのステータスを
実行結果として返却します。

mictlコマンドの実行結果は以下のようになります。
①サービス名:[SERVICE]が起動している場合
C:\>mictl name=[SERVICE] status
VERSION=V1.0
PORT=3000
DBDIR=C:\Temp\db\[SERVICE]
MEMSIZE=LARGE
SESSIONS=0
SECURE=NO
UNIQWORDS=57440
URLS=1057
DELETED=0
REQUESTS=0

②サービス名:[SERVICE]が停止している場合
C:\>mictl name=[SERVICE] status

C:\>

mictlの実行結果としては、
①サービスが起動している場合には、
複数行(固定形式)で返却されます。
②サービスが停止している場合には、
何も返ってきません。(おそらくNULLが返ってきています)

そこで、mictlコマンドの実行結果を変数に取得して、
IF文で処理分岐したいと考えております。
つまり、変数aaaに実行結果を格納した場合には、
変数の中身が'NULL'であるか
1行目が'VERSION=V1.0'であるかが判定できれば、
以降の処理分岐は可能であると考えております。
(他にも良い判定の仕方があればご教授ください)

ちなみにOSはWindows2000 もしくはWindows2000 Serverです。

つたない質問で申し訳ありませんが、
ご回答よろしくお願いいたします。

939) Re4:コマンド結果を環境変数にセットするには? SYSOP 2002/11/25(月) 12:53


ひろさん、こんにちは。

>①サービス名:[SERVICE]が起動している場合
>C:\>mictl name=[SERVICE] status
>VERSION=V1.0
(中略)
>②サービス名:[SERVICE]が停止している場合
>C:\>mictl name=[SERVICE] status

>C:\>

(1)起動に成功すれば常に一定の内容の文字列が出力される。
(2)失敗すれば何も返って来ない。
 というわけですね。いろいろな考えられそうですが、とりあえずFORコマンドの「ファイル解析」機能を使ったサンプルを書いてみました。

mictl name=[SERVICE] status >result.txt
for /F %%F IN (result.txt) do if "%%F"=="VERSION=V1.0" GOTO SUCCESS
set AAAA=NG
GOTO QUIT
:SUCCESS
set AAAA=OK
:QUIT
 詳細は FOR コマンドのオンラインヘルプを参照してください。

 もう1つ、出力結果(result.txt)のファイルサイズをキーにして分岐する手法も考えられます。(失敗なら0バイトである場合を想定してあります↓)

mictl name=[SERVICE] status >result.txt
for %%F IN (result.txt) do if %%~zF EQU 0 SET AAA=NG ELSE SET AAA=OK

 勉強しなければならないコマンドが1つ増えますが(^^;、このほうがキレイではありますね。詳細はIF コマンドのオンラインヘルプを参照してみてください。
 ただし、いずれも「そのMICTLというコマンドの結果表示は標準出力に送られている」(">"記号でファイルにリダイレクトできる)という前提でのサンプルです。
 うまくいかない場合はまた相談してみてくださいね。

YanaKen

[個人homepage  ]http://homepage3.nifty.com/yanaken/
[@pay窓口    ]http://pay.nifty.com/pay/servlet/pr?i=BDKQ048560
[@pay導入について]http://bbs1.nifty.com/mes/cf_wrent/FPCU_B017/




940) Re5:コマンド結果を環境変数にセットするには? ひろ 2002/11/25(月) 20:05


SYSOPさん。こんばんわ。

ご回答どうもありがとうございました。
いずれの方法でも、思うような処理を行うことが
出来ました。

ちなみに、オンラインヘルプというのは
どうやったら参照出来るのでしょうか?

度々申し訳ありませんが、ご教授下さい。

941) Re6:コマンド結果を環境変数にセット/オンラインヘルプについて SYSOP 2002/11/26(火) 04:51


ひろ さん

>ちなみに、オンラインヘルプというのは
>どうやったら参照出来るのでしょうか?

 うーむ、お仕事でバッチ処理に取り組んでらっしゃるということなら、参考書の1冊ぐらいは手元に置かれたほうがよろしいのでは……なんて正直思いますが、このさいなのでヘルプの見方についての解説ページを作っておきました。こちらを参照してください。
 ↓
 http://fpcu.on.coocan.jp/dosvcmd/online_help.htm

YanaKen

[個人homepage  ]http://homepage3.nifty.com/yanaken/
[@pay窓口    ]http://pay.nifty.com/pay/servlet/pr?i=BDKQ048560
[@pay導入について]http://bbs1.nifty.com/mes/cf_wrent/FPCU_B017/



942) Re7:コマンド結果を環境変数にセット/オンラインヘルプについて ひろ 2002/11/26(火) 10:05


SYSOPさん。こんにちわ。

数々の質問にご丁寧にご回答いただきまして
誠にありがとうございました。

実は、DOSコマンドがこんなに奥深い世界
であることを知らずに、仕事上で活用しようと
しておりました…。

もう少し勉強して出直してきます。

どうもありがとうございました。

でも、また質問があった場合には、
よろしくお願いします!
 
 


カテゴリー「FOR /F」索引へ
カテゴリー「SET, PATH, %環境変数%」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2002年11月19日 12:23に投稿されたエントリーのページです。

ひとつ前の投稿は「環境変数の文字列の一部(先頭から4文字)を参照するには」です。

次の投稿は「バッチからunlha32.dll等に直接パラメータを渡してファイル圧縮は可能?」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート