Apa %~dp0 berarti, dan bagaimana cara kerjanya?

Saya menemukan %~dp0 sangat berguna, dan saya banyak menggunakannya untuk membuat file batch yang lebih portabel.

Tapi label itu sendiri tampaknya sangat samar untuk saya... Apa ~ lakukan? Apakah dp berarti drive dan path? Apakah 0 merujuk pada %0, path ke file batch yang meliputi nama file?

Atau itu hanya sebuah label aneh?

I'd juga ingin tahu jika itu adalah fitur didokumentasikan, atau sesuatu yang rentan untuk menjadi usang.

Mengomentari pertanyaan (5)
Larutan

Panggilan

for /?

pada command-line memberikan bantuan tentang sintaks ini (yang dapat digunakan di luar, juga, ini adalah tempat di mana bantuan dapat ditemukan).

selain itu, substitusi UNTUK variabel referensi yang telah ditingkatkan. Anda sekarang dapat menggunakan opsional berikut sintaks:

%~aku - mengembang %saya menghapus apapun di sekitarnya kutipan (") %~fI - mengembang %I ke jalur yang sepenuhnya memenuhi syarat nama %~dI - perluas %I untuk huruf drive hanya %~pI - mengembang %I ke jalan hanya %~nI mengembang %I untuk nama file hanya %~xI - mengembang %I untuk ekstensi file hanya %~sI - memperluas jalur mengandung nama pendek hanya %~aI - mengembang %I untuk file atribut file %~tI - mengembang %I untuk tanggal/waktu file %~zI - mengembang %I dengan ukuran file %~$PATH:aku - pencarian direktori yang tercantum di JALAN variabel lingkungan dan mengembang %I ke fully qualified nama yang pertama ditemukan. Jika lingkungan nama variabel tidak didefinisikan atau file tidak ditemukan oleh pencarian, kemudian pengubah ini memperluas ke string kosong

pengubah dapat dikombinasikan untuk mendapatkan senyawa hasil:

%~dpI - mengembang %I ke drive letter and path hanya %~nxI - mengembang %I untuk nama file dan ekstensi hanya %~fsI mengembang %I ke path lengkap nama dengan nama pendek hanya %~dp$PATH:aku - pencarian direktori yang tercantum di JALAN variabel lingkungan %I dan memperluas ke huruf drive dan path yang pertama ditemukan. %~ftzaI mengembang %I ke DIR seperti output line

pada contoh Di atas %I dan JALAN dapat diganti dengan yang lain nilai yang berlaku. % ~ sintaks diakhiri dengan valid UNTUK nama variabel. Memilih atas kasus variabel nama-nama seperti %saya membuatnya lebih dapat dibaca dan menghindari kebingungan dengan pengubah, yang tidak terjadi sensitif.

Ada huruf yang berbeda yang dapat anda gunakan seperti f untuk "path lengkap nama", d untuk huruf drive, p untuk jalan, dan mereka dapat dikombinasikan. %~ adalah awal untuk masing-masing urutan dan jumlah aku menunjukkan ia bekerja pada parameter %I (di mana %0 adalah nama lengkap dari file batch, seperti anda diasumsikan).

Komentar (5)

(Pertama, saya'd ingin merekomendasikan hal ini berguna referensi situs untuk batch: http://ss64.com/nt/)

Kemudian hanya berguna lain penjelasan: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/

Yang %~dp0 Variabel

%~dp0 (itu nol) variabel ketika dirujuk dalam Windows file batch yang akan memperluas ke drive surat dan path dari batch yang file.

variabel-variabel %0-%9 merujuk kepada parameter baris perintah batch file. %1-%9 merujuk pada argumen baris perintah setelah batch file namanya. %0 mengacu pada batch file itu sendiri.

Jika anda mengikuti karakter persen (%) dengan karakter tilde (~), anda dapat memasukkan pengubah(s) sebelum jumlah parameter untuk mengubah cara variabel diperluas. D pengubah memperluas ke drive surat dan p pengubah memperluas ke jalur parameter.

Contoh: katakanlah anda memiliki sebuah direktori C: disebut bat_files, dan dalam direktori tersebut adalah sebuah file yang bernama contoh.bat. Dalam hal ini, %~dp0 (menggabungkan d dan p pengubah) akan memperluas untuk C:\bat_files.

Check out artikel Microsoft ini. untuk penjelasan lengkap.

Juga, check out thread forum ini.

Dan yang lebih jelas referensi dari di sini:

  • %CmdCmdLine% akan mengembalikan seluruh baris perintah sebagai diteruskan ke CMD.EXE

  • %* akan kembali sisa dari baris perintah mulai pertama argumen baris perintah (dalam Windows NT 4, %* juga termasuk semua mengarah spasi)

  • %~dn akan kembali huruf drive %n (n dapat berkisar dari 0 sampai 9) jika %n adalah jalan yang sah atau nama file (tidak ada UNC)

  • %~pn akan kembali direktori %n jika %n adalah jalan yang sah atau nama file (tidak ada UNC)

  • %~nn akan mengembalikan nama file hanya dari %n jika %n adalah nama file yang valid

  • %~xn akan kembali ekstensi file hanya dari %n jika %n adalah nama file yang valid

  • %~fn akan kembali lintasan yang memenuhi syarat %n jika %n valid nama file atau direktori

TAMBAHKAN 1

Hanya menemukan beberapa referensi yang baik untuk misterius ~ tilde operator.

The %~ string disebut persen tilde operator. Anda dapat menemukannya dalam situasi seperti: %~0.

The :~ string disebut colon tilde operator. Anda dapat menemukan hal seperti %SOME_VAR:~0,-1%.

TAMBAHKAN 2 - 1:12 PM 7/6/2018

%1-%9 mengacu pada baris perintah arg. Jika mereka tidak ** valid path nilai-nilai, %~dp1 - %~dp9 semua akan memperluas ke nilai yang sama %~dp0. Tetapi jika mereka sedang valid path nilai-nilai, mereka akan memperluas ke sendiri** driver/path nilai.

Misalnya: (batch.bat)

@echo off
@echo ~dp0= %~dp0
@echo ~dp1= %~dp1
@echo ~dp2= %~dp2
@echo on

Run 1:

D:\Workbench>batch arg1 arg2

~dp0= D:\Workbench\
~dp1= D:\Workbench\
~dp2= D:\Workbench\

Run 2:

D:\Workbench>batch c:\123\a.exe e:\abc\b.exe

~dp0= D:\Workbench\
~dp1= c:\123\
~dp2= e:\abc\
Komentar (3)

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

Variabel %0 di batch script diatur untuk nama mengeksekusi batch file. The ~dp sintaks khusus antara % dan 0 pada dasarnya mengatakan untuk memperluas variabel %0 untuk menampilkan drive letter and path, yang memberikan anda saat ini direktori yang berisi file batch!

Komentar (2)

%~dp0 memperluas ke direktori saat ini jalur menjalankan file batch.

Untuk mendapatkan pemahaman yang jelas, let's buat batch file dalam sebuah direktori.

C:\script\test.bat

dengan isi:

@echo off
echo %~dp0

Ketika anda jalankan dari command prompt, anda akan melihat hasil seperti ini:

C:\script\

Komentar (0)

Tip lain yang akan banyak membantu adalah bahwa untuk mengatur direktori saat ini ke berbeda satu akan memiliki untuk menggunakan %~d0 pertama, kemudian cd %~dp0. Ini akan mengubah direktori ke file batch's drive, kemudian mengubah ke folder tersebut.

Atau, untuk #oneLinerLovers, seperti @Omni menunjukkan di komentar cd /d %~dp0 akan perubahan kedua drive dan directory :)

Semoga ini bisa membantu seseorang.

Komentar (3)

Contoh yang bagus dari Strawberry Perl's portable shell launcher:

set drive=%~dp0
set drivep=%drive%
if #%drive:~-1%# == #\# set drivep=%drive:~0,-1%

set PATH=%drivep%\perl\site\bin;%drivep%\perl\bin;%drivep%\c\bin;%PATH%

tidak yakin apa yang negatif 1's melakukan sendiri, tetapi bekerja mengobati!

Komentar (2)

Sebuah contoh akan menjadi bagus - di sini's sepele satu

for %I in (*.*) do @echo %~xI

itu hanya mencantumkan EKSTENSI setiap file dalam folder saat ini

untuk lebih berguna variabel kombinasi (juga terdaftar di respon sebelumnya) dari CMD prompt jalankan: MEMBANTU yang berisi cuplikan ini

Para modifikator dapat dikombinasikan untuk mendapatkan senyawa hasil:

%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
               environment variable for %I and expands to the
               drive letter and path of the first one found.
%~ftzaI     - expands %I to a DIR like output line
Komentar (2)