web-dev-qa-db-fra.com

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

J'ai ce fichier bat et je veux minimiser la fenêtre cmd quand 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 souhaite que la fenêtre de commande soit immédiatement réduite. auriez vous des idées pour faire ça?

34
Matt Elhotiby

Il existe un moyen assez intéressant d'exécuter le script minimisé en le faisant redémarrer lui-même. 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 ça marche

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

  1. IS_MINIMIZED est défini sur 1 : set IS_MINIMIZED=1.
  2. Le script commence une copie de lui-même à l’aide de start command && start "" /min "%~dpnx0" %* où:

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

Pour la copie démarrée du script, la variable IS_MINIMIZED est définie par le script d'origine; elle ignore donc l'exécution de la première ligne et passe directement à la logique du script.

Remarques

  • Vous devez réserver un nom de variable pour l'utiliser comme indicateur.
  • Le script doit être terminé avec 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 pouvez utiliser argument comme indicateur au lieu de variable:

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

55
izzekil

Utilisez la commande start, avec le commutateur /min pour exécuter minimisé. Par exemple:

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

Puisque vous avez spécifié un fichier de commandes comme argument, le processeur de commandes est exécuté en passant le commutateur /k. Cela signifie que la fenêtre restera à l'écran une fois la commande terminée. Vous pouvez modifier ce comportement en exécutant explicitement cmd.exe vous-même et en transmettant les commutateurs appropriés, si nécessaire.

Vous pouvez également créer un raccourci vers le fichier de commandes (les fichiers PIF sont-ils toujours présents), puis modifier ses propriétés pour le réduire au minimum 

38
Cody Gray

Le seul moyen que je connaisse consiste à créer un raccourci Windows vers le fichier de commandes, puis à modifier ses propriétés pour une exécution réduite par défaut.

15
Bruno Silva

À l'aide de PowerShell, vous pouvez réduire le fichier à partir du même fichier sans ouvrir une nouvelle instance.

powershell -window minimized -command ""

De plus, -window hidden et -window normal sont disponibles pour être complètement masqués ou restaurés.


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

3
user1cat

Si vous voulez commencer le lot pour Win-Run/autostart, j'ai trouvé la solution I Nice ici https://www.computerhope.com/issues/ch000932.htm & https://superuser.com/ questions/364799/comment-exécuter-la-commande-invite-minimisée

cmd.exe /c start /min myfile.bat ^& exit
  • le cmd.exe est nécessaire car start est une commande windows qui ne peut être exécutée en dehors d'un lot
  • /c = quitter une fois le départ terminé
  • la partie ^& exit garantit que la fenêtre se ferme même si le lot ne se termine pas par exit

Cependant, la cmd initiale n'est toujours pas minimisée.

3
Pedi T.

Un autre outil tiers gratuit capable de minimiser la fenêtre de la console à tout moment (pas seulement au démarrage du script) est Tcl avec l'extension TWAPI:

echo package require twapi;twapi::minimize_window [twapi::get_console_window] | tclkitsh -

ici tclkitsh.exe est dans le chemin PATH et est l’un des fichiers tclkit-cli-*-twapi-*.exe téléchargeables à partir de sourceforge.net/projects/twapi/files/Tcl binaires/Tclkits avec TWAPI/ . Je le préfère au min.exe beaucoup plus léger mentionné dans la réponse de Bernard Chen parce que j'utilise déjà TWAPI pour d'innombrables autres usages.

1
robert4

Si vous tapez ce texte dans votre fichier bat:

start blah.exe /min

Il minimisera immédiatement dès qu’il ouvrira le programme. Vous n'en verrez qu'un bref éclair et il disparaîtra.

1
Kyroflash

Une option consiste à rechercher l'un des divers utilitaires pouvant modifier l'état de la fenêtre de la fenêtre de la console en cours d'exécution et de l'appeler à partir du script batch.

Vous pouvez l'exécuter comme la première chose dans votre script batch. Voici deux de ces outils:

min.exe http://www.paulsadowski.com/wsh/cmdprogs.htm

cmdow http://www.commandline.co.uk/cmdow/index.html

1
Bernard Chen

Vous pouvez réduire l'invite de commande pendant l'exécution, mais vous aurez besoin de deux scripts supplémentaires: windowMode et getCmdPid.bat :

@echo off

call getCmdPid
call windowMode -pid %errorlevel% -mode minimized

cd /d C:\leads\ssh 
call C:\Ruby192\bin\setrbvars.bat
Ruby C:\leads\ssh\put_leads.rb
0
npocmaka

Une autre option qui me convient est d’utiliser ConEmu, voir http://conemu.github.io/en/ConEmuArgs.html

"C:\Program Files\ConEmu\ConEmu64.exe" -min -run myfile.bat
0
Pedi T.

Une façon de "minimiser" la fenêtre de commande est de réduire la taille de la console en utilisant quelque chose comme ...

echo DO NOT CLOSE THIS WINDOW
MODE CON COLS=30 LINES=2

Vous pouvez réduire le nombre de cols à environ 18 et le nombre de lignes à 1 si vous le souhaitez ... L’avantage est qu’il fonctionne sous WinPE, 32 bits ou 64 bits, et ne nécessite aucun utilitaire tiers.

0
SSi

Je ne sais pas s'il existe un moyen de minimiser une fenêtre à partir d'une invite de commande une fois ouverte, mais l'article suivant suggère de créer votre propre processus en tant qu'enfant dans une nouvelle fenêtre pré-minimisée.

http://www.pcreview.co.uk/forums/command-Prompt-tool-minimize-command-window-after-starts-t2037434.html

0
Mr Griever

Vous pouvez essayer d'exécuter un script comme suit

var WindowStyle_Hidden = 0
var objShell = WScript.CreateObject("WScript.Shell")
var result = objShell.Run("cmd.exe /c setrbvars.bat", WindowStyle_Hidden)

enregistrer le fichier sous le nom de fichier.js

0
PatchedUp