批处理文件中的变量初始化会延迟

时间:2012-12-10 03:24:04

标签: windows batch-file

我有这段代码:

if "%2"=="32" (
set bit=This is 32bit
)
if "%2"=="64" (
set bit=This is 64bit
)
echo %bit%
)

当我尝试使用sample.bat /s 64时,输出为“这是64位”,但当我尝试使用sample.bat /s 32时,输出仍是“这是64位”。然后我将它切换回sample.bat 64,输出变为“这是32位”。我认为变量初始化正在被延迟。有人知道解决方法吗?

1 个答案:

答案 0 :(得分:3)

如果您运行sample.bat 64,则64位于%1,而不是%2。传递给批处理文件的第一个参数始终为%1 - 批处理文件本身的名称位于%0中。你得到一些随机输出残余或另一次尝试留下的东西。试试这个:

setlocal
if "%1"=="32" (
set bit=This is 32bit
)
if "%1"=="64" (
set bit=This is 64bit
)
echo %bit%
)
endlocal

setlocal确保在批处理文件结束时丢弃任何环境更改,因此您不必担心会从测试中获取剩余物。

如果你只输入sample.bat,这仍然无法正常工作,因为你没有处理任何参数。