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
並創建一個如下所示的快捷方式?