74 votes

Comment minimiser l'invite de commande à partir de mon fichier bat ?

J'ai ce fichier bat et je veux minimiser la fenêtre cmd lorsque je l'exécute :

@echo off
cd /d C:\leads\ssh 
call C:\Ruby192\bin\setrbvars.bat
ruby C:\leads\ssh\put_leads.rb

En gros, je veux que la fenêtre de commande soit réduite immédiatement. Avez-vous une idée de la façon de procéder ?

119voto

izzekil Points 156

Il existe un moyen assez intéressant d'exécuter script minimisé en le faisant redémarrer lui-même minimisé. Voici le code à mettre au début de votre script :

if not DEFINED IS_MINIMIZED set IS_MINIMIZED=1 && start "" /min "%~dpnx0" %* && exit
... script logic here ...
exit

Comment cela fonctionne

Lorsque le script est en cours d'exécution IS_MINIMIZED n'est pas défini ( if not DEFINED IS_MINIMIZED ) donc :

  1. IS_MINIMIZED est réglé sur 1 : set IS_MINIMIZED=1 .
  2. Le script démarre une copie de lui-même à l'aide de commencer commande && start "" /min "%~dpnx0" %* où :

    1. "" - titre vide pour la fenêtre.
    2. /min - pour fonctionner en mode réduit.
    3. "%~dpnx0" - le chemin complet de votre script.
    4. %* - en passant par tous les paramètres de votre script.
  3. Puis le script initial termine son travail : && exit .

Pour la copie démarrée de la variable script IS_MINIMIZED est défini par le script original, donc il saute juste l'exécution de la première ligne et va directement à la logique du script.

Remarques

  • Vous devez réserver un nom de variable pour l'utiliser comme indicateur.
  • Le script doit être terminé par exit sinon la fenêtre cmd ne serait pas fermée après l'exécution du script.
  • Si votre script n'accepte pas les arguments, vous pourriez utiliser argument comme un drapeau au lieu de variable :

    if "%1" == "" start "" /min "%~dpnx0" MY_FLAG && exit ou plus court if "%1" == "" start "" /min "%~f0" MY_FLAG && exit

2 votes

Ajouter "not", eq, -> si non DEFINI

0 votes

Merci de l'avoir remarqué. Une vraie coquille !

1 votes

Merci, elle est bonne ! Je voulais tuer un processus lorsque l'utilisateur se connecte, donc j'ai déposé une batte comme celle-ci dans le dossier Startup sans être trop intrusif.

57voto

Cody Gray Points 102261

Utilisez le start avec la commande /min pour fonctionner en mode réduit. Par exemple :

start /min C:\Ruby192\bin\setrbvars.bat

Puisque vous avez spécifié un fichier de traitement par lots comme argument, le processeur de commande est exécuté, en passant la commande /k interrupteur. Cela signifie que la fenêtre restera à l'écran après la fin de la commande. Vous pouvez modifier ce comportement en exécutant explicitement cmd.exe vous-même et en passant les interrupteurs appropriés si nécessaire.

Vous pouvez également créer un raccourci vers le fichier batch (les fichiers PIF existent-ils encore), puis modifier ses propriétés pour qu'il démarre en mode réduit.

0 votes

J'ai essayé cela et cela cache la fenêtre cmd mais cela ne lance pas la ligne suivante ruby. C:\leads\ssh\put_leads.rb

0 votes

@Tamer : Non, bien sûr que non. Elle n'exécute que la commande spécifiée en argument de la fonction start commande. Placez toutes les commandes à l'intérieur du fichier batch, ou appelez start plusieurs fois.

1 votes

Malheureusement, je ne peux pas faire cela avec une tâche planifiée. Les tâches planifiées ne semblent pas reconnaître le "start" comme une commande valide.

26voto

Bruno Silva Points 2406

Le seul moyen que je connaisse est de créer un raccourci Windows vers le fichier batch, puis de modifier ses propriétés pour qu'il soit exécuté en mode réduit par défaut.

5 votes

C'était beaucoup plus facile que prévu.

1 votes

Je suis d'accord avec le commentaire de dennis. comme on dit, "keep it simple sam". pas besoin de code, pas de problème.

23voto

user1cat Points 91

En utilisant PowerShell, vous pouvez minimiser à partir du même fichier sans ouvrir une nouvelle instance.

powershell -window minimized -command ""

Aussi -window hidden y -window normal est disponible pour masquer complètement ou restaurer.


source : https://stackoverflow.com/a/45061676/1178975

0 votes

Retards d'introduction de Powershell. Une idée pour le rendre plus rapide ?

0 votes

Oh wow, la fenêtre cachée est incroyable ! On ne peut pas faire ça avec un raccourci Windows.

8voto

Pedi T. Points 184

Si vous voulez lancer le lot pour Win-Run / autostart, j'ai trouvé une solution intéressante ici. https://www.computerhope.com/issues/ch000932.htm & https://superuser.com/questions/364799/how-to-run-the-command-prompt-minimized

cmd.exe /c start /min myfile.bat ^& exit
  • le site cmd.exe est nécessaire car il n'existe pas de commande Windows qui puisse être exécutée en dehors d'un lot.
  • /c = sortie après la fin du démarrage
  • le site ^& exit permet de s'assurer que la fenêtre se ferme même si le lot ne se termine pas par exit

Cependant, le cmd initial n'est toujours pas minimisé.

2 votes

La seule façon qui a fonctionné pour moi de lancer un fichier batch minimisé via le planificateur de tâches de Windows.

1 votes

Comme l'a dit @BusinessTomcat, c'est le seul qui semble fonctionner correctement. Merci !

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