2011-03-22 3 views
0

サーバービルドの基本機能を実行するbatファイルを作成しています。スクリプトはややインタラクティブに作られています。これにより、Production、Dev、またはQAのスクリプトを使用することができます。私がするように指示していたら、失敗したスクリプトの面積は:今回は予期せぬことでした

echo Enter User-defined Information about this Server: 
echo Environment: 
echo 1. PROD  
echo 2. QA 
echo 3. Dev 
echo Choose one: 
CHOICE /C 123 
if errorlevel 1 (set ENVIRONMENTNAME=PROD & set ENVNAME=Production) 
if errorlevel 2 (set ENVIRONMENTNAME=QA & set ENVNAME=Acceptance) 
if errorlevel 3 (set ENVIRONMENTNAME=Dev & set ENVNAME=Development) 

を下回っている「いずれかを選択します。」私は、オプションのいずれかを選択し、エラーを取得:
を:この時点では予想外でした。

+1

私のために失敗しません。私はスクリプトの最初の行に「エコー・オフ」があると予想しているので、これはスクリプトのサブセットに過ぎないと思います。 – JoDG

+0

そのスクリプトは私にとってはうまくいきます。エラーレベルの後には何がありますか? – Blorgbeard

+0

スクリプトの残りの部分は次のとおりです。 –

答えて

2

@echo offまたはecho offコマンドをスクリプトの先頭から削除(またはecho onを追加)し、結果の出力を使用して問題の原因となる行をデバッグします。

最適化のために、if errorlevelコマンドを降順で並べます。 if errorlevelコマンドは、ERRORLEVELが指定された番号以上、のときにトリガーします。

+0

'elseror 'を追加しない限り、' if errorlevel'の順序を逆にすると、このスクリプトが壊れます。 – Blorgbeard

+0

エラーが出ている行が見えますが、時にはうまく動作しないことがあります。 –

+0

@Blorgbeard、なぜそれは誤りでしょうか? –

0

私はこれがむしろ遅れた答えであることを認識していますが、私は問題を引き起こしていた「セット/ p」でしたが、ちょうど同じエラーメッセージを経験しました。

set /p Option=Do you want to go ahead and load the data? ([Y]/N): 

と私が見つけた解決策は、そう、プロンプトテキストの周囲に二重引用符を入れていた:行はもともと

set /p Option="Do you want to go ahead and load the data? ([Y]/N): " 

それが誰を助けたりしません場合は分からないのですが、それ私のために問題を解決しました:-)

+0

私もこの動作を見てきました。特に環境変数の変数について:cmdは、さまざまなアプリケーション(C:\ Program Files \ ...など)の例がたくさんありますが、スペースを含むパスは好きではありません。パスを二重引用符で囲むことは、通常は良い方法です。 – thoroc

関連する問題