Saya merasa %~dp0
sangat berguna, dan saya sering menggunakannya untuk membuat file batch saya lebih portabel.
Tetapi label itu sendiri tampak sangat samar bagi saya ... Apa yang ~
dilakukan? Apakah dp
maksud drive dan path? Apakah 0
merujuk ke %0
, path ke file batch yang menyertakan nama file?
Atau itu hanya label aneh?
Saya juga ingin tahu apakah itu fitur yang terdokumentasi, atau sesuatu yang cenderung ditinggalkan.
batch-file
Sebastián Grignoli
sumber
sumber
%~dp0
. Biasanya saya menemukan bahwa hits teratas merujuk pada konten di SO.Jawaban:
Panggilan
di baris perintah memberikan bantuan tentang sintaks ini (yang dapat digunakan di luar FOR, juga, ini hanya tempat di mana bantuan dapat ditemukan).
Ada beberapa huruf yang dapat Anda gunakan seperti
f
untuk "nama path lengkap",d
untuk huruf drive,p
untuk path, dan mereka dapat digabungkan.%~
adalah awal untuk masing-masing sekuens dan angkaI
menunjukkan itu berfungsi pada parameter%I
(di mana%0
nama lengkap file batch, seperti yang Anda asumsikan).sumber
I
. Saya harus menggunakan0
sebagai gantinyaI
. Saya tidak tahu apakah saya melewatkan sesuatu atau apa pun, tetapi hanya membiarkan orang tahu.I
adalah penampung untuk indeks variabel.0
= file panggilan,1
= argumen # 1,2
= argumen # 2, dll ...(Pertama, saya ingin merekomendasikan situs referensi yang berguna ini untuk batch: http://ss64.com/nt/ )
Kemudian hanyalah penjelasan bermanfaat lainnya: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
Dan referensi yang lebih jelas dari sini :
%CmdCmdLine%
akan mengembalikan seluruh baris perintah sebagaimana diteruskan ke CMD.EXE%*
akan mengembalikan sisa baris perintah mulai dari argumen baris perintah pertama (di Windows NT 4,% * juga termasuk semua spasi utama)%~dn
akan 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 jalur terkualifikasi penuh dari% n jika% n adalah nama file atau direktori yang validTAMBAH 1
Baru saja menemukan beberapa referensi bagus untuk operator tilde misterius
~
.The
%~
string disebut persen tilde operator. Anda dapat menemukannya dalam situasi seperti:%~0
.The
:~
string disebut usus tilde operator. Anda dapat menemukannya seperti%SOME_VAR:~0,-1%
.ADD 2 - 1:12 PM 7/6/2018
%1-%9
lihat args baris perintah. Jika tidak nilai jalur yang valid,%~dp1
-%~dp9
semua akan diperluas ke nilai yang sama dengan%~dp0
. Tetapi jika mereka adalah nilai-nilai jalan yang valid, mereka akan memperluas untuk mereka sendiri value driver / jalur.Sebagai contoh: (batch.bat)
Jalankan 1:
Jalankan 2:
sumber
Variabel
%0
dalam skrip batch diatur ke nama file batch yang dieksekusi.The
~dp
sintaks khusus antara%
dan0
pada dasarnya mengatakan untuk memperluas variabel%0
untuk menunjukkan huruf drive dan path, yang memberikan Anda direktori saat ini yang berisi file batch!Bantuan = Tautan
sumber
%0
langsung di cmd tanpa menyimpan file .bat ke harddisk lokal?% ~ dp0 memperluas ke jalur direktori saat ini dari file batch yang berjalan.
Untuk mendapatkan pemahaman yang jelas, mari kita buat file batch dalam direktori.
dengan konten:
Ketika Anda menjalankannya dari command prompt, Anda akan melihat hasil ini:
sumber
Tip lain yang akan banyak membantu adalah mengatur direktori saat ini ke drive lain yang harus digunakan
%~d0
terlebih dahulucd %~dp0
. Ini akan mengubah direktori ke drive file batch, kemudian mengubah ke foldernya.Atau, untuk #oneLinerLovers, seperti yang ditunjukkan @Omni di komentar
cd /d %~dp0
akan mengubah drive dan direktori :)Semoga ini bisa membantu seseorang.
sumber
cd
memiliki parameter bawaan yang akan mengganti drive dan folder:cd /d %~dp0
/d
argumennya bermanfaat, tetapi layak untuk diposting sebagai kandidat jawaban alternatif dan bukan komentar untuk yang satu ini. Terima kasih telah menunjukkan ini, saya tidak tahu tentang hal itu :)Contoh bagus dari peluncur shell portabel Strawberry Perl:
tidak yakin apa yang dilakukan 1 negatif di sana sendiri, tetapi itu berhasil memperlakukan!
sumber
Sebuah contoh akan menyenangkan - inilah contoh yang sepele
itu hanya mencantumkan PERLUASAN setiap file dalam folder saat ini
untuk kombinasi variabel yang lebih bermanfaat (juga tercantum dalam respons sebelumnya) dari eksekusi prompt CMD:
HELP FOR
yang berisi potongan iniPengubah dapat digabungkan untuk mendapatkan hasil majemuk:
sumber