Cmd 批传递给For循环的这些REG查询命令之间的差异,尾随'\';s

Cmd 批传递给For循环的这些REG查询命令之间的差异,尾随'\';s,cmd,Cmd,出于某种原因,第一个For循环工作,而第二个For循环失败。Cmd表示它不希望在(%id%)之后出现尾随的“\” 所以我必须这样写 for /f "tokens=3" %%i in ('REG QUERY HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%n%\ /v InstallDir') do set dir=%%i for /f "tokens=3" %%i in ('REG QUERY HKLM\SOFTWARE\Mi

出于某种原因,第一个For循环工作,而第二个For循环失败。Cmd表示它不希望在(%id%)之后出现尾随的“\”

所以我必须这样写

for /f "tokens=3" %%i in ('REG QUERY HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%n%\ /v InstallDir') do set dir=%%i

for /f "tokens=3" %%i in ('REG QUERY HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%n%(%id%)\ /v InstallDir') do set dir=%%i
有人知道为什么在第一个for循环中尾随“\”是可接受的,而在第二个for循环中不是可接受的吗

CausingUnderflow SeveryWhere提出的完全有效的问题,可能对具有类似问题的其他人有用,但不幸的是,由于结论不正确而过早删除

(作为记录事项)

使用前面的插入符号()来转义(有问题的),以告诉batch,右括号是数据的一部分,而不是命令的一部分

(正如我所说,这只是为了纠正一个误解)

使用双引号将所有违规字符转义,如下所示:

for /f "tokens=3" %%i in ('REG QUERY HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%name%(%a%) /v InstallDir') do set dir=%%i
即使
%n%
%id%
包含空格字符,也应能正常工作

重要信息:双引号注册表项名称中没有尾随的
\
反斜杠

使用另一个包含空格、
()
括号、
|
垂直线(管道)、
重定向器的注册表项进行验证

for /f "tokens=3" %%i in ('
  REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%n%(%id%)" /v InstallDir
    ') do set "dir=%%i"
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Connection Manager
HKLM\SOFTWARE\Microsoft\Transaction Server\Setup(OCM)
HKLM\SYSTEM\CurrentControlSet\Control\Print\Forms\B5(ISO)
HKCR\Installer\Assembly\C:|程序文件(x86)| Microsoft帮助查看器| v2.1 | HlpViewer.exe
HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application\Intel(R)ME应用程序
HKLM\SOFTWARE\Microsoft\Fax\Outbound Routing\Groups\

@CausingUnderflowsEverywhere:“哦,在For循环中,您的命令不能包含括号,否则它将关闭For循环……我明白了。”呃,不。解决方案非常简单。您需要使用前面的插入符号(
^
)来转义有问题的
,以告诉batch,右括号是数据的一部分,而不是命令的一部分
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Connection Manager
HKLM\SOFTWARE\Microsoft\Transaction Server\Setup(OCM)
HKLM\SYSTEM\CurrentControlSet\Control\Print\Forms\B5 (ISO)
HKCR\Installer\Assemblies\C:|Program Files (x86)|Microsoft Help Viewer|v2.1|HlpViewer.exe
HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application\Intel(R) ME Application
HKLM\SOFTWARE\Microsoft\Fax\Outbound Routing\Groups\<All devices>