variables初始化在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输出成为“This is 32bit”。 我认为variables初始化正在被延迟。 有人知道一个解决方法吗?

如果运行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 ,这仍然不能正常工作,因为你没有处理任何参数。