Tim*_*ner 6 windows cmd batch-file
我有一个批处理文件,使用这个习惯用法(很多次)将注册表值读入环境变量:
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName') DO SET MyVariable=%%B
Run Code Online (Sandbox Code Playgroud)
(后面有一个制表符delims=)
这在数千个客户的计算机上运行良好.但是在一个客户的计算机上(运行Windows Server 2003,启用了命令扩展),
它失败了,因为它'REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName'未被识别为内部或外部命令,可操作程序或批处理文件.reg query单独运行" "命令工作正常.Reg.exe存在于C:\Windows\System32.
通过将代码更改为,我能够解决问题
REG QUERY "HKLM\SOFTWARE\Path\To\Key" /v ValueName > temp.txt
FOR /F "tokens=2* delims= " %%A IN (temp.txt) DO SET MyVariable=%%B
Run Code Online (Sandbox Code Playgroud)
这让客户启动并运行,但我想了解问题发生的原因,以便将来可以避免.
稍微偏离主要主题 - 将注册表值(字符串或DWORD)添加到环境变量中的更直接方法也很有用.
该/F开关需要命令扩展才能打开。通常它们是默认打开的,但我会检查一下。在 XP 系统上,您可以打开它们执行类似的操作
cmd /e:on
Run Code Online (Sandbox Code Playgroud)
或检查注册表
HKCU\Software\Microsoft\Command Processor\EnableExtensions
Run Code Online (Sandbox Code Playgroud)
不知道Windows Server。
这样做help for也help cmd可以提供一些提示。