C# から呼び出されるバッチ ファイル内の %~dp0
によるパスの変更について理解する
以下を含むバッチ ファイルを実行しています:
<code class="language-batch">echo %~dp0 CD Arvind echo %~dp0</code>
により、%~dp0
コマンドの後の CD
によって表示されるパスが変更される場合があります。 この動作は、バッチ ファイルの直接実行と矛盾します。
根本原因:
この動作は、cmd.exe による %~0
変数の処理方法に起因します。 C# から起動すると、引用符で囲まれた引数 ("%~0"
) が内部的に引用符で囲まれていない可能性があり、バッチ ファイルが絶対パスではなく相対パス参照になる可能性があります。
パスの問題の解決
一貫したパスの取得を保証するためのソリューションは次のとおりです:
C# から:
引用符を省略: 引用符なしでバッチ ファイルを呼び出します: cmd /c batchfile.cmd
絶対パスを指定します: 引用符が必要な場合は、C# コマンドでバッチ ファイルへの完全なパスを指定します。
バッチ ファイルから:
サブルーチンを使用してバッチ ファイルのパスを確実に決定します:
<code class="language-batch">@echo off setlocal enableextensions disabledelayedexpansion call :getCurrentBatch batchPath echo %batchPath% exit /b :getCurrentBatch variableName set "%~1=%~f0" goto :eof</code>
このサブルーチンは、%~f0
を使用してバッチ ファイルの完全修飾パスを取得し、指定された変数に保存します。 このメソッドは、外部アプリケーションから呼び出されたときの %~dp0
変数の動作から生じる不一致を回避します。
以上がC# から呼び出されたときに `%~dp0` がディレクトリ パスを変更するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。