Bisakah file batch Windows menentukan nama filenya sendiri?
Misalnya, jika saya menjalankan file batch C: \ Temp \ myScript.bat, apakah ada perintah dalam myScript.bat yang dapat menentukan string "myScript.bat"?
windows
batch-file
cmd
djangofan.dll
sumber
sumber
%0
adalah apa yang Anda cari. Lihat [pertanyaan ini] [1] untuk informasi lebih lanjut. [1]: stackoverflow.com/questions/357315/…Jawaban:
Iya.
Gunakan
%0
variabel khusus untuk mendapatkan jalur ke file saat ini.Tulis
%~n0
untuk mendapatkan nama file saja tanpa ekstensi.Tulis
%~n0%~x0
untuk mendapatkan nama file dan ekstensi.Juga memungkinkan untuk menulis
%~nx0
untuk mendapatkan nama file dan ekstensi.sumber
cd
masuk ke dir terlebih dahulu dan menjalankan batch dari sana,% 0 biasanya tidak akan memiliki info jalur (tetapi Anda bisa mendapatkannya dari% cd% dalam hal ini)%cd%
akan mengembalikan Direktori Saat Ini dari proses yang disebut file batch. Jadi, jika Anda berada di prompt masukD:\dir1
dan masukY:\foo\bar.bat
, jikabar.bat
telah@echo %cd%
maka itu akan keluarD:\dir1
.Anda bisa mendapatkan nama file, tapi Anda juga bisa mendapatkan path lengkapnya, tergantung apa yang Anda tempatkan di antara '% ~' dan '0'. Silakan pilih
Misalnya, dari dalam c: \ tmp \ foo.bat,
%~nx0
memberi Anda "foo.bat", sementara%~dpnx0
memberikan "c: \ tmp \ foo.bat". Perhatikan bahwa potongan selalu dirakit dalam urutan kanonik, jadi jika Anda menjadi lucu dan mencoba%~xnpd0
, Anda masih mendapatkan "c: \ tmp \ foo.bat"sumber
f
adalah nama file, tetapi dalam contoh Anda, Anda gunakann
untuk nama file. Setelah beberapa pengujian, tampaknya ituf
adalah jalur lengkap, dann
merupakan nama file.%~xnpd0
" ... Aku mencintaimu.Dengan menggunakan script berikut, berdasarkan jawaban SLaks, saya menentukan bahwa jawaban yang benar adalah:
Dan inilah skrip pengujian saya:
Yang saya anggap menarik adalah bahwa % nx0 tidak akan berfungsi, karena kita tahu bahwa karakter '~' biasanya digunakan untuk menghapus / memotong tanda kutip dari variabel.
sumber
Ingatlah itu
0
adalah kasus khusus nomor parameter di dalam file batch, di mana0
berarti file ini diberikan pada baris perintah .Jadi jika file tersebut adalah myfile.bat, Anda dapat memanggilnya dengan beberapa cara sebagai berikut, yang masing-masing akan memberi Anda keluaran yang berbeda dari penggunaan
%0
atau%~0
:myfile
myfile.bat
mydir\myfile.bat
c:\mydir\myfile.bat
"c:\mydir\myfile.bat"
Semua hal di atas adalah panggilan legal jika Anda memanggilnya dari tempat relatif yang benar ke direktori tempatnya berada.
%~0
menghapus kutipan dari contoh terakhir, sedangkan yang%0
tidak.Karena ini semua memberikan hasil yang berbeda,
%0
dan%~0
sangat tidak mungkin menjadi apa yang sebenarnya ingin Anda gunakan.Berikut adalah file batch untuk diilustrasikan:
sumber
Coba jalankan contoh di bawah ini untuk merasakan bagaimana variabel magis bekerja.
Aturan terkait mengikuti.
sumber
Di bawah ini adalah kode awal saya:
Saya perhatikan bahwa nama file yang diberikan oleh% ~ 0 dan% 0 adalah cara memasukkannya ke dalam command-shell dan bukan bagaimana nama file itu sebenarnya. Jadi jika Anda ingin kasus literal digunakan untuk nama file Anda harus menggunakan% ~ n0. Namun, ini akan menghilangkan ekstensi file. Tetapi jika Anda mengetahui nama file Anda dapat menambahkan kode berikut.
Saya telah belajar bahwa ": ~ 8,4%" berarti mulai dari karakter ke-9 dari variabel dan kemudian tampilkan tunjukkan 4 karakter berikutnya. Rentangnya adalah 0 sampai akhir string variabel. Jadi% Path% akan sangat panjang!
Namun, ini tidak terdengar seperti solusi Jool (% ~ x0) di atas.
Bukti Saya:
Ini kode terakhirnya
sumber