批处理for语句读取注册表并赋值给变量,

具体就是用批处理从注册表读取我的桌面的路径,并将路径赋值到某个变量,这个变量要在下一个命令里用到,查询注册表的语句谁都知道,难就难在怎么用for语句或其它方法把查询到的结果提取出来,查询到的结果是HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
Desktop REG_EXPAND_SZ %USERPROFILE%\Desktop,我们只要路径,而最终要的结果是%USERPROFILE%\Desktop,主要是在PE和WinXp Win7 Win10系统下要用到,因为每个系统下的桌面路径都不一样,所以要用这个方法来查询,不要只跟我说思路,我已经在百度上搜了很多,自己也想了很久,麻烦把最终代码写出来并测试没问题,下面是我写的,不知道错在哪,@echo off
set "str=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
for /f "tokens=2*" %%a in ('reg query "%str%" /v Desktop 2^>nul') do set "a=%%b"
echo %a% ^|find "Desktop"
pause

感觉这代码还是不错的,该注册表查询项的结果是多行,刚好要取的是最后一行,也就是说 变量a应最终是取到了要的结果,即直接echo %a% 验证结果
如果取的不是最后一行则要把 ^|find "Desktop 加在do之前的括号里
('reg query "%str%" /v Desktop ^|find "Desktop"')追问

set "str=……因字数限制,同上……
for /f "tokens=*" %%a in ('reg query "%str%" /v Desktop ^|find "Desktop"') do (set "a=%%a"& echo a=%%a& echo b=%%b& echo c=%%c& echo d=%%d)
echo %a%

还不行,还是不知道怎么搞,感觉for语句太复杂了,批处理真操蛋

追答

原来的就行啊!你不是仅要那路径吗?怎么搞出%%a...%%d来了
再说 tokens=2* %%a 也只能定义%%a和%%b 两个 (for 命令确实是复杂,熟练了也就那回事)
原代码set "a=%%b" 表示取每行由空格分隔的2段之后的部分赋给a

追问

%%a %%b %%c %%d是为了调试,测试,echo %a%的结果是 Desktop REG_EXPAND_SZ %USERPROFILE%\Desktop,怎么在for语句里取出注册表查询结果的第二行并以空格分割,再得到最后的%USERPROFILE%\Desktop。

追答

怎么越说越差了?就刚开始提问的代码中的a就取对了
tokens=2* %%a 说的是取第2段以%%a表示 *代表之后所有段以%%b 表示,你要的是第3段,所以 set "a=%%b"就取对了,至于注册表查询出了多行,因取的是最后一行,虽然循环中开始赋给a别的值,最终最后一行时还是改对了,(要是和我说的加了^|find 的表示只要含Desktop串的那行)

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网