C# がバッチ ファイルを呼び出したときの %~dp0 変数の動作の違いの分析
バッチ ファイルを直接実行する場合、%~dp0 変数はバッチ ファイルのフル パスを表します。ただし、引用符を使用して C# プログラムからバッチ ファイルを呼び出す場合、ディレクトリを変更すると %~dp0 の値が変わります。
原因分析
この問題は、cmd.exe が引用符で囲まれた %~0 パラメーターを処理する方法に起因します。バッチ ファイルが引用符で開始されると、引用符は削除され、現在のディレクトリを基準にしてバッチ呼び出しが行われます。そのため、バッチファイル内でディレクトリを変更すると、%~dp0 も相対パスの変更に追従し、値が異なります。
解決策
C# ソリューション:
cmd /c batchfile.cmd
バッチファイル側のソリューション:
バッチ ファイルへのパスを確実に取得するサブルーチンを作成します:
<code class="language-batch">@echo off setlocal enableextensions disabledelayedexpansion call :getCurrentBatch batch echo %batch% exit /b :getCurrentBatch variableName set "%~1=%~f0" goto :eof</code>
このサブルーチンは、呼び出し方法に関係なく、バッチ ファイルへの完全なパスを確実に取得します。
以上がC# から呼び出すと、%~dp0 がバッチ ファイルのディレクトリを変更するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。