Rumah > pembangunan bahagian belakang > C++ > Mengapa %~dp0 Menukar Direktori dalam Fail Kelompok Apabila Dipanggil daripada C#?

Mengapa %~dp0 Menukar Direktori dalam Fail Kelompok Apabila Dipanggil daripada C#?

Mary-Kate Olsen
Lepaskan: 2025-01-09 22:04:10
asal
588 orang telah melayarinya

Why Does %~dp0 Change Directory in Batch Files When Called from C#?

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#:

  • Elakkan menggunakan petikan apabila memulakan fail kelompok: cmd /c batchfile.cmd
  • Jika petikan mesti digunakan, masukkan laluan penuh ke fail kelompok dalam panggilan.

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan