ホームページ >バックエンド開発 >C++ >C# から呼び出すと、%~dp0 がバッチ ファイルのディレクトリを変更するのはなぜですか?

C# から呼び出すと、%~dp0 がバッチ ファイルのディレクトリを変更するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-09 22:04:10657ブラウズ

Why Does %~dp0 Change Directory in Batch Files When Called from C#?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。