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?
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
Lorsque le script est en cours d'exécution, IS_MINIMIZED
n'est pas défini (if not DEFINED IS_MINIMIZED
), ainsi:
set IS_MINIMIZED=1
.Le script commence une copie de lui-même à l’aide de start command && start "" /min "%~dpnx0" %*
où:
""
- titre vide pour la fenêtre./min
- passe en mode minimisé."%~dpnx0"
- chemin complet de votre script.%*
- en passant par tous les paramètres de votre script.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.
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
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
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.
À 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.
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
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é^& 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.
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.
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.
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:
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
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
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.
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.
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