2012-12-10 27 views
1

我有这样的代码:变量初始化是在批处理文件延迟

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”。我认为变量初始化正在推迟。有人知道解决方法吗?

回答

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,仍然无法正常工作,因为您尚未处理任何参数。

+0

+1 - 很好的接收。我很尴尬地说,这个问题从我身上吹过,没有我接受。 – dbenham

+0

我试过你的代码,它工作..谢谢!但是,它应该在第二个参数中进行评估。当我添加“如果第一个参数是/ s,然后转到第二个参数并评估它,如果它是一个32或64位”,值似乎总是在32位。你可以在下面的答案中检查我的代码,因为我不能在评论部分发布它。 – user1621338

+0

似乎我不能在答案中发布它,除非它真的是答案,我只是把它放在这里。 NEW CODE: SETLOCAL 如果 “%1” == “/ I”(如果 “%2” == “32”( 组位=这是32位 ) 如果 “%2” ==” 64" ( 设置位=这是64位 ) 回声%位% ENDLOCAL ) 现在输出的是停留在‘这是32位的’关于我多少次进入64 – user1621338