Rumah >pembangunan bahagian belakang >C++ >Mengapakah `%~dp0` Menukar Laluan Direktori Apabila Dipanggil daripada C#?

Mengapakah `%~dp0` Menukar Laluan Direktori Apabila Dipanggil daripada C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-09 21:47:42605semak imbas

Why Does `%~dp0` Change Directory Paths When Called from C#?

Memahami Perubahan Laluan dengan %~dp0 dalam Fail Kelompok Dipanggil daripada C#

Melaksanakan fail kelompok yang mengandungi:

<code class="language-batch">echo %~dp0
CD Arvind
echo %~dp0</code>

daripada program C# boleh menghasilkan laluan yang diubah suai dipaparkan oleh %~dp0 selepas arahan CD. Tingkah laku ini tidak konsisten dengan pelaksanaan terus fail kelompok.

Punca Punca:

Tingkah laku ini disebabkan oleh cara cmd.exe mengendalikan pembolehubah %~0. Apabila dilancarkan daripada C#, hujah yang dipetik ("%~0") mungkin tidak dipetik secara dalaman, membawa kepada rujukan laluan relatif untuk fail kelompok dan bukannya laluan mutlak.

Menyelesaikan Isu Laluan

Berikut ialah penyelesaian untuk memastikan perolehan laluan yang konsisten:

Daripada C#:

  1. Tinggalkan Petikan: Panggil fail kelompok tanpa petikan: cmd /c batchfile.cmd

  2. Sediakan Laluan Penuh: Jika petikan diperlukan, nyatakan laluan lengkap ke fail kelompok dalam arahan C#.

Daripada Fail Kelompok:

Gunakan subrutin untuk menentukan laluan fail kelompok dengan pasti:

<code class="language-batch">@echo off
setlocal enableextensions disabledelayedexpansion

call :getCurrentBatch batchPath
echo %batchPath%

exit /b

:getCurrentBatch variableName
    set "%~1=%~f0"
    goto :eof</code>

Subrutin ini menggunakan %~f0 untuk mendapatkan laluan yang layak sepenuhnya bagi fail kelompok, menyimpannya dalam pembolehubah yang ditentukan. Kaedah ini mengelakkan ketidakkonsistenan yang timbul daripada kelakuan pembolehubah %~dp0 apabila dipanggil daripada aplikasi luaran.

Atas ialah kandungan terperinci Mengapakah `%~dp0` Menukar Laluan Direktori Apabila Dipanggil daripada C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn