Windowのバッチスクリプトのバグに遭遇したと思います。
展開されたifステートメントにある変数を設定できません。
これが私のスクリプトの一部です:
_@echo off
set success=1
set Version=12345
set Target=Client
set Type=456
set dir=
set Zip=
if "%Version%"=="" set success=0
if "%Type%"=="" set success=0
if 1==1 set test=42
if %success%==1 (
set test2=57005
if "%Target%"=="Client" (
set dir=ModName v%Version%
set Zip=ModName v%Version% %Type%.Zip
echo Version: %Version%
echo Type: %Type%
echo.
echo Target: %Target%
echo dir: %dir%
echo Zip: %Zip%
echo.
echo test: %test%
echo test2: %test2%
)
) else (
echo Not successful.
)
_
これは、cmdの新しいインスタンスからの出力です。
_C:\Users\RandomClown\Desktop>test.bat
Version: 12345
Type: 456
Target: Client
dir:
Zip:
test: 42
test2:
_
あなたが気づくべきことは、単一行のifステートメントが正しくものを設定するということです。複数行のifは、セットではないものを実行します。私は何かを見逃したとは思わない。また、複数行のifステートメントは、else ( echo Not successful. )
行が実行されなかったため、正しい行を正しく実行しています。
行が実行されなかったのはなぜですか?
あなたは何かを見逃した;-)
cmd
は、コマンドが実行されるときではなく、コマンドが解析済みのときに変数を展開します。その場合、ブロック( ... )
(または実際には任意のブロック)を含むif
またはfor
ステートメントが単一のコマンドになります。したがって、ブロック内に変数を設定するとand同じブロックで変数を使用してみてください。変数はもうありません。変数が持っていた値に置き換えられましたbefore 。
スティック
setlocal enabledelayedexpansion
バッチファイルの先頭で、!Zip!
の代わりに%Zip%
を使用します。問題の詳細については、help set
を参照してください。