CD 指令在 FOR 迴圈下未傳回正確的結果

CD 指令在 FOR 迴圈下未傳回正確的結果

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

是的,您的自動運行註冊表項導致了該問題。FOR /F透過 CMD.EXE 執行 IN() 子句中的指令。除非/D使用該選項,否則 CMD.EXE 會運行自動運行。但沒有辦法強制 FOR /F 使用該/D選項。 :(

我還喜歡在特定資料夾中開啟命令 shell,但我不使用自動運行。相反,我創建一個快捷方式並編輯屬性,將“開始於:”設置為我想要的資料夾。

如果你真的願意,我想你還是可以使用Autorun。我相信您確實只希望在 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

相關內容