2012-02-01 5 views
2

なぜこの.bat cmdは、私がヒットするつもりではないサブルーチンに常に当たったのですか?私はBATファイルに次き

@echo off 

Set /P _environment = Please Enter Environment [d] for Development or [a] for Acceptance: 

IF ((%_environment% EQU "a") OR (%_environment% EQU "d")) 
(goto sub_write_files) 
ELSE 
(goto end) 


:sub_write_files 
xcopy script_temp\* \\CHU-%_environment%101\CHU\scripts /D /E /C /R /I /K /Y /S 
:end 
echo %_environment% Done 

ロジックは、私にはよく形成されたようだが、sub_write_filesサブルーチンので、多分それは私がこのコマンドを起動するたびにではありません。私はその欠陥が条件付きロジックにあると仮定しています。

+1

+1あなたのダウンワードをさらにオフセットします。私はそれが最初に下落した理由を見ません。それは有効な質問です。 – Mechaflash

+0

@Mechaflashありがとう、私の考えも! –

答えて

2

バッチ構文をブラッシュアップする必要があります。コマンドプロンプトでHELP commandまたはcommand /?のいずれかを入力すると、ほぼすべてのコマンドについてヘルプが表示されます。たとえば、HELP IFはIFコマンドのヘルプを提供します。確かに、ドキュメントはしばしば不完全で混乱しますが、それは始まりです。

あなたの文法には多くの問題があります。最も明白なの一つは、IFであるような任意の演算子をサポートAND、OR、XORしないなど

あなたは潜在的な改善点がたくさんある以下の

@echo off 

Set /P _environment = Please Enter Environment [d] for Development or [a] for Acceptance: 

if "%_environment%" neq "a" if "%_environment%" neq "d" goto :end 
:sub_write_files 
echo xcopy script_temp\* \\CHU-%_environment%101\CHU\scripts /D /E /C /R /I /K /Y /S 
:end 
echo %_environment% Done 

であなたが探していたのロジックを実現することができます。たとえば、両方のIF文に/Iオプションを追加して、大文字と小文字が関係しないようにすることができます。または、ループバックして、無効な値が入力された場合に終了するのではなく、再試行したい場合があります。

+0

ありがとう、私は構文をブラッシュアップする必要があります。 –

+0

@some_bloody_fool - それは私が質問に投票したことではありませんでした。 – dbenham

1

主な問題は、コードの完全な間違った構文です。

IF-文は1つの条件しか受け入れません。ORまたはANDと組み合わせることはできません。
括弧で条件を取り消すことはできません。
開始ブロックは、同じ行で開始する必要があります。ELSE句の場合も同じです。
set ... varname=には、varnameと等号の間にスペースを入れて、varname<space>という名前の変数が作成されます。

しかし、あなたのコードの残りの部分は動作するはずです...

ロジックはおそらく、単純なIF /?はこれを修正するだろううまく私に

を形成しそうです。

関連する問題