Da Fehlermeldungen gehen oft stderrnicht stdout.
Ändern Sie den Aufruf in:
taskkill /im "test.exe" /f >nul 2>&1
und alles wird besser.
Das funktioniert, weil stdoutes sich um Dateideskriptor 1 und stderrgemäß Konvention um Dateideskriptor 2 handelt. (0 ist stdinübrigens.) Der 2>&1kopiert den Ausgabedateideskriptor 2 vom neuen Wert 1, der gerade auf das Nullgerät umgeleitet wurde.
Diese Syntax ist (lose) von vielen Unix-Shells entlehnt, aber Sie müssen vorsichtig sein, da es subtile Unterschiede zwischen der Shell-Syntax und CMD.EXE gibt.
Update: Ich weiß , dass die OP versteht den besonderen Charakter der „Datei“ genannt NULIch bin hier zu schreiben, aber ein Kommentator nicht und so lassen Sie mich auf diesen Aspekt mit ein wenig mehr Details abzuschweifen.
Zurück zu den frühesten Versionen von MSDOS wurden bestimmte Dateinamen vom Dateisystemkernel vorbelegt und verwendet, um auf Geräte zu verweisen. Die früheste Liste der Namen enthalten NUL, PRN, CON, AUXund COM1durch COM4. NUList das Nullgerät. Es kann immer zum Lesen oder Schreiben geöffnet werden, es kann ein beliebiger Betrag darauf geschrieben werden, und Lesevorgänge sind immer erfolgreich, geben jedoch keine Daten zurück. Zu den anderen gehören der parallele Druckeranschluss, die Konsole und bis zu vier serielle Anschlüsse. Ab MSDOS 5 gab es mehrere reservierte Namen, aber die Grundkonvention war sehr gut etabliert.
Als Windows erstellt wurde, begann es als ziemlich dünne Anwendungswechselschicht über dem MSDOS-Kernel und hatte daher dieselben Dateinamenbeschränkungen. Als Windows NT als eigenständiges echtes Betriebssystem erstellt wurde, wurde angenommen , dass Namen wie NULund COM1zu weit verbreitet sind, um ihre Beseitigung zu ermöglichen. Die Idee, dass neue Geräte immer Namen erhalten, die zukünftige Benutzer dieser Namen für tatsächliche Dateien blockieren, ist jedoch offensichtlich unvernünftig.
Windows NT und alle folgenden Versionen (2K, XP, 7 und jetzt 8) verwenden den viel ausgefeilteren NT-Namespace aus dem Kernel-Code und sorgfältig konstruierten und höchst nicht portierbaren Benutzerbereichscodes. In diesem Namensraum sind Gerätetreiber im \DeviceOrdner sichtbar . Um die erforderliche Abwärtskompatibilität zu unterstützen, gibt es einen speziellen Mechanismus, der den \DosDevicesOrdner verwendet, der die Liste der reservierten Dateinamen in einem beliebigen Dateisystemordner implementiert. Benutzercode kann diesen internen Namensraum mithilfe einer API-Ebene unterhalb der üblichen Win32-API durchsuchen. Ein gutes Tool zum Erkunden des Kernel-Namespace ist WinObj von der SysInternals-Gruppe bei Microsoft.
Eine vollständige Beschreibung der Regeln für legale Namen von Dateien (und Geräten) in Windows finden Sie auf dieser Seite von MSDN sowohl informativ als auch entmutigend. Die Regeln sind viel komplizierter als sie sein sollten, und es ist tatsächlich unmöglich, einige einfache Fragen zu beantworten, wie z. B. "Wie lange ist der längste legale, vollständig qualifizierte Pfadname?".