Comment puis-je rendre un script Windows batch complètement silencieux?
il y a eu des variantes de cette question posée depuis des générations, mais malgré l'écriture de scripts Windows assez compliqués, Je n'arrive pas à trouver comment les faire réellement silencieux.
voici un extrait d'un de mes scripts actuels:
@ECHO OFF
SET scriptDirectory=%~dp0
COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat
FOR /F %%f IN ('dir /B "%scriptDirectory%*.noext"') DO (
del "%scriptDirectory%%%f"
)
ECHO
Le résultat de cela est la suivante:
C:Temp> test.bat
1 file(s) copied.
File Not Found
Echo is off.
C:Temp>
alors que le "1 fichier(s) copié (s)."est juste ennuyeux, le" fichier non trouvé " fait penser à l'utilisateur que quelque chose a mal tourné (ce qu'il n'a pas - pas de fichiers est très bien).
5 réponses
pour supprimer la sortie, utilisez la redirection vers NUL
.
il existe deux types de sortie que les commandes de la console utilisent:
sortie standard, ou
stdout
,erreur type, ou
stderr
.
De deux, stdout
est utilisé plus souvent, à la fois par des commandes internes, comme copy
, et par console utilitaires, ou externe commandes, comme find
et autres, ainsi que par programmes de console tiers.
>NUL
supprime la sortie standard et fonctionne très bien, par exemple pour supprimer le 1 file(s) copied.
message copy
la commande. Une autre syntaxe est 1>NUL
. Donc,
COPY file1 file2 >NUL
ou
COPY file1 file2 1>NUL
ou
>NUL COPY file1 file2
ou
1>NUL COPY file1 file2
supprime tous COPY
est la sortie standard.
Pour supprimer les messages d'erreur, qui sont généralement imprimés stderr
, utilisez 2>NUL
à la place. Donc, pour supprimer un File Not Found
message DEL
imprime quand, bien, le fichier spécifié n'est pas trouvé, il suffit d'ajouter 2>NUL
soit au début ou à la fin de la ligne de commande:
DEL file 2>NUL
ou
2>NUL DEL file
Bien que parfois, il peut être une meilleure idée de vérifier si le fichier existe avant d'essayer de le supprimer, comme vous le faites dans votre propre solution. Notez, cependant, que vous n'avez pas besoin de supprimer les fichiers un par un, à l'aide d'une boucle. Vous pouvez utiliser un seul commande pour supprimer le lot:
IF EXIST "%scriptDirectory%*.noext" DEL "%scriptDirectory%*.noext"
si vous voulez que toute la sortie normale de votre script Batch soit silencieuse( comme dans votre exemple), la meilleure façon de le faire est d'exécuter le fichier Batch avec une redirection:
C:\Temp> test.bat >nul
cette méthode ne nécessite pas de modifier une seule ligne dans le script et elle affiche toujours des messages d'erreur à l'écran. De suppression la sortie, y compris les messages d'erreur:
C:\Temp> test.bat >nul 2>&1
si votre script a des lignes qui produisent une sortie que vous voulez voir apparaître à l'écran, peut-être il est plus simple d'ajouter une redirection vers ceux lineas au lieu de toutes les lignes que vous voulez garder le silence:
@ECHO OFF
SET scriptDirectory=%~dp0
COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat
FOR /F %%f IN ('dir /B "%scriptDirectory%*.noext"') DO (
del "%scriptDirectory%%%f"
)
ECHO
REM Next line DO appear in the screen
ECHO Script completed >con
Antonio
il suffit d'ajouter un >NUL
à la fin des lignes qui produisent les messages.
Par exemple,
COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >NUL
vous pouvez rediriger stdout vers nul
pour le cacher.
COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >nul
il suffit d'ajouter >nul
aux commandes dont vous voulez masquer la sortie.
Ici vous pouvez voir toutes les différentes façons de les rediriger le flux std.
Copie un répertoire nommé html & tout son contenu vers un répertoire de destination en mode silencieux. Si le répertoire de destination n'est pas présent, il va encore créer.
@echo off
TITLE Copy Folder with Contents
set SOURCE=C:\labs
set DESTINATION=C:\Users\MyUser\Desktop\html
xcopy %SOURCE%\html\* %DESTINATION%\* /s /e /i /Y >NUL
/ S copie les répertoires et les sous-répertoires, sauf ceux qui sont vides.
/ f copie les répertoires et les sous-répertoires, y compris les répertoires vides . Identique à /s / E. Peut être utilisé pour modifier / T.
/ I si la destination n'existe pas et copier plus d'un fichier, suppose que la destination doit être un répertoire.
- /Y Supprime la demande de confirmation de remplacement de un fichier de destination existant.