Windows批变量将不会设置

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解析命令时扩展变量,而不是在运行时扩展变量.事实上,有一个iffor语句的块( ... )(或实际上任何块)作为counds在这种情况下一个命令.因此,当您在块中设置变量尝试在同一块中使用它们时,不再有变量 - 它们被块甚至执行之前变量所具有的值替换.

坚持一个

setlocal enabledelayedexpansion
Run Code Online (Sandbox Code Playgroud)

在批处理文件的开头并使用!zip!而不是%zip%.有关help set该问题的详细讨论,请参阅.