Apa saja yang kurang diketahui, tetapi fitur penting dan berguna dari file batch Windows?
Pedoman:
- Satu fitur per jawaban
- Berikan deskripsi singkat tentang fitur dan contohnya , bukan hanya tautan ke dokumentasi
- Batasi jawaban untuk fungsi asli , yaitu, tidak memerlukan perangkat lunak tambahan, seperti Windows Resource Kit
Klarifikasi: Kami merujuk ke skrip yang diproses oleh cmd.exe, yang merupakan default pada varian WinNT.
(Lihat juga: file batch Windows: .bat vs .cmd? )
windows
batch-file
hidden-features
Chris Noe
sumber
sumber
call C:\WINDOWS\system32\ntbackup.exe backup /V:yes /R:no /RS:no /HC:off /M normal /L:s @daily.bks /F daily.bkf
. Dan untuk memahami semua parameter dari baris itu, jalankan sajaC:\WINDOWS\system32\ntbackup.exe /?
.Membawa Anda ke direktori yang ditentukan oleh jalur .
Membawa Anda kembali ke direktori tempat Anda "mendorong".
sumber
Tidak yakin seberapa berguna ini dalam file batch , tetapi ini adalah perintah yang sangat nyaman untuk digunakan dalam command prompt:
Ini akan membuka Windows Explorer di folder "some_directory".
Saya telah menemukan ini penghemat waktu yang hebat.
sumber
open .
lakukan hal yang sama.start
tidak lebih dari sekadar membuka folder saat ini. Anda dapat mengirimkan file apa pun dan itu akan membukanya dengan penampil yang dikonfigurasi. Berikan URL dan peramban default Anda terbuka, dll ...Saya selalu kesulitan membaca komentar yang ditandai oleh kata kunci di setiap baris:
Lebih mudah dibaca:
sumber
rem
adalah kata kunci yang terdokumentasi sementara::
hanya detail implementasi. Meskipun tidak mungkin yang::
akan berhenti bekerja, umumnya disarankan untuk tidak mengandalkan perilaku tidak berdokumen.goto :
untuk melompat ke label.:-)
dangoto -)
juga akan bekerja.Substring variabel:
sumber
for %a in ...
) karena mereka tidak memerlukan tanda persentase penutupan seperti halnya variabel lingkungan; Anda harus terlebih dahulu menetapkannya ke variabel lingkungan (menggunakan ekspansi yang tertunda!) dan kemudian mengekstraksi substring.Perintah UNTUK ! Sementara saya benci menulis file batch, saya berterima kasih untuk itu.
akan mengurai setiap baris di myfile.txt, mengabaikan garis yang dimulai dengan titik koma, meneruskan token ke-2 dan ke-3 dari setiap baris ke badan, dengan token yang dibatasi oleh koma dan / atau spasi. Perhatikan referensi pernyataan tubuh% i untuk mendapatkan token ke-2,% j untuk mendapatkan token ke-3, dan% k untuk mendapatkan semua token yang tersisa setelah ke-3.
Anda juga dapat menggunakan ini untuk beralih ke direktori, konten direktori, dll ...
sumber
Daripada membuang sampah skrip dengan REM atau :: lines, saya melakukan hal berikut di bagian atas setiap skrip:
Perhatikan bagaimana Anda dapat menggunakan karakter pipa dan redirection tanpa menghindarinya.
sumber
Path (with drive) di mana skrip berada: ~ dp0
sumber
Sepotong% ~ dp0 telah disebutkan, tetapi sebenarnya ada lebih dari itu: karakter setelah ~ mendefinisikan informasi yang diekstraksi.
Tidak ada huruf yang menghasilkan kembalinya nama file tambalan
d - mengembalikan huruf
p drive - mengembalikan jalur
s - mengembalikan jalur pendek
x - mengembalikan ekstensi file
Jadi jika Anda menjalankan skrip test.bat di bawah ini dari c: \ Temp \ nama dir panjang \ folder,
Anda mendapatkan output berikut
Dan jika suatu parameter diteruskan ke skrip Anda seperti dalam
pengujian c: \ temp \ mysrc \ test.cpp
manipulasi yang sama dapat dilakukan dengan variabel% 1.
Tetapi hasil perluasan% 0 tergantung pada lokasi!
Pada "tingkat atas" dari batch itu diperluas ke nama file batch saat ini.
Dalam suatu fungsi (panggilan), itu mengembang ke nama fungsi.
Outputnya adalah (file batch dimulai dengan myBatch.bat)
sumber
Dengan menggunakan CALL, EXIT / B, SETLOCAL & ENDLOCAL Anda dapat mengimplementasikan subrutin dengan variabel lokal.
contoh:
Ini akan dicetak
meskipun: sub memodifikasi x.
sumber
Trik licik untuk menunggu N detik (bukan bagian dari cmd.exe tetapi bukan perangkat lunak tambahan karena dilengkapi dengan Windows), lihat garis ping. Anda membutuhkan N + 1 ping sejak ping pertama keluar tanpa penundaan.
sumber
Melarikan diri dari "pipa ledeng":
sumber
HEAD^
) bermasalah.Mampu menjalankan perintah dan memproses output (seperti backticks '$ ()' di bash).
Jika ada spasi dalam nama file, gunakan ini:
sumber
Membuat file kosong:
sumber
type nul > filename.ext
untuk itu.ren > blah.txt
Untuk menyembunyikan semua output dari perintah redirect ke> nul 2> & 1.
Misalnya, beberapa program baris perintah menampilkan output bahkan jika Anda mengarahkan ke> nul. Tetapi, jika Anda mengarahkan output seperti baris di bawah ini, semua output akan ditekan.
EDIT: Lihat Mengabaikan output dari perintah untuk penjelasan tentang cara kerjanya.
sumber
taskkill
.Menghentikan eksekusi dan menampilkan prompt berikut:
Berguna jika Anda ingin menjalankan batch dengan mengklik dua kali di Windows Explorer dan ingin benar-benar melihat output daripada hanya sekejap dari jendela perintah.
sumber
echo.|batch-with-pause.bat
akan memiliki efek yang sama dengan menekan 'sembarang tombol' ...Setara dengan bash (dan kerang lainnya)
yang menghasilkan "
Hello
" tanpa baris baru. Peretasan cmd untuk melakukan ini:set /p
adalah cara untuk meminta input dari pengguna. Itu memancarkan string yang diberikan dan kemudian menunggu, (pada baris yang sama, yaitu, tidak ada CRLF), bagi pengguna untuk mengetik respons.<nul
cukup mengirimkan respons kosong keset /p
perintah, sehingga hasil bersih adalah string prompt yang dipancarkan. (Variabel yang digunakan tetap tidak berubah karena respons kosong.)Masalahnya adalah: Tidak mungkin untuk menghasilkan tanda sama dengan yang terdepan, dan pada Vista karakter spasi putih terkemuka dihapus, tetapi tidak pada XP.
sumber
Cari dan ganti ketika mengatur variabel lingkungan:
... menghapus "/" dari tanggal untuk digunakan dalam nama file timestamped.
dan substring juga ...
sumber
Aritmatika bilangan bulat:
sumber
Pemisah perintah:
Pada baris ke-2, perintah setelah && hanya berjalan jika perintah pertama berhasil.
Pada baris ke-3, perintah setelah || hanya berjalan jika perintah pertama gagal.
sumber
Keluarkan baris kosong:
sumber
Anda dapat membuat pernyataan jika mendapatkan efek seperti boolean `dan 'hubungan pendek.
sumber
if foo ( if bar ( baz ) )
(Bayangkan baris baru setelah tanda kurung.)Untuk dengan cepat mengkonversi file teks Unicode (16bit / char) ke file ASCII DOS (8bit / char).
sebagai bonus, jika memungkinkan, karakter dipetakan dengan benar.
sumber
jika struktur blok:
sumber
%ERRORLEVEL%
; itu untuk apaif errorlevel <foo>
. Dan itu sebenarnya bekerja di blok tersebut.Ekspansi variabel yang tertunda (dengan substring dimasukkan untuk mengukur dengan baik):
sumber
Tidak menyediakan banyak fungsionalitas, tetapi Anda dapat menggunakan perintah judul untuk beberapa penggunaan, seperti memberikan status pada skrip panjang di bilah tugas, atau hanya untuk meningkatkan umpan balik pengguna.
sumber
Tidak memiliki editor yang praktis dan perlu membuat file batch?
Cukup ketikkan perintah, tekan enter untuk baris baru. Tekan Ctrl-Z dan Enter untuk menutup file.
sumber
contoh pengurangan string pada
date
dantime
untuk mendapatkan file bernama "YYYY-MM-DD HH: MM: SS.txt"Saya gunakan
color
untuk menunjukkan apakah skrip saya berhasil, gagal, atau butuh input dengan mengubah warna teks dan latar belakang. Ini sangat membantu ketika Anda memiliki beberapa mesin dalam jangkauan pandangan Anda tetapi cukup jauhdi mana X dan Y adalah nilai hex dari
0
keF
, di mana X - background, Y - text, ketika X = Y warna tidak akan berubah.mengubah warna teks menjadi 'Z' dan menetapkan latar belakang hitam, 'warna 0' tidak akan berfungsi
untuk nama panggilan warna
sumber
Kontrol total atas keluaran dengan karakter spasi dan pelarian .:
sumber
TheSoftwareJedi sudah menyebutkan perintah untuk, tapi saya akan menyebutkannya lagi karena sangat kuat.
Output berikut tanggal saat ini dalam format YYYYMMDD, saya menggunakan ini saat membuat direktori untuk cadangan.
sumber