2011-10-28 11 views
1

問題は私のset tap=c:\ca\sf\1st 2nd...などがまったく動かないことです。 echoに何も表示されない場合、何らかの理由でsetが変数にパスを入れていません。 私はすべてifの権利を持っています、別の問題はありますか?バッチスクリプト:IFでのSETの問題

setlocal enabledelayedexpansion 

    if NEWYORK == %region% ( 
     set tap=C:\ny 
     CALL :process %1 %2 %tap% %cl% 
     GOTO :EOF 
    ) 
    if California == %region% ( 
     if '%3'=='sanfrancisco' ( 
      set cl=c:\ca\sf\cl 
      if '%2'=='1st' set tap=c:\ca\sf\1st 
      if '%2'=='2nd' set tap=c:\ca\sf\2nd 
      if '%2'=='3rd' set tap=c:\ca\sf\3rd 
      if '%2'=='4th' set tap=c:\ca\sf\4th 
      if '%2'=='5th' set tap=c:\ca\sf\5th 
      echo %tap%, echo %cl%, 
      pause 
      CALL :process %1 %2 %tap% %cl% 
      GOTO :EOF 
     ) 
     if '%3' == 'LosAngeles' ( 
      set tap=c:\ca\la 
      set cl=c:\ca\la\cl 
      echo %tap%, %cl% 
      pause 
      CALL :process %1 %2 %tap% %cl% 
      GOTO :EOF 
     ) 
     set tap=c:\USA 
     set cl=c:\usa\cl 
     echo %tap%, %cl% 
     pause 
     CALL :process %1 %2 %tap% %cl% 
     GOTO :EOF) else ( 
     echo faiiiiiiiiiillllllllll 
     pause 
     GOTO :END) 
    endlocal 
    GOTO :EOF 
+0

有効にしないでスクリプトを実行するとどうなりますか?あなたの ":プロセス"は何ですか? – weberik

+0

セット*と*エコーが機能しない場合、ほとんどの場合、ブランチ全体は実行されません。 – GolezTrol

+0

他のすべてが動作していますが、 "set = tap = c:\ ca \ sf \ 1st 2nd 3rd etc ... が有効になっていないと、私のプロセスは別のコードになります。コードのこの部分を入れないでください。 – Spaceballs

答えて

2

最初のSETコマンドがありませんでした。あなたが!のVARを拡張しなければならない場合の内部やその値が変更された変数を使用する場合はライン

tap=C:\ny 

set tap=C:\ny 

でなければなりません! %var%ではなく、それ以外の場合、展開された値は変数にIFまたはFORを入力する前の値です(これはEnableDelayedExpansionの目的です)。例えば:

set var=Old value 
if 1 == 1 (
    set var=New value 
    echo With percent: %var%. With exclamation: !var! 
) 

前セグメント表示:With percent: Old value. With exclamation: New value

追加コメント:それが実行さif %region% == NEWYORK同じである

if NEWYORK == %region%が、第二つのプログラマーの観点から慣用かつ明確ですビュー。

EDIT

私は少しあなたのコードを変更しました。それを見てみましょう:

setlocal enabledelayedexpansion 

    if /I %region% == NEWYORK ( 
     set tap=C:\ny 
     REM cl IS NOT DEFINED HERE, BUT USED IN NEXT LINE 
     CALL :process %1 %2 !tap! !cl! 
     GOTO :EOF 
    ) 

    if /I %region% == California ( 
     if /I '%3' == 'sanfrancisco' ( 
      set cl=c:\ca\sf\cl 
      set tap=c:\ca\sf\%2 
      echo !tap!, !cl! 
      pause 
      CALL :process %1 %2 !tap! !cl! 
      GOTO :EOF 
     ) 
     if /I '%3' == 'LosAngeles' ( 
      set tap=c:\ca\la 
      set cl=c:\ca\la\cl 
      echo !tap!, !cl! 
      pause 
      CALL :process %1 %2 !tap! !cl! 
      GOTO :EOF 
     ) 
     set tap=c:\USA 
     set cl=c:\usa\cl 
     echo !tap!, !cl! 
     pause 
     CALL :process %1 %2 !tap! !cl! 
     GOTO :EOF 
    ) else ( 
     echo faiiiiiiiiiillllllllll 
     pause 
     GOTO :END 
    ) 
    endlocal 
    GOTO :EOF 
+0

yaは既に試してみましたが、問題は"%if "または"%if "で" set "となりました – Spaceballs

+0

@Spaceballs:私はあなたのコードを修正しました。 – Aacini