Hop*_*00b 3 scripting windows-xp batch-file windows-command-prompt
我遇到了一个问题,我的经验(和 Google-fu)让我失望。
基本上,我需要将KB968730推送给几百个左右的客户。当然,希望在开始安装之前检查修补程序的安装。遗憾的是,我需要使用脚本和 GPO 来执行此操作,而不是像 SCCM 这样的适当系统。通常不会给我带来任何问题的东西,但是,似乎有一个问题。
问题是此修补程序安装的注册表项的路径中有一个血腥的空间。具体来说,它安装到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730.
毫不奇怪,标准的批处理文件/CMD 命令reg.exe query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\KB968730会引发语法错误并弄乱了我的批处理文件的安装检查部分 - 它将路径的第二部分视为第二个参数。所以,当然,我尝试用双引号封装路径,没有乐趣。单引号,没有乐趣。威胁我的操作系统和/或 Microsoft 也没有产生结果。
经过一些谷歌搜索和咒骂之后,我找到了似乎可以解决此问题的方法,但无法完全正常工作,出于某种原因我无法弄清楚。(毫无疑问,因为这些天我的编码技能很弱,而且字符串标记化在最好的时候让我陷入了循环。)
似乎我想使用的是这样的:
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 给我空间之前的路径,设置为 2 给我空间之后的路径,我不知道如何将一个值附加到另一个值。特别令人沮丧,因为我看到的所有答案都说“谢谢,它奏效了!!!” 或类似。*(需要注意的是,%直接在命令行上执行时删除一个。)
有谁知道我在这里搞砸了什么?
或者,如果有人仍然使用 VBS 并且知道如何使用它,我很乐意选择该选项。(不过,没有 PowerShell,因为我们的 XP 客户端没有安装它。)
PS,如果这更适合 StackOverflow,我对它的迁移没有任何问题,但我最初的想法是“我们”不喜欢开发人员来到这里并向 [向我们] 询问有关设置他们的开发的琐碎问题机器,所以我想他们可能会对我的问题有同样的感觉。
双引号似乎适用于包含空格的注册表路径。我刚刚在 Windows XP SP3 上进行了测试。以下返回预期的键/值:
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
Run Code Online (Sandbox Code Playgroud)
如果要使用令牌,则需要使用delims选项指定不使用空格/制表符作为分隔符。来自FOR /?:
Run Code Online (Sandbox Code Playgroud)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
)
Run Code Online (Sandbox Code Playgroud)
此外,您可能会发现该wmic实用程序很有帮助。它随 XP 一起提供并使用 WMI 来完成它的工作。您可以使用以下内容快速检查您的知识库:
wmic qfe list brief | FIND /I "KB968730"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8416 次 |
| 最近记录: |