FOR 循环下 CD 命令未返回正确结果

FOR 循环下 CD 命令未返回正确结果

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而是创建如下所示的快捷方式?

1

相关内容