首頁 >後端開發 >C++ >為什麼從 C# 呼叫%~dp0 會更改批次檔中的目錄?

為什麼從 C# 呼叫%~dp0 會更改批次檔中的目錄?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-09 22:04:10592瀏覽

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中文網其他相關文章!

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