Board logo

标题: [注册表类] [已解决]批处理怎样从注册表读取相对路径后自动扩展? [打印本页]

作者: my84214182    时间: 2009-12-19 17:38     标题: [已解决]批处理怎样从注册表读取相对路径后自动扩展?

我的目的是从注册表中读取桌面的位置,因为有些人会更改默认路径;而即使默认路径也因操作系统不同而略有不同。
  1. @echo off
  2. for /f "tokens=2*" %%b in ('reg query "hkcu\software\microsoft\windows\currentversion\explorer\user shell folders" /v desktop') do echo %%c
复制代码
以上语句读取的默认结果中带有相对路径%userprofile%,无论开启不开启扩展延迟啥的,或者再赋值这个%userprofile%都无法转换到绝对路径上,用这个参数直接ren/dir啥的都不行

目前使用Call调用来解决,就是
  1. @echo off
  2. for /f "tokens=2*" %%b in ('reg query "hkcu\software\microsoft\windows\currentversion\explorer\user shell folders" /v desktop') do call :abc "%%c"
  3. pause
  4. :abc
  5. echo %~1
  6. goto :eof
复制代码
请问有没有直接就能使相对路径扩展的方法?
作者: zqz0012005    时间: 2009-12-19 20:10

call echo %%c
作者: Seter    时间: 2009-12-19 20:14

我这里没这个值吖...不过我也做了个
  1. @rem %userprofile%\桌面
  2. @echo off
  3. set/ps=<%0
  4. set s=%s:~5%
  5. echo %s%
  6. setlocal enabledelayedexpansion
  7. set s=!s:%%=$!!
  8. setlocal disabledelayedexpansion
  9. set s=%s:$=!%
  10. setlocal enabledelayedexpansion
  11. echo %s%
  12. pause
复制代码

作者: Seter    时间: 2009-12-19 20:15

!!!没想到ZQZ的方法,郁闷
作者: my84214182    时间: 2009-12-20 20:59

嗯,用二楼的方法算是小小的改进了一下。不知“call echo %%c”的显示结果能否直接输入到变量中?代码中无数的for、for……
  1. @echo offfor /f "tokens=2*" %%b in ('reg query "hkcu\software\microsoft\windows\currentversion\explorer\user shell folders" /v desktop') do (for /f "tokens=*" %%i in ('call echo %%c') do echo %%i)
复制代码

原帖由 zqz0012005 于 2009-12-19 20:10 发表
call echo %%c

作者: keen    时间: 2009-12-20 22:16     标题: 回复 5楼 的帖子

用2楼的改进可以这样:
  1. @echo off
  2. for /f "skip=4 tokens=2*" %%b in ('reg query "hkcu\software\microsoft\windows\currentversion\explorer\user shell folders" /v desktop') do call echo %%c
  3. pause
复制代码
要想把call echo %%c的值赋值给变量,可以这样变通一下:
  1. @echo off
  2. for /f "skip=4 tokens=2*" %%b in ('reg query "hkcu\software\microsoft\windows\currentversion\explorer\user shell folders" /v desktop') do call set var=%%c
  3. echo %var%
  4. pause
复制代码

作者: zqz0012005    时间: 2009-12-20 22:18

一个道理啊
call set var=%%c
作者: my84214182    时间: 2009-12-21 01:32     标题: 回复 6楼 的帖子

学习了……原来命令都可以直接“呼叫”的啊……那问个小问题,是不是常规命令都可以直接“call”的?第二是“call”回来的结果是不是和“call :xxx”得到的结果一样?就是"call set var=%%c"是不是相当于
call :abc %%c
pause
:abc
set var=%1
goto :eof




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2