Bởi vì thông báo lỗi thường đi đến stderr
khôngstdout
.
Thay đổi lời mời này:
taskkill /im "test.exe" /f >nul 2>&1
và tất cả sẽ tốt hơn
Điều đó hoạt động vì stdout
là mô tả tệp 1, và stderr
là mô tả tệp 2 theo quy ước. (0 là stdin
, tình cờ.) Bộ 2>&1
mô tả tệp đầu ra sao chép 2 từ giá trị mới là 1, vừa được chuyển hướng đến thiết bị null.
Cú pháp này (lỏng lẻo) được mượn từ nhiều shell Unix, nhưng bạn phải cẩn thận vì có sự khác biệt tinh tế giữa cú pháp shell và CMD.EXE.
Cập nhật: Tôi biết OP hiểu bản chất đặc biệt của "tệp" có tên NUL
tôi đang viết ở đây, nhưng một người bình luận đã không và vì vậy hãy để tôi lạc đề với một chi tiết nhỏ hơn về khía cạnh đó.
Quay trở lại các bản phát hành sớm nhất của MSDOS, một số tên tệp nhất định đã được nhân hệ thống tệp ưu tiên và sử dụng để chỉ các thiết bị. Danh sách sớm nhất của những tên bao gồm NUL
, PRN
, CON
, AUX
và COM1
thông qua COM4
.NUL
là thiết bị null. Nó luôn có thể được mở để đọc hoặc viết, bất kỳ số tiền nào cũng có thể được ghi trên đó và đọc luôn thành công nhưng không trả lại dữ liệu. Những cái khác bao gồm cổng máy in song song, bàn điều khiển và tối đa bốn cổng nối tiếp. Kể từ MSDOS 5, có một vài cái tên được bảo lưu nhiều hơn, nhưng quy ước cơ bản đã được thiết lập rất tốt.
Khi Windows được tạo, nó bắt đầu cuộc sống như một lớp chuyển đổi ứng dụng khá mỏng bên trên hạt nhân MSDOS, và do đó có cùng các hạn chế tên tệp. Khi Windows NT được tạo ra như một hệ điều hành thực sự theo đúng nghĩa của nó, các tên như NUL
và COM1
được cho là quá rộng rãi để hoạt động để cho phép loại bỏ chúng. Tuy nhiên, ý tưởng rằng các thiết bị mới sẽ luôn nhận được các tên sẽ chặn người dùng tương lai của các tên đó cho các tệp thực tế rõ ràng là không hợp lý.
Windows NT và tất cả các phiên bản tiếp theo (2K, XP, 7 và bây giờ 8) đều sử dụng Không gian tên NT phức tạp hơn nhiều từ mã hạt nhân và mã không gian người dùng được xây dựng cẩn thận và không di động. Trong không gian tên đó, trình điều khiển thiết bị được hiển thị thông qua \Device
thư mục. Để hỗ trợ khả năng tương thích ngược yêu cầu, có một cơ chế đặc biệt sử dụng \DosDevices
thư mục thực hiện danh sách các tên tệp dành riêng trong bất kỳ thư mục hệ thống tệp nào. Mã người dùng có thể duyệt không gian tên nội bộ này bằng cách sử dụng lớp API bên dưới API Win32 thông thường; một công cụ tốt để khám phá không gian tên kernel là WinObj từ nhóm SysIternals tại Microsoft.
Để có một mô tả đầy đủ về các quy tắc xung quanh tên hợp pháp của các tệp (và thiết bị) trong Windows, trang này tại MSDN sẽ vừa mang tính thông tin vừa gây nản lòng. Các quy tắc là một nhiều hơn phức tạp hơn những gì họ nên được, và nó thực sự là không thể trả lời một số câu hỏi đơn giản như "là hợp pháp tên đường dẫn đầy đủ nhất? Bao lâu".