Hata iletileri genellikle gitmek Çünkü stderr
değil stdout
.
Çağrıyı şuna değiştirin:
taskkill /im "test.exe" /f >nul 2>&1
ve her şey daha iyi olacak.
Bu işe yarar çünkü stdout
dosya tanımlayıcısı 1'dir ve stderr
geleneksel olarak dosya tanımlayıcısı 2'dir. (0 stdin
, tesadüfen.) 2>&1
Çıktı dosyası tanımlayıcısı 2'yi yeni 1 değerinden kopyalar, bu da boş aygıta yeniden yönlendirilir.
Bu sözdizimi (gevşek bir şekilde) birçok Unix kabuğundan ödünç alınmıştır, ancak kabuk sözdizimi ile CMD.EXE arasında ince farklar olduğu için dikkatli olmanız gerekir.
Güncelleme: OP'nin NUL
buraya yazdığım "dosyanın" özel doğasını anladığını biliyorum , ancak bir yorumcu bunu anlamadı ve bu yüzden konuya biraz daha ayrıntılı olarak girmeme izin verin.
MSDOS'un en eski sürümlerine kadar geri gidersek, belirli dosya adları dosya sistemi çekirdeği tarafından önceliklendirildi ve aygıtlara atıfta bulunmak için kullanıldı. Bu isimlerden en erken listesi dahil NUL
, PRN
, CON
, AUX
ve COM1
içinden COM4
. NUL
boş cihazdır. Okuma veya yazma için her zaman açılabilir, üzerine herhangi bir miktar yazılabilir ve her zaman başarılı okur ancak veri döndürmez. Diğerleri arasında paralel yazıcı bağlantı noktası, konsol ve dört adede kadar seri bağlantı noktası bulunur. MSDOS 5 itibariyle, birkaç tane daha ayrılmış isim vardı, ancak temel kural çok iyi oluşturulmuştu.
Windows oluşturulduğunda, MSDOS çekirdeğinin üzerinde oldukça ince bir uygulama geçiş katmanı olarak hayata başladı ve bu nedenle aynı dosya adı kısıtlamalarına sahipti. Windows NT kendi başına gerçek bir işletim sistemi olarak yaratıldığında, benzer isimler NUL
ve COM1
bunların ortadan kaldırılmasına izin vermeyecek kadar geniş çapta çalıştığı varsayılıyordu. Bununla birlikte, yeni cihazların her zaman gerçek dosyalar için bu adların gelecekteki kullanıcılarını engelleyecek isimler alacağı fikri açıkçası mantıksızdır.
Windows NT ve takip eden tüm sürümler (2K, XP, 7 ve şimdi 8) , çekirdek kodundan ve dikkatlice oluşturulmuş ve oldukça taşınabilir olmayan kullanıcı alanı kodundan çok daha ayrıntılı NT Ad Alanı kullanır . Bu ad alanında, aygıt sürücüleri \Device
klasörden görülebilir . Geriye dönük uyumluluğu desteklemek için \DosDevices
, herhangi bir dosya sistemi klasöründe ayrılmış dosya adlarının listesini uygulayan klasörü kullanan özel bir mekanizma vardır . Kullanıcı kodu, normal Win32 API'sinin altındaki bir API katmanı kullanarak bu dahili ad alanına göz atabilir; Kernel ad alanını keşfetmek için iyi bir araç , Microsoft'taki SysInternals grubundan WinObj'dir .
Windows'taki dosyaların (ve cihazların) yasal adlarını çevreleyen kuralların tam bir açıklaması için, MSDN'deki bu sayfa hem bilgilendirici hem de ürkütücü olacaktır. Kurallar olması gerekenden çok daha karmaşıktır ve "en uzun yasal tam nitelikli yol adı ne kadar uzun?" Gibi bazı basit soruları yanıtlamak aslında imkansızdır.