113 votes

Supprimer la sortie de ligne de commande

J'ai un fichier batch simple comme ceci:

Écho off

taskkill / im "test.exe" / f> nul

pause

Si "test.exe" n'est pas en cours d'exécution, je reçois le message suivant:

ERREUR: le processus "test.exe" est introuvable.

Pourquoi ce message d'erreur s'affiche-t-il, même si j'ai redirigé la sortie vers NUL?

Comment puis-je supprimer cette sortie?

202voto

RBerteig Points 23331

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?".

0voto

yoman Points 2

Vous pouvez aussi faire cela à la place:

 tasklist | find /I "test.exe" > nul && taskkill /f /im test.exe > nul
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X