2016-12-07 10 views
0

このようなバッチファイルを実行すると、IFループ内で失敗します。私はIFループ(および終了 ")"を削除する場合、期待どおりに動作します。 (tはあなたが入力したものに決して設定されません)。このバッチファイルINPUTがIF文内で動作しないのはなぜですか?

IF 1==1 (
set /p t=type in value 
echo You typed: %t% 
set t=%t% plus Suffix 
echo Your value + suffix: %t% 
) 
pause 
+1

が重複する可能性を考えてみましょう!var!

%var%を変更する必要があります15765884/windows-statement-in-window-batch-fileで変数を取得できない) – aschipfl

答えて

1

コマンド・プロセッサは、ブロック(括弧の間に何かを)見つけ、それを完全に解析し、ブロックが評価されたときに、彼らが持っている値に変数を展開すると、あなたはsetlocal enabledelayedexpansion

@echo off 
setlocal enabledelayedexpansion 

IF 1==1 (
set /p "t=type in value: " 
echo You typed: !t! 
set "t=!t! plus Suffix" 
echo Your value + suffix: !t! 
) 
pause 
endlocal 
exit/B 

を必要としています。ブロック内の変数の値を更新する場合は、変更を反映するために遅延拡張を有効にする必要があります。また、あなたは(http://stackoverflow.com/questions/ [Windowsのバッチ・ファイル内のif文で変数の値を取得することはできません]の次

@echo off 
setlocal enabledelayedexpansion 
set "var=Round 0" 
echo(---------------------------------------------- 
for /L %%i in (1,1,5) do (
    set "var=Round %%i" 
    echo(var is %var% [not using delayed expansion] 
    echo(var is !var! [using delayed expansion] 
    echo(---------------------------------------------- 
) 
echo(After block %var% !var! are the same 
pause 
exit/B 
関連する問題