128 votes

Comment fermer automatiquement la fenêtre cmd après l'exécution du fichier batch ?

J'exécute un fichier batch qui contient ces deux lignes :

start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"
"C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow

Ce fichier batch est utilisé pour exécuter l'application Xming, puis l'application PuTTY, afin de me connecter en SSH au laboratoire informatique de mon université.

Cependant, si j'exécute cette opération et que Xming n'est pas déjà ouvert, une fois que je quitte le terminal PuTTY, la fenêtre cmd reste ouverte. Ce n'est que si j'ai déjà lancé Xming que la fenêtre cmd se ferme lorsque je ferme le terminal PuTTY. J'ai essayé d'ajouter exit à la dernière ligne du fichier batch, mais en vain.

174voto

Ahmad Points 3152

Modifiez le fichier batch pour START les deux programmes, au lieu de START l'un et l'autre CALL un autre

start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"
start "" "C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow

Si vous l'exécutez de cette manière, aucune fenêtre CMD ne restera ouverte après le démarrage du programme.

42voto

Adrian747 Points 329

Normalement, vous terminez un fichier batch par une ligne qui dit simplement exit . Si vous voulez vous assurer que le fichier a été exécuté et que la fenêtre DOS se ferme au bout de 2 secondes, vous pouvez ajouter les lignes :

timeout 2 >nul
exit

Mais le exit ne fonctionnera pas si votre fichier batch ouvre une autre fenêtre, car tant que la seconde fenêtre sera ouverte, l'ancienne fenêtre DOS sera également affichée.

SOLUTION : Par exemple, il existe un excellent petit programme gratuit appelé BgInfo qui affichera toutes les informations sur votre ordinateur. En supposant qu'il se trouve dans un répertoire appelé C:\BgInfo pour l'exécuter à partir d'un fichier batch avec l'option /popup et pour fermer la fenêtre DOS alors qu'elle est toujours en cours d'exécution, utilisez :

start "" "C:\BgInfo\BgInfo.exe" /popup
exit

10voto

Jenna Leaf Points 11

Si vous voulez séparer les commandes en une seule commande par fichier, vous pouvez le faire

cmd /c start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"

et dans l'autre fichier, vous pouvez faire

cmd /c start "" "C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow

La commande cmd /c permet de fermer la fenêtre d'invite de commande après l'exécution de l'exe.

10voto

It Wasn't Me Points 477

Pour fermer la fenêtre cmd actuelle en cours, il suffit de l'ajouter comme dernière commande/ligne :

move nul 2>&0

Essayez de bouger nul vers nulle part et rediriger le stderr a stdin aura pour résultat que le courant la fenêtre cmd.exe est fermée

Ceci est différent de fermeture d'une chauve-souris ou en le quittant en utilisant goto :EOF o Exit /b

J'ai même ouvert une question pour trouver une réponse qui expliquerait le comportement. Est-ce que ce serait un bug ? Fermeture immédiate de la fenêtre cmd courante lors de l'exécution de : move nul 2>&0

2voto

treacle Points 39

Vous pourriez essayer le quelque peu dangereux : taskkill /IM cmd.exe dangereux parce que cela va tuer la commande ouverte et toutes les commandes ouvertes avant elle.

Ou ajoutez une vérification pour confirmer que vous avez le bon cmd.exe et ensuite le tuer via PID, comme ceci :

set loc=%time%%random%
title=%loc%
for /f "tokens=2 delims= " %%A in ('tasklist /v ^| findstr /i "%loc%"') do (taskkill /PID %%A) 

Substitut (pslist &&A) o (tasklist /FI "PID eq %%A") pour le (taskkill /PID %%A) si vous voulez le vérifier d'abord (et peut-être avoir pstools installé).

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