Parce que les messages d'erreur vont souvent à l' stderr
pas stdout
.
Modifier la invokation à ceci:
taskkill /im "test.exe" /f >nul 2>&1
et tout sera pour le mieux.
Qui fonctionne parce qu' stdout
est le descripteur de fichier 1, et stderr
est le descripteur de fichier 2 de la convention. (0 stdin
, soit dit en passant.) L' 2>&1
des copies du fichier de sortie descripteur de 2 à partir de la nouvelle valeur de 1, qui était tout simplement redirigé vers le périphérique null.
Cette syntaxe est (vaguement) emprunté de nombreux shells Unix, mais vous ne devez être prudent car il existe des différences subtiles entre la syntaxe shell et CMD.EXE.
Mise à jour: je sais que l'OP comprend la nature particulière de la "fichier" named NUL
j'écris ici, mais un intervenant n'a pas et permettez-moi donc de m'éloigne du sujet avec un peu plus de détail sur cet aspect.
Aller tout le chemin du retour vers les premières versions de MS-dos, certains noms de fichier ont été préempté par le système de fichiers du noyau et utilisé pour se référer à des dispositifs. La première liste de ces noms de domaine inclus NUL
, PRN
, CON
, AUX
et COM1
par COM4
. NUL
est le périphérique null. Il peut toujours être ouverts pour la lecture ou l'écriture, tout montant qui peut être écrit sur elle, et se lit toujours réussir, mais de retour pas de données. Les autres comprennent le port d'imprimante parallèle, la console, et jusqu'à quatre ports série. Comme de MS-dos 5, il y avait plusieurs noms réservés, mais la convention de base était très bien établi.
Lorsque Windows a été créé, il a commencé sa vie comme un assez mince de demande de commutation de la couche sur le dessus du noyau MS-dos, et avait donc le même nom de fichier restrictions. Lorsque Windows NT a été créé comme un véritable système d'exploitation dans son propre droit, des noms comme NUL
et COM1
ont été trop largement supposé de travail afin de permettre leur élimination. Cependant, l'idée que les nouveaux appareils seraient toujours obtenir les noms qui pourraient bloquer l'avenir de l'utilisateur de ces noms pour les fichiers réels est manifestement déraisonnable.
Windows NT et toutes les versions qui suivent (2K, XP, 7, et 8) tous suivre l'utilisation de la beaucoup plus élaboré NT de l'espace de Noms de code du noyau et construit avec soin et très non-portable de l'utilisateur de l'espace de code. Dans cet espace de nom, les pilotes de périphérique sont visibles à travers l' \Device
le dossier. À l'appui de la nécessaire compatibilité ascendante, il existe un mécanisme à l'aide de l' \DosDevices
le dossier qui implémente la liste des noms de fichier réservés dans tous les dossier du système de fichiers. Code d'utilisateur peut les sourcils ce nom interne de l'espace à l'aide d'une couche API ci-dessous l'habitude de l'API Win32, un bon outil pour explorer le noyau de l'espace de noms est WinObj de SysInternals group chez Microsoft.
Pour une description complète des règles relatives juridique des noms de fichiers (et les périphériques) dans Windows, cette page MSDN à l'adresse sera à la fois instructif et intimidant. Les règles sont beaucoup plus compliquées que ce qu'ils devraient être, et il est réellement impossible de répondre à quelques questions simples telles que "combien de temps est la plus longue juridique complet du chemin d'accès de nom?".