Pertanyaan Apa artinya% ~ dp0, dan bagaimana cara kerjanya?


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

Tetapi label itu sendiri tampaknya sangat samar bagi saya ... apa itu ~ perbuatan? tidak dp drive dan jalan yang berarti? apakah itu 0 mengacu pada %0, path ke file batch yang menyertakan nama file?

Atau itu hanya label yang aneh?

Saya juga ingin tahu apakah itu adalah fitur yang didokumentasikan, atau sesuatu yang cenderung tidak lagi digunakan.


810
2018-02-17 20:15


asal


Jawaban:


Panggilan

for /?

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

Selain itu, substitusi FOR   referensi variabel telah ditingkatkan.   Anda sekarang dapat menggunakan opsi berikut ini   sintaksis:

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string

Pengubah dapat digabungkan untuk mendapatkan   hasil gabungan:

%~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

Dalam contoh di atas% I dan PATH dapat   diganti dengan nilai valid lainnya.   % ~ Sintaks diakhiri oleh valid   UNTUK nama variabel. Mengambil huruf besar   nama variabel seperti% I membuatnya lebih banyak   dapat dibaca dan menghindari kebingungan dengan   pengubah, yang tidak terjadi   peka.

Ada huruf-huruf berbeda yang bisa Anda gunakan seperti f untuk "nama jalur lengkap", d untuk huruf kandar, p untuk jalur, dan mereka dapat digabungkan. %~ adalah awal untuk masing-masing urutan dan angka I menandakan ia bekerja pada parameter %I (dimana %0 adalah nama lengkap dari file batch, seperti yang Anda kira).


648
2018-02-17 20:19



(Pertama, saya ingin merekomendasikan situs referensi berguna ini untuk kumpulan: http://ss64.com/nt/)

Maka hanya penjelasan lain yang bermanfaat: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/

Variabel% ~ dp0

Variabel% ~ dp0 (yang nol) saat direferensikan dalam Windows   file batch akan diperluas ke dsurat rive dan path dari bets itu   mengajukan.

Variabel% 0-% 9 mengacu pada parameter baris perintah dari batch   mengajukan. % 1-% 9 merujuk ke argumen baris perintah setelah nama file batch.   % 0 mengacu pada file batch itu sendiri.

Jika Anda mengikuti karakter persen (%) dengan karakter tilde (~),   Anda dapat memasukkan pengubah (s) sebelum nomor parameter untuk mengubah   cara variabel diperluas. Modifier d diperluas ke drive   huruf dan p pengubah memperluas ke jalur parameter.

Contoh: Misalkan Anda memiliki direktori di C: disebut bat_files, dan   di direktori itu adalah file bernama example.bat. Dalam hal ini,% ~ dp0   (menggabungkan d dan p pengubah) akan memperluas ke C: \ bat_files.

Periksa artikel Microsoft ini untuk penjelasan lengkap.

Juga, periksa utas forum ini.

Dan referensi yang lebih jelas dari sini:

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

  • %*  akan mengembalikan sisa baris perintah mulai dari argumen baris perintah pertama (pada Windows NT 4,% * juga mencakup semua spasi utama)

  • %~dnakan mengembalikan huruf drive% n (n dapat berkisar dari 0 hingga 9) jika% n adalah jalur atau nama file yang valid (tidak ada UNC)

  • %~pn    akan mengembalikan direktori% n jika% n adalah jalur atau nama file yang valid (tidak ada UNC)

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

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

  • %~fn    akan mengembalikan lintasan yang sepenuhnya berkualifikasi% n jika% n adalah nama atau direktori file yang valid

TAMBAHKAN 1

Baru saja menemukan beberapa referensi bagus untuk gaib  ~ operator tilde.

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

Itu :~ string disebut tilde usus besar operator. Anda dapat menemukannya %SOME_VAR:~0,-1%.

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

%1-%9 lihat argumen baris perintah. Jika mereka adalah tidak nilai jalur yang valid, %~dp1 - %~dp9 semua akan meluas ke nilai yang sama dengan %~dp0. Tetapi jika mereka adalah nilai jalur yang valid, akan diperluas menjadi mereka sendiri nilai driver / jalur.

Sebagai contoh: (batch.bat)

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

Jalankan 1:

D:\Workbench>batch arg1 arg2

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

Jalankan 2:

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

~dp0= D:\Workbench\
~dp1= c:\123\
~dp2= e:\abc\

243
2018-04-24 01:51



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

Variabel %0 dalam skrip batch diatur ke nama file batch yang dieksekusi. Itu ~dp sintaks khusus antara % dan 0 pada dasarnya mengatakan untuk memperluas variabel %0 untuk menampilkan huruf drive dan path, yang memberi Anda direktori saat ini yang berisi file batch!


137
2018-02-17 20:28



Tip lain yang akan membantu banyak adalah untuk mengatur direktori saat ini ke drive yang berbeda yang harus digunakan %~d0 pertama kemudian cd %~dp0. Ini akan mengubah direktori ke drive file batch, kemudian ganti ke foldernya.

Atau, untuk #oneLinerLovers, seperti yang ditunjukkan @Omni dalam komentar cd /d %~dp0 akan mengubah drive dan direktori :)

Semoga ini bisa membantu seseorang.


30
2017-09-14 08:54



% ~ dp0 memperluas jalur direktori saat ini dari file batch yang sedang berjalan.

Untuk mendapatkan pemahaman yang jelas, mari buat file batch dalam direktori.

C: \ script \ test.bat

dengan isi:

@echo off
echo %~dp0

Ketika Anda menjalankannya dari command prompt, Anda akan melihat hasil ini:

C: \ skrip \


30
2017-11-25 08:44



Contoh bagus dari peluncur shell portabel Strawberry Perl:

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 dilakukan orang negatif di sana sendiri, tetapi itu berhasil memperlakukan!


20
2017-09-25 18:39



Sebuah contoh akan menyenangkan - inilah yang sepele

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

itu daftar hanya PERLUASAN dari setiap file dalam folder saat ini

untuk kombinasi variabel yang lebih berguna (juga tercantum dalam respons sebelumnya) dari perintah CMD prompt: HELP FOR yang berisi cuplikan ini

Pengubah dapat dikombinasikan untuk mendapatkan hasil majemuk:

%~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

10
2018-06-21 16:31