Ran*_*own 47 if-statement batch-file set
我想我在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.
)
Run Code Online (Sandbox Code Playgroud)
这是一个全新的cmd实例的输出:
C:\Users\RandomClown\Desktop>test.bat
Version: 12345
Type: 456
Target: Client
dir:
zip:
test: 42
test2:
Run Code Online (Sandbox Code Playgroud)
您应该注意的是单行if语句正确设置了东西.多行if将执行任何非集合.我不认为我错过了什么.此外,多行if语句正确执行右行,因为else ( echo Not successful. )
行没有执行.
为什么线条没有执行?
Joe*_*oey 90
你错过了什么;-)
cmd
解析命令时扩展变量,而不是在运行时扩展变量.事实上,有一个if
或for
语句的块( ... )
(或实际上任何块)作为counds在这种情况下一个命令.因此,当您在块中设置变量并尝试在同一块中使用它们时,不再有变量 - 它们被块甚至执行之前变量所具有的值替换.
坚持一个
setlocal enabledelayedexpansion
Run Code Online (Sandbox Code Playgroud)
在批处理文件的开头并使用!zip!
而不是%zip%
.有关help set
该问题的详细讨论,请参阅.