2017-03-22 7 views
0

今日は本当に奇妙な問題を認識しました。 trigadm.exeを使用して特定のWindows Message Queueでルールとトリガーを生成するバッチファイルを作成しています。Windows MessageQueueトリガーとルール:バッチファイルは最初の呼び出しでは機能しません

トリガーとルールの作成は問題ではありません。なぜなら、私はそれを数回テストして動作しているからです。 私がしたいのは、ルールとトリガーが既に存在するかどうかを最初に確認することです。彼らが存在しないなら、私はそれらを作成します。それらがすでに存在するときは、何もせずにバッチスクリプトを終了します。

trigadm.exeを使用してルールとトリガーを生成すると、常にルール用のGUIDとトリガー用のGUIDが取得されます。後で確認するために、これらのルールをテキストファイルに保存します。だから私は彼らが存在するかどうかを確認するとき、私はちょうどテキストファイルからこれらのGUIDを読んで、特定のGUIDを持つルールやトリガが存在する場合、trigadm.exeのメソッドを使用します。ルールまたはトリガーが存在する場合、次のようなメッセージが出力されます。IDのルールの詳細:b5ea975a-efd6-444a-9ae5-2a366e723980 ....ルールまたはトリガーが存在しない場合は、失敗:このルールは存在しません。だから私はこのメッセージをファイルに保存し、contetに「Details」という単語が含まれているかどうかを確認します。その単語が含まれている場合は、ルールやトリガーを作成しません。

したがって、主な問題は次のとおりです。 Windowsコマンドプロンプトからバッチファイルを呼び出そうとすると、最初の呼び出しでは機能しません。バッチファイルを約4回呼び出す必要があります。

誰でも問題が何であるか考えている人はいますか?

@ECHO OFF 
IF EXIST C:\temp\WarehouseOrder\Installation\ruleId.txt (

    SET /p rId=<C:\temp\WarehouseOrder\Installation\ruleId.txt 

    trigadm /request:GetRule /ID:%rId% > C:\temp\WarehouseOrder\Installation\msg.txt 

    SET /p msg=<C:\temp\WarehouseOrder\Installation\msg.txt 

    SET result=%msg:~0,7% 

    IF "%result%" == "Details" (
     ECHO rule already exists > result.txt 
    ) 
) 
+0

[遅延拡張](http://ss64.com/nt/delayedexpansion.html)をご覧ください。括弧で囲まれたコードブロック内の同じ変数を*と*設定しています... – aschipfl

+0

@aschipfl Thx、なぜこれが機能しないのか理解しています – Leon

答えて

0

遅延拡張を使用しない場合は、スクリプトを再構成するだけで済みます。

@ECHO OFF 
IF NOT EXIST C:\temp\WarehouseOrder\Installation\ruleId.txt GOTO :EOF 
SET /P "rId=<C:\temp\WarehouseOrder\Installation\ruleId.txt" 
(trigadm /request:GetRule /ID:%rId%)>C:\temp\WarehouseOrder\Installation\msg.txt 
SET /P "msg=<C:\temp\WarehouseOrder\Installation\msg.txt" 
IF /I "%msg:~,7%"=="Details" ECHO=rule already exists>result.txt 
+0

これも機能します。しかし、私は新しいC#ソリューションを作成し、そこからコンソールコマンドを使用して、C#経由でファイルの読み取りを処理することに決めました。とにかくありがとうございます – Leon

+0

ちょうどあなたが質問のパラメータの外の解決策に行くことを決めたので、同意した作業、投稿されたソリューションが正しいとマークされるべきではありません。 – Compo

+0

すみません、私はそれをするのを忘れました。今私は正しいとマークしています。 – Leon

関連する問題