首頁 > 後端開發 > C++ > 為什麼直接執行批次檔與透過 C# 執行 %~dp0 會產生不同的結果?

為什麼直接執行批次檔與透過 C# 執行 %~dp0 會產生不同的結果?

Barbara Streisand
發布: 2025-01-09 21:49:45
原創
337 人瀏覽過

Why Does %~dp0 Yield Different Results When a Batch File is Executed Directly vs. via C#?

批次檔中的%~dp0路徑引用差異

背景:

在批次檔中,%~dp0表示批次檔目前位置的目錄路徑。變更目前目錄 (CD) 時,通常預期%~dp0的值會更新以反映新目錄。

問題:

但是,使用者觀察到透過C#程式執行批次檔時%~dp0的行為有差異。當直接執行時%~dp0保留其原始值,而從C#中呼叫時則會變更。

分析:

這種差異是由於當用引號呼叫批次檔時,%~0(未修改的批次檔名)的處理方式造成的。

  • 直接執行: 當%~0加引號時,引號會被移除,並使用完整的批次檔路徑來確定%~dp0。
  • C#執行: 當在C#中%~0加引號時,會使用未加引號的字串來定位批次檔。這可能會導致相對路徑,從而導致%~dp0值不準確。

解:

為了解決這個問題,建議採用兩種方法:

從C#程式碼:

  • 呼叫批次檔時避免使用引號:ProcessStartInfo.FileName = "mybatfile.bat";
  • 如果需要引號,請指定完整的批次檔路徑以確保%~dp0保持準確。

從批次檔:

  • 使用子程式可靠地擷取目前批次檔路徑,而與執行方法無關:
<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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板