Analisis perbezaan tingkah laku %~dp0 pembolehubah apabila C# memanggil fail kelompok
Apabila menjalankan fail kelompok secara langsung, pembolehubah %~dp0 mewakili laluan penuh fail kelompok. Walau bagaimanapun, apabila memanggil fail kelompok daripada program C# menggunakan petikan, nilai %~dp0 berubah selepas menukar direktori.
Analisis Punca
Masalah ini berpunca daripada cara cmd.exe mengendalikan %~0 parameter yang dipetik. Apabila fail kelompok dimulakan dengan petikan, petikan dikeluarkan dan panggilan kelompok dibuat relatif kepada direktori semasa. Oleh itu, apabila direktori ditukar di dalam fail kelompok, %~dp0 akan mengikut perubahan laluan relatif, menghasilkan nilai yang berbeza.
Penyelesaian
Penyelesaian C#:
cmd /c batchfile.cmd
Penyelesaian sisi fail kelompok:
Buat subrutin untuk mendapatkan laluan ke fail kelompok dengan pasti:
<code class="language-batch">@echo off setlocal enableextensions disabledelayedexpansion call :getCurrentBatch batch echo %batch% exit /b :getCurrentBatch variableName set "%~1=%~f0" goto :eof</code>
Subrutin ini memastikan bahawa tidak kira bagaimana ia dipanggil, laluan penuh ke fail kelompok diperolehi.
Atas ialah kandungan terperinci Mengapa %~dp0 Menukar Direktori dalam Fail Kelompok Apabila Dipanggil daripada C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!