我正在从注册表中获取一个值%%b
并将其分配%%b
给批处理文件的另一个区域,如下所示。
但结果却是%b
。
它不会第二次传递变量:
Set SN=reg query "HKLM\SOFTWARE\XXXXXX Systems\XXXXXaway" /v "SerialNumber"
显然不起作用。
这是我的代码:
@echo off
For /F "tokens=2* skip=2" %%a in ('reg query "HKLM\SOFTWARE\XXXXXX Systems\XXXXXaway" /v "SerialNumber"') do echo %%b
"c:\program files (x86)\carefusion\RSS Component Manager\Tools\atlas.DeviceRegistration.exe" environment=SQE serialnumber=%%b displayname=%computername% "devicetype=XXXXXX 2" "sapshipto=27703"
有什么想法吗?
答案1
不想重复,但是For
循环内部发生的事情在循环内部是有效的,除非你在循环内部定义它For
以供循环内部或外部使用。
但也可能发生在循环之前保存For
以供循环内使用的情况For
。
看看第二个选项在你的环境中应用效果如何:
@echo off
set "_Query=Reg Query "HKLM\SOFTWARE\XXXXXX Systems\XXXXXaway" /v "SerialNumber""
set "_Atlas="%Programfiles(x86)%\carefusion\RSS Component Manager\Tools\atlas.DeviceRegistration.exe""
set "_arg's=environment=SQE serialnumber=^%%~b displayname=%computername% "devicetype=XXXXXX 2" "sapshipto=27703""
for /f "tokens=2*" %%a in ('%_Query%') do %_Atlas% %_arg's%
笔记 在您的示例中,存在 Skip=2,我不知道它是否真的相关/必要,除非您的查询返回 3 行,而感兴趣的是第三行(也是最后一行)
进一步阅读:
答案2
%%b
仅在 FOR 循环内有效。
您应该echo %%b
用替换,然后在以下代码中set var=%%b
使用。%var%
您可以将其放在echo %var%
FOR 循环后面来验证其值。