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

[注册表类] 【已解决】批处理CD /D 无法进入变量路径的吗?

本帖最后由 hztccy 于 2024-12-31 16:38 编辑
  1. @echo off
  2. ren 查询注册表并获取桌面路径
  3. for /f "tokens=3" %%i in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v desktop') do (    Set DesktopPath=%%i)
  4. rem 进入目标
  5. CD /D "%DesktopPath%"
  6. ren 确认变量路径已被获取
  7. echo "%DesktopPath%"
复制代码
有意思的来了,我在有的电脑可以直接使用这样的方法CD进入,但是有的电脑却会提示【系统找不到制定的路径】。

通过echo "%DesktopPath%"是确实获取了路径的,说有空格吧,但是我已经用了双引号,说获取不到位置吧我用echo已经确认了变量的路径。

懵逼了

call set 或者call cd /d
1

评分人数

bat小白,请多指教!谢谢!

TOP

call set 或者call cd /d
77七 发表于 2024-12-30 17:10



    在我自己家里的电脑加入了call cd /d确实成功获取路径了。明天到其他地方试试

TOP

本帖最后由 ygqiang 于 2024-12-30 21:09 编辑
在我自己家里的电脑加入了call cd /d确实成功获取路径了。明天到其他地方试试
hztccy 发表于 2024-12-30 19:53


直接这样不行吗?


echo "%USERPROFILE%\Desktop"
pause >nul

TOP

本帖最后由 aloha20200628 于 2024-12-30 21:36 编辑

回复 1# hztccy

   采用 for /f ... %%i in () do ... 句式获取的返回值其实质是管道文件数据流,如同采用 for /f ... %%i in (1.txt) do set v=%%i 或 set/p v=<1.txt 读取外部文件一样,变量v中包含的%...%字段未经cmd预处理染指,故会作为原始字面量保全在变量v中。楼主可先将
   abc%x%zyx
   存为1.txt,再用以下代码验证结果 》即变量v中包含的 %x% 并不会被自动展开求值... 同理回到一楼代码,变量 DesktopPath 所包含的 %USERPROFILE% 也不会被自动展开求值... 至于对其再求值的两种解决方法已如二楼所示
  1. @echo off &setlocal &set "x=0"
  2. echo,x=%x%
  3. set/p v=<1.txt
  4. echo,%v%
  5.    echo,再求值
  6.    call set v=%v%
  7.    echo,  %v%
  8. for /f "delims=" %%i in (1.txt) do set "v=%%i"
  9. echo,%v%
  10.    echo,再求值
  11.    for /f "delims=" %%i in (1.txt) do call set "v=%%i"
  12.    echo,  %v%
  13. pause&exit/b
复制代码

TOP

直接这样不行吗?


echo "%USERPROFILE%\Desktop"
pause >nul
ygqiang 发表于 2024-12-30 20:33



    我一楼的帖子已经写了,在一部分电脑是可以获取成功的,一部分电脑是不可以获取的,目前我正在观测是什么引起的这一个现象,大概率就如二楼的大哥说的,可能需要加入call调用以确保在每一部电脑都可以成功获取。目前我在我自己家里,不管是否加入call都可以成功获取路径,所以这才是我纠结的。

TOP

回复  hztccy

   采用 for /f ... %%i in () do ... 句式获取的返回值其实质是管道文件数据流,如同采用 ...
aloha20200628 发表于 2024-12-30 21:07



    哥,你的太复杂了,就我着榆木脑袋想不出这么详细的公式方法,因为我习惯了直接for 。。快捷高效。233

TOP

回复 2# 77七


    哥,能帮我解释一下为啥添加了一个call 引用就可以正常获取了。我测试了大概7-8台电脑都正产了。

TOP

回复 8# hztccy


  
  1. echo "%DesktopPath%"
复制代码
得到
  1. "%USERPROFILE%\Desktop"
复制代码


其中 %USERPROFILE% 未进行扩展,只是一个普通字符串,由于不存在这个路径,所以报错。


使用call 脱去%USERPROFILE% 的百分号,进行扩展,得到 C:\Users\用户a


辅助理解,假如一个文件夹名为  %批处理之家% 需要进入此路径 批处理命令则为 cd %%批处理之家%% ,如果使用cd %批处理之家%,会扩展 %批处理之家% ,未定义则为空值,如果使用 call cd /d %%批处理之家%%,同样为空值。
bat小白,请多指教!谢谢!

TOP

回复 9# 77七


    原来如此,感谢大佬解释

TOP

返回列表