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

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

Mary-Kate Olsen
リリース: 2025-01-09 22:04:10
オリジナル
634 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート