Rumah >pembangunan bahagian belakang >C++ >Mengapakah `%~dp0` Menukar Laluan Direktori Apabila Dipanggil daripada 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#:
Tinggalkan Petikan: Panggil fail kelompok tanpa petikan: cmd /c batchfile.cmd
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!