了解從 C# 呼叫的批次檔中使用 %~dp0
的路徑變更
執行包含以下內容的批次檔:
<code class="language-batch">echo %~dp0 CD Arvind echo %~dp0</code>來自 C# 程式的
可能會導致 %~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中文網其他相關文章!