我有这个密码:

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位”。我认为变量初始化被延迟了。有人知道解决办法吗?

最佳答案

如果运行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,这仍然无法正常工作,因为您根本没有处理任何正在传递的参数。

关于windows - 批处理文件中的变量初始化被延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13794581/

10-13 05:26