Batch file delims选项卡不适用于批处理文件

Batch file delims选项卡不适用于批处理文件,batch-file,Batch File,以下查询 reg query HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{CB708F54-6934-4636-8E3C-D10AD3A8231F} /v InstallLocation 返回 InstallLocation REG_SZ c:\Program Files (x86)\abcd\xyz\ 我想提取c:\Program Files(x86)\x

以下查询

reg query HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{CB708F54-6934-4636-8E3C-D10AD3A8231F} /v InstallLocation
返回

InstallLocation    REG_SZ    c:\Program Files (x86)\abcd\xyz\
我想提取
c:\Program Files(x86)\xing\xyz\
我无法提取我正在使用下面的命令

for /f "tokens=3 delims=    " %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{CB708F54-6934-4636-8E3C-D10AD3A8231F} /v InstallLocation') do set ProductName=%%a
echo "%ProductName%"
我只得到了
c:\program

请告诉我出了什么问题

您在空白处拆分了字符串,只使用了第三个令牌,请尝试在第三个令牌之后选择“全部”:

for /f "tokens=3,* delims= " %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{CB708F54-6934-4636-8E3C-D10AD3A8231F} /v InstallLocation') do set ProductName="%%a%%b"

我无法重现您的行为,对于我(windows 7)
reg.exe
不输出制表符,而是将空格作为分隔符输出

处理这种情况的“正确”方法是使用任何空格/制表符作为分隔符(for/f中的默认行为),丢弃行中的第一个令牌(
InstallLocation
literal),检索第二个令牌(
REG_SZ
literal)和第三个令牌以及行中剩余的内容


@MC ND的回答会给你更多的信息(空格是标准的delim字符,所以你不必指定它),它在windows 7中工作,在windows上不工作,xpXP不再受支持;p不,对不起,我没有要测试的。
for /f "tokens=2,*" %%a in ('
    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{CB708F54-6934-4636-8E3C-D10AD3A8231F}" /v InstallLocation
') do set "ProductName=%%b"
echo "%ProductName%"