Rumah > pembangunan bahagian belakang > C++ > Mengapakah %~dp0 Menghasilkan Keputusan Berbeza Apabila Fail Kelompok Dilaksanakan Secara Terus berbanding melalui C#?

Mengapakah %~dp0 Menghasilkan Keputusan Berbeza Apabila Fail Kelompok Dilaksanakan Secara Terus berbanding melalui C#?

Barbara Streisand
Lepaskan: 2025-01-09 21:49:45
asal
337 orang telah melayarinya

Why Does %~dp0 Yield Different Results When a Batch File is Executed Directly vs. via C#?

%~dp0 perbezaan rujukan laluan dalam fail kelompok

Latar belakang:

Dalam fail kelompok, %~dp0 mewakili laluan direktori lokasi semasa fail kelompok. Apabila menukar direktori semasa (CD), biasanya nilai %~dp0 akan dikemas kini untuk mencerminkan direktori baharu.

Soalan:

Walau bagaimanapun, pengguna telah melihat perbezaan dalam kelakuan %~dp0 apabila melaksanakan fail kelompok melalui program C#. %~dp0 mengekalkan nilai asalnya apabila dilaksanakan secara langsung, tetapi berubah apabila dipanggil daripada C#.

Analisis:

Perbezaan ini disebabkan oleh cara %~0 (nama fail kelompok yang tidak diubah suai) dikendalikan apabila fail kelompok dipanggil dengan petikan.

  • Pelaksanaan langsung: Apabila %~0 disebut, petikan dialih keluar dan laluan fail kumpulan penuh digunakan untuk menentukan %~dp0.
  • Pelaksanaan C#: Apabila %~0 dipetik dalam C#, rentetan yang tidak disebut akan digunakan untuk mencari fail kelompok. Ini boleh mengakibatkan laluan relatif, menyebabkan nilai %~dp0 tidak tepat.

Penyelesaian:

Untuk menyelesaikan masalah ini, dua kaedah disyorkan:

Daripada kod C#:

  • Elakkan menggunakan petikan semasa memanggil fail kelompok: ProcessStartInfo.FileName = "mybatfile.bat";
  • Jika petikan diperlukan, sila nyatakan laluan fail kumpulan penuh untuk memastikan %~dp0 kekal tepat.

Daripada fail kelompok:

  • Gunakan subrutin untuk mendapatkan semula laluan fail kumpulan semasa dengan pasti tanpa mengira kaedah pelaksanaan:
<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

Atas ialah kandungan terperinci Mengapakah %~dp0 Menghasilkan Keputusan Berbeza Apabila Fail Kelompok Dilaksanakan Secara Terus berbanding melalui 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