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 レジストリ エントリが問題の原因です。CMD.EXE をFOR /F
介して IN() 句内のコマンドを実行します。また、オプションが使用されない限り、CMD.EXE は Autorun を実行します/D
。ただし、FOR /F にオプションの使用を強制する方法はありません/D
。:(
また、コマンド シェルを特定のフォルダーで開くようにしたいのですが、自動実行は使用しません。代わりに、ショートカットを作成し、プロパティを編集して「開始場所:」を目的のフォルダーに設定します。
本当に必要な場合は、Autorun を引き続き使用できると思います。CD への Autorun は、CMD セッションの最初のインスタンス化時にのみ使用したいはずです。これを実現するには、レジストリ エントリを次のように変更できます。
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="if not defined AutoRunComplete set AutoRunComplete=TRUE&cd /d C:\\Work\\Consulting"
Autorun ロジックが複雑になった場合は、バッチ スクリプトを作成し、Autorun でそのスクリプトを呼び出すようにするといいでしょう。
答え2
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun
完全に無効にして、代わりに次のようなショートカットを作成してみませんか?