Rumah >pembangunan bahagian belakang >C++ >Mengapa %~dp0 Gelagat Berbeza dalam Fail Kelompok Dijalankan Terus berbanding daripada C#?
Memahami Gelagat Tidak Konsisten %~dp0 dalam Fail Kelompok
Tingkah laku %~dp0
(yang mendapatkan semula direktori fail kelompok) menunjukkan ketidakkonsistenan yang ingin tahu: ia kekal stabil apabila direktori fail kelompok berubah melainkan fail kelompok dilancarkan daripada program C#. Artikel ini menerangkan punca utama dan menyediakan penyelesaian.
Punca Masalah: Bagaimana cmd.exe Mengendalikan %~0
Isu teras berpunca daripada cara cmd.exe
mentafsir %~0
, pembolehubah yang mewakili fail kelompok yang sedang dijalankan. Apabila fail kelompok dilaksanakan tanpa petikan, cmd.exe
menggunakan pembolehubah dalaman yang mengandungi laluan penuh fail kelompok. Walau bagaimanapun, jika fail kelompok dipanggil dengan petikan, cmd.exe
menanggalkan petikan daripada nilai %~0
, menganggapnya sebagai nama fail sahaja. Ia kemudian cuba menyelesaikan laluan penuh secara relatif, yang membawa kepada tingkah laku yang tidak konsisten.
Penyelesaian: Membetulkan Pengambilan Laluan Tidak Konsisten
Berikut ialah strategi untuk memastikan gelagat %~dp0
yang konsisten, tidak kira cara fail kelompok digunakan:
Dalam Kod C#:
cmd /c batchfile.cmd
). Ini adalah penyelesaian yang paling mudah.%~0
menerima maklumat laluan lengkap.Dalam Fail Kelompok:
Contoh Subrutin:
<code class="language-batch">@echo off setlocal enableextensions disabledelayedexpansion call :getCurrentBatchFilePath batchPath echo %batchPath% exit /b :getCurrentBatchFilePath variableName set "%~1=%~f0" goto :eof</code>
Subrutin ini mendapatkan semula laluan penuh (%~f0
) dan menyimpannya dalam pembolehubah yang ditentukan, menyediakan rujukan laluan yang boleh dipercayai untuk kegunaan seterusnya. Kaedah ini disyorkan untuk keserasian dan keteguhan maksimum.
Atas ialah kandungan terperinci Mengapa %~dp0 Gelagat Berbeza dalam Fail Kelompok Dijalankan Terus berbanding daripada C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!