首頁 >後端開發 >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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn