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
379 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:
@echo off
    setlocal enableextensions disabledelayedexpansion

    call :getCurrentBatch batch
    echo %batch%

    exit /b

:getCurrentBatch variableName
    set "%~1=%~f0"
    goto :eof
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!

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