使用CLI(或.bat文件)path中的空格检测registry项?

我遇到了一个问题,我的经历(和Google-fu)让我失望了。

基本上,我需要推出KB968730几百客户左右。 当然,想在开始安装之前检查修补程序的安装。 可悲的是,我需要用脚本和GPO来完成,而不是像SCCM这样的系统。 通常不会给我任何问题,但似乎有一个问题。

问题在于此修补程序安装的registry项的path在其中具有血腥空间。 具体而言,它安装到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730

没有意外的是,标准batch file/ CMD命令reg.exe query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730抛出一个语法错误,弄乱我的batch file的安装检查部分 – 它看到第二作为第二个参数的path的一部分。 所以,当然,我试图用双引号封装path,没有喜悦。 单引号,没有喜悦。 威胁我的操作系统和/或微软也没有产生结果。

经过一些谷歌search和咒骂之​​后,我发现似乎是解决这个问题的办法,但却无法完成,因为某些原因,我无法弄清楚。 (毫无疑问,因为现在我的编码技巧很弱,string标记在最好的时候给我一个循环。)

好像我想用的是这样的:

for /f "Tokens=2,*" %%a in ('reg.exe "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path') do (set xpath=%%a)for /f "Tokens=2,*" %%a in ('reg.exe "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path') do (set xpath=%%a)然后使用%xpath% ,但是这不起作用。 令牌设置为1给了我之前的空间path,设置为2给了我的空间后的path,我不知道如何将一个值附加到另一个。 特别令人沮丧,因为我见过的所有答案都说:“谢谢,它工作! 或类似的。 *(注意直接在命令行上执行时删除一个% )。

任何人都知道我在这里搞乱了什么?

或者,如果有人仍然使用VBS,并知道如何做到这一点,我会很乐意跳过这个选项。 (没有PowerShell,但是,由于我们的XP客户端没有安装它。)

PS,如果这更适合StackOverflow,我没有任何问题,它被迁移,但我最初的想法是,“我们”不喜欢开发人员来到这里,并要求[关于设置他们的开发小问题机器,所以我想他们可能会对我的问题有同样的感觉。

双引号似乎对包含空格的registrypath正常工作。 我刚刚在Windows XP SP3上进行了testing。 以下返回预期的键/值:

 REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" 

如果你想使用令牌,你需要使用delims选项来指定使用空格/制表符作为分隔符。 从FOR /?

  delims=xxx - specifies a delimiter set. This replaces the default delimiter set of space and tab. 

简单的批量使用示例; 作为分隔符。

 FOR /F "usebackq delims=;" %%A IN (`REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730" /v Path`) DO ( SET XPATH=%%A ) 

另外,你可能会发现这个wmic工具wmic用。 它带有XP,并使用WMI来做它的事情。 您可以使用类似于以下内容的方式快速检查您的KB:

 wmic qfe list brief | FIND /I "KB968730"