[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[注册表类] [已解决]批处理怎样从注册表读取相对路径后自动扩展?

我的目的是从注册表中读取桌面的位置,因为有些人会更改默认路径;而即使默认路径也因操作系统不同而略有不同。
  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
复制代码
请问有没有直接就能使相对路径扩展的方法?
1

评分人数

    • keen: 感谢主动给标题标注[已解决]字样PB + 2

call echo %%c
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

我这里没这个值吖...不过我也做了个
  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
复制代码

TOP

!!!没想到ZQZ的方法,郁闷

TOP

嗯,用二楼的方法算是小小的改进了一下。不知“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

TOP

回复 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
复制代码
(*^_^*)

TOP

一个道理啊
call set var=%%c
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 6楼 的帖子

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

TOP

返回列表