![FOR 循环下 CD 命令未返回正确结果](https://linux22.com/image/1344867/FOR%20%E5%BE%AA%E7%8E%AF%E4%B8%8B%20CD%20%E5%91%BD%E4%BB%A4%E6%9C%AA%E8%BF%94%E5%9B%9E%E6%AD%A3%E7%A1%AE%E7%BB%93%E6%9E%9C.png)
CD 命令返回当前目录,%CD% 变量在环境变量中返回相同的结果:
c:\Temp\test\test1>cd
c:\Temp\test\test1
c:\Temp\test\test1>@echo %cd%
c:\Temp\test\test1
此命令回显 CD 命令的结果
for /F %f in ('cd') do @echo %f
所以我应该得到
c:\Temp\test\test1
但实际上我得到:
c:\Temp\test\test1>for /F %f in ('cd') do @echo %f
c:\work\Consulting
但使用 %CD% 会给我这样的结果:
c:\Temp\test\test1>for /F %f in ('@echo %cd%') do @echo %f
c:\Temp\test\test1
几个月前我最后一次测试它时,它在我的计算机上运行(它是不常用的脚本)。
我已经在另一台机器上测试过了,它在那里运行良好。所以我认为这是由于我打开命令提示符并c:\work\Consulting
使用以下注册表脚本设置工作目录的方式造成的:
Windows 注册表编辑器版本 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="cd /d C:\\Work\\Consulting"
(仅供参考,如果您想打开提升的命令提示符到特定目录,则需要这样做)
可惜没有!
编辑: 当然我有一个解决方法,但我想知道我做了什么导致了这种情况的发生。
答案1
是的,您的 Autorun 注册表项导致了问题。FOR /F
通过 CMD.EXE 执行 IN() 子句内的命令。除非使用该选项,否则 CMD.EXE 会运行 Autorun /D
。但是没有办法强制 FOR /F 使用该/D
选项。:(
我还喜欢在特定文件夹中打开命令 shell,但我不使用自动运行。相反,我会创建一个快捷方式并编辑属性,将“开始于:”设置为我想要的文件夹。
如果您确实想要,我认为您仍然可以使用自动运行。我相信您真的只希望在 CMD 会话的初始实例化时将自动运行到 CD。您可以按如下方式修改注册表项以实现此目的:
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="if not defined AutoRunComplete set AutoRunComplete=TRUE&cd /d C:\\Work\\Consulting"
如果您的自动运行逻辑变得更加复杂,您可能需要创建一个批处理脚本,然后让自动运行调用该脚本。
答案2
为什么不完全禁用HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun
而是创建如下所示的快捷方式?