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

はい、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完全に無効にして、代わりに次のようなショートカットを作成してみませんか?

1

関連情報