ホームページ >バックエンド開発 >C++ >C# から呼び出されたときに `%~dp0` がディレクトリ パスを変更するのはなぜですか?

C# から呼び出されたときに `%~dp0` がディレクトリ パスを変更するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-09 21:47:42605ブラウズ

Why Does `%~dp0` Change Directory Paths When Called from C#?

C# から呼び出されるバッチ ファイル内の %~dp0 によるパスの変更について理解する

以下を含むバッチ ファイルを実行しています:

<code class="language-batch">echo %~dp0
CD Arvind
echo %~dp0</code>
C# プログラムからの

により、%~dp0 コマンドの後の CD によって表示されるパスが変更される場合があります。 この動作は、バッチ ファイルの直接実行と矛盾します。

根本原因:

この動作は、cmd.exe による %~0 変数の処理方法に起因します。 C# から起動すると、引用符で囲まれた引数 ("%~0") が内部的に引用符で囲まれていない可能性があり、バッチ ファイルが絶対パスではなく相対パス参照になる可能性があります。

パスの問題の解決

一貫したパスの取得を保証するためのソリューションは次のとおりです:

C# から:

  1. 引用符を省略: 引用符なしでバッチ ファイルを呼び出します: cmd /c batchfile.cmd

  2. 絶対パスを指定します: 引用符が必要な場合は、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 サイトの他の関連記事を参照してください。

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