Karena pesan error sering stderr
tidak masuk stdout
.
Ubah permintaan menjadi ini:
taskkill /im "test.exe" /f >nul 2>&1
dan semuanya akan menjadi lebih baik.
Itu berfungsi karena stdout
deskriptor file 1, dan stderr
deskriptor file 2 menurut konvensi. (0 adalah stdin
, kebetulan.) 2>&1
File keluaran deskriptor 2 salinan dari nilai baru 1, yang baru saja dialihkan ke perangkat null.
Sintaks ini (secara longgar) dipinjam dari banyak shell Unix, tetapi Anda harus berhati-hati karena ada perbedaan halus antara sintaks shell dan CMD.EXE.
Pembaruan: Saya tahu OP memahami sifat khusus dari "file" bernama NUL
saya menulis di sini, tetapi pemberi komentar tidak dan jadi biarkan saya ngelantur dengan sedikit lebih detail tentang aspek itu.
Kembali ke rilis MSDOS yang paling awal, nama file tertentu diawali oleh kernel sistem file dan digunakan untuk merujuk ke perangkat. Daftar awal nama yang termasuk NUL
, PRN
, CON
, AUX
dan COM1
melalui COM4
. NUL
adalah perangkat nol. Itu selalu dapat dibuka untuk membaca atau menulis, jumlah berapa pun dapat ditulis di atasnya, dan pembacaan selalu berhasil tetapi tidak mengembalikan data. Yang lainnya termasuk port printer paralel, konsol, dan hingga empat port serial. Pada MSDOS 5, ada beberapa nama yang dicadangkan, tetapi konvensi dasarnya sudah ditetapkan dengan sangat baik.
Ketika Windows dibuat, itu memulai kehidupan sebagai lapisan pengalihan aplikasi yang cukup tipis di atas kernel MSDOS, dan dengan demikian memiliki batasan nama file yang sama. Ketika Windows NT dibuat sebagai sistem operasi yang sebenarnya dengan sendirinya, nama-nama seperti NUL
dan COM1
terlalu banyak diasumsikan berfungsi untuk mengizinkan penghapusannya. Namun, gagasan bahwa perangkat baru akan selalu mendapatkan nama yang akan memblokir pengguna di masa mendatang dari nama-nama itu untuk file sebenarnya jelas tidak masuk akal.
Windows NT dan semua versi berikutnya (2K, XP, 7, dan sekarang 8) semuanya mengikuti menggunakan NT Namespace yang jauh lebih rumit dari kode kernel dan untuk kode ruang pengguna yang dibuat dengan hati-hati dan sangat non-portabel. Di ruang nama itu, driver perangkat terlihat melalui \Device
folder. Untuk mendukung kompatibilitas mundur yang diperlukan, terdapat mekanisme khusus yang menggunakan \DosDevices
folder yang mengimplementasikan daftar nama file yang dicadangkan di folder sistem file apa pun. Kode pengguna dapat menelusuri ruang nama internal ini menggunakan lapisan API di bawah API Win32 biasa; alat yang baik untuk menjelajahi namespace kernel adalah WinObj dari grup SysInternals di Microsoft.
Untuk penjelasan lengkap tentang aturan seputar nama legal file (dan perangkat) di Windows, halaman di MSDN ini akan menjadi informatif dan menakutkan. Aturannya jauh lebih rumit daripada yang seharusnya, dan sebenarnya tidak mungkin untuk menjawab beberapa pertanyaan sederhana seperti "berapa panjang nama jalur legal yang memenuhi syarat sepenuhnya terpanjang?".