Windows 10 Enterprise x64を使用しています。次のディレクトリ階層があり、BATファイルが最も内側のレベルにあります。
C:\
dir\
my files\
run.bat
BATファイルには次の行が含まれています。
@pushd %~dp0
@echo %~dp0
@popd
(の意味と使用法は%~dp0
、ヘルプトピックfor /?
とこの回答で説明されています)
現在のディレクトリがであるコマンドプロンプトからBATファイルを実行するとC:\dir\my files
、非常に妥当な結果が得られます。
C:\dir\my files>run.bat
C:\dir\my files\
しかし、親ディレクトリから呼び出すとC:\dir
、次のようになります:
C:\dir>"my files"\run.bat
C:\dir\my files\my files"\
え?最も内側のディレクトリ名が重複している"\
ため、最後にいくつかの迷子の文字があることに注意してください。別の方法で試してみましょう:
C:\dir>"my files\run.bat"
C:\dir\my files\my files\
浮遊文字はなくなりましたが、ディレクトリ名はまだ複製されています。これの説明は何ですか?どのディレクトリから呼び出されても同じ出力が得られるようにBATファイルを変更するにはどうすればよいですか?
もちろん、私の実際のシナリオは、この単純化されたバージョンよりも複雑です。の値%~dp0
は、他の文字列と連結され、環境変数に割り当てられ、他のスクリプトに引数として渡されます。
%cd%
新しい現在のディレクトリをプッシュした後、代わりに変数を使用しますが、以前はなぜ機能しなかったのかまだわかりません。
.\"my files"\run.bat