标题: [注册表类] 【已解决】批处理CD /D 无法进入变量路径的吗? [打印本页]
作者: hztccy 时间: 2024-12-30 16:56 标题: 【已解决】批处理CD /D 无法进入变量路径的吗?
本帖最后由 hztccy 于 2024-12-31 16:38 编辑
- @echo off
-
- ren 查询注册表并获取桌面路径
- 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)
-
- rem 进入目标
- CD /D "%DesktopPath%"
-
- ren 确认变量路径已被获取
- echo "%DesktopPath%"
复制代码
有意思的来了,我在有的电脑可以直接使用这样的方法CD进入,但是有的电脑却会提示【系统找不到制定的路径】。
通过echo "%DesktopPath%"是确实获取了路径的,说有空格吧,但是我已经用了双引号,说获取不到位置吧我用echo已经确认了变量的路径。
懵逼了
作者: 77七 时间: 2024-12-30 17:10
call set 或者call cd /d
作者: hztccy 时间: 2024-12-30 19:53
call set 或者call cd /d
77七 发表于 2024-12-30 17:10
在我自己家里的电脑加入了call cd /d确实成功获取路径了。明天到其他地方试试
作者: ygqiang 时间: 2024-12-30 20:33
本帖最后由 ygqiang 于 2024-12-30 21:09 编辑
在我自己家里的电脑加入了call cd /d确实成功获取路径了。明天到其他地方试试
hztccy 发表于 2024-12-30 19:53
直接这样不行吗?
echo "%USERPROFILE%\Desktop"
pause >nul
作者: aloha20200628 时间: 2024-12-30 21:07
本帖最后由 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% 也不会被自动展开求值... 至于对其再求值的两种解决方法已如二楼所示- @echo off &setlocal &set "x=0"
- echo,x=%x%
- set/p v=<1.txt
- echo,%v%
- echo,再求值
- call set v=%v%
- echo, %v%
- for /f "delims=" %%i in (1.txt) do set "v=%%i"
- echo,%v%
- echo,再求值
- for /f "delims=" %%i in (1.txt) do call set "v=%%i"
- echo, %v%
- pause&exit/b
复制代码
作者: hztccy 时间: 2024-12-30 22:10
直接这样不行吗?
echo "%USERPROFILE%\Desktop"
pause >nul
ygqiang 发表于 2024-12-30 20:33
我一楼的帖子已经写了,在一部分电脑是可以获取成功的,一部分电脑是不可以获取的,目前我正在观测是什么引起的这一个现象,大概率就如二楼的大哥说的,可能需要加入call调用以确保在每一部电脑都可以成功获取。目前我在我自己家里,不管是否加入call都可以成功获取路径,所以这才是我纠结的。
作者: hztccy 时间: 2024-12-30 22:11
回复 hztccy
采用 for /f ... %%i in () do ... 句式获取的返回值其实质是管道文件数据流,如同采用 ...
aloha20200628 发表于 2024-12-30 21:07
哥,你的太复杂了,就我着榆木脑袋想不出这么详细的公式方法,因为我习惯了直接for 。。快捷高效。233
作者: hztccy 时间: 2024-12-31 09:23
回复 2# 77七
哥,能帮我解释一下为啥添加了一个call 引用就可以正常获取了。我测试了大概7-8台电脑都正产了。
作者: 77七 时间: 2024-12-31 12:53
回复 8# hztccy
复制代码
得到
复制代码
其中 %USERPROFILE% 未进行扩展,只是一个普通字符串,由于不存在这个路径,所以报错。
使用call 脱去%USERPROFILE% 的百分号,进行扩展,得到 C:\Users\用户a
辅助理解,假如一个文件夹名为 %批处理之家% 需要进入此路径 批处理命令则为 cd %%批处理之家%% ,如果使用cd %批处理之家%,会扩展 %批处理之家% ,未定义则为空值,如果使用 call cd /d %%批处理之家%%,同样为空值。
作者: hztccy 时间: 2024-12-31 16:36
回复 9# 77七
原来如此,感谢大佬解释
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |