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