我试图在FOR循环中使用REG QUERY返回程序的安装位置。我的命令如下:
FOR /F "TOKENS=2 DELIMS=REG_SZ" %%a IN ('REG QUERY "HKLM\SOFTWARE\Wow6432Node\TeamSpeak 3 Client" /V "" 2^>NUL') DO SET TSLOC=%%a
现在,REG QUERY自己回归:
(Default) REG_SZ C:\Program Files\TeamSpeak 3 Client
但是使用分隔符REG_SZ返回:
C:\Users\Jake\Desktop>FOR /F "TOKENS=2 DELIMS=REG_SZ" %a IN ('REG QUERY "HKLM\SOFTWARE\Wow6432Node\TeamSpeak 3 Client" /V "" 2>NUL') DO SET TSLOC=%a
C:\Users\Jake\Desktop>SET TSLOC=Y
C:\Users\Jake\Desktop>SET TSLOC= C:\Program Files (x86)\Team
所以显然我最终只能到达\团队。我不知道它从哪里获得“Y”或为什么delim导致它在\ Team分裂。如果我将令牌#更改为3,则返回:
peak 3 Client
所以不知何故,它必须将“s”解释为我的分隔符,对吗?
我的问题是为什么(或者如果没有,它在做什么?)我怎样才能让它给我整个事情。我做错了什么?
答案 0 :(得分:1)
DELIMS
是一组字符,而不是单个字符串。因此,R
,E
,G
,_
,S
或Z
中的任何字符都将充当分隔符。
答案 1 :(得分:1)
如果REG QUERY返回下面的字符串(包含空格):
(Default) REG_SZ C:\Program Files\TeamSpeak 3 Client
...然后你希望在第二个之后用空格分隔的标记(即默认的标记分隔符),即:
FOR /F "TOKENS=2*" %%a IN ('REG QUERY "HKLM\SOFTWARE\Wow6432Node\TeamSpeak 3 Client" /V "" 2^>NUL') DO SET TSLOC=%%b
答案 2 :(得分:1)
SET "tsloc= (Default) REG_SZ C:\Program Files\TeamSpeak 3 Client"
SET "tsloc=%tsloc:*REG_SZ =%"
ECHO +%tsloc%+
由于REG QUERY自行返回:
(Default) REG_SZ C:\Program Files\TeamSpeak 3 Client
上述SET
命令将删除不需要的数据。结果显示在+
之间,以证明没有空格。
公式:set var =%somevar:* string1 = string2%
会将var
的值分配给somevar
,所有字符最多string1
替换为string2
。 set
命令中的封闭引号可确保该行上的任何杂散尾随空格不包含在分配的值中。