2010-09-25 04:19:24 +0000 2010-09-25 04:19:24 +0000
25
25

Pourquoi le cmd ne sortira-t-il pas après l'exécution du fichier de lots ?

Pourquoi le cmd ne sortira-t-il pas après l'exécution du fichier de lots ?

J'ai essayé :

"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

et

@echo off
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
exit

Réponses (11)

31
31
31
2010-09-25 07:28:36 +0000

Si l'application Java ne se termine pas (par exemple, vous utilisez le fichier batch pour lancer l'application Java), alors utilisez la commande start pour la lancer :

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

Cela lancera l'application java et continuera à exécuter le fichier batch sans attendre que l'application java se termine.

20
20
20
2012-01-26 01:17:52 +0000

Explication:

Voici comment cela fonctionne ; un fichier batch est traité une ligne à la fois. Chaque commande est exécutée à tour de rôle et le processeur de traitement par lots attend qu'une commande se termine avant de commencer la suivante. Le problème que vous rencontrez est que l'application Java que vous lancez (Jilko.jar) est un programme fenêtré qui continue à s'exécuter même après la ligne qui le lance. S'il s'agissait d'un outil qui exécute une action puis se termine, le fichier batch continuerait à la commande suivante (ou se terminerait s'il n'y en a plus). Comme le programme est toujours en cours d'exécution, le processeur batch attend que la fenêtre soit fermée avant de passer à la suite. Vous pouvez le voir en action en quittant le programme Java : la fenêtre de la console avec le fichier batch se ferme alors.

Solution:

Ce que vous devez faire pour le corriger, c'est demander au processeur batch de lancer le programme et de continuer sans attendre :

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

Comme Terrance l'a mentionné , le "" est le titre à utiliser pour la fenêtre de la console. Cependant, il n'est optionnel que si la commande n'est pas entre guillemets ; sinon, il est requis. Vous pouvez y mettre quelque chose si vous le souhaitez ou le laisser vide, mais si la commande est entre guillemets, elle doit être présente, sinon l'interpréteur de la commande considérera la commande citée comme le titre et ouvrira une console qui restera là à attendre que quelque chose soit fait.

Vous pouvez utiliser la commande suivante à la place, mais les guillemets sont juste plus faciles et plus sûrs puisque les noms courts ne sont pas garantis d'être les mêmes sur tous les systèmes.

start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar

La commande start est une commande intégrée qui engendre un processus (en gros, comme l'exécution d'un programme à partir du menu Démarrer). Dans ce contexte, le processeur batch exécute la commande start qui, à son tour, exécute le programme spécifié et se termine (lui-même, et non le programme généré). Ainsi, le traitement par lots continue comme prévu. Il dispose également de certaines options qui peuvent être utiles, comme l'exécution du programme en mode minimisé (/min) ou maximisé (/max), l'exécution en mode basse priorité (/low) et ainsi de suite. Voir start /? pour plus de détails.

7
7
7
2013-05-15 23:43:30 +0000

J'ai constaté que certains des programmes que je lance laissent des processus en cours, et la fenêtre de la console ne se fermera pas avant qu'ils ne se terminent si je les exécute simplement en lançant l'exécutable.

Le programme START corrige cela, mais le vieux problème de START est toujours là. Vous ne pouvez pas vous contenter d'utiliser :

START "c:\my dir\myfile.exe"

Le premier paramètre de START est toujours le nom de la fenêtre. Si vous l'omettez, vous ouvrez simplement une console CMD avec la fenêtre nommée, quelle que soit la fenêtre que vous avez essayé de lancer. Dans l'exemple ci-dessus, j'aurais maintenant une fenêtre de console avec le titre de fenêtre “c:\my dir\myfile.exe”. Ce n'est pas ce que je voulais !

Pour omettre le nom de la fenêtre, il suffit d'utiliser une paire de guillemets doubles pour définir une chaîne vide, telle que :

START "" "c:\my dir\myfile.exe"

Enfin, terminez votre fichier batch par une commande EXIT pour vous assurer qu'il se ferme.

Cette méthode semble fonctionner de manière cohérente sous Windows 7 et 8.

Pour le dépannage, je trouve que l'ajout d'un ECHO de ce que je m'apprête à faire, puis d'un TIMEOUT de ce que je viens de faire, aide beaucoup. Par exemple :

ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5

Puisque le Timeout vous donne un compte à rebours, vous n'avez pas besoin de l'ECHO que vous êtes sur le point de retarder.

5
5
5
2012-01-26 00:59:18 +0000

Aussi – utilisez EXIT à tout moment, sous Windows 7, car le simple fait d'arriver à la fin du fichier de lots ne le termine pas nécessairement – comme dans les versions antérieures de Windows. Windows 7 peut être plus sensible à cela que les versions NT antérieures (par exemple Windows 2000 Professionnel). Cela a été mentionné dans certaines mais pas toutes des réponses précédentes.

Détails de l'expérience personnelle pour étayer la réponse :

Après avoir transféré une installation de StarOffice5.2 de Windows 2000 à Windows 7, j'ai eu des erreurs d'espace mémoire en terminant la suite. Cela ne se voyait pas dans Windows 2000.

Il y a des années, j'avais écrit des fichiers batch pour sauvegarder et restaurer automatiquement soffice.ini, afin de permettre une réparation lorsqu'il devient corrompu (assez souvent pour être un problème – la suite ne se charge pas). La sauvegarde automatique (déclenchée par un lien vers le fichier batch, placé dans Office52\user\config\startup) ne se produit cependant qu'après un délai de 5 secondes environ. J'ai remarqué qu'à chaque fois que je sortais de la suite juste avant l'exécution du fichier batch, l'arrêt de la suite se faisait sans erreur. Cela m'a fait remarquer un problème dans les fichiers batch.

Après que la commande “EXIT” ait été placée en dernière ligne des fichiers batch, la suite bureautique a commencé à se terminer sans message d'erreur d'espace mémoire, à tout moment, que les fichiers batch aient été exécutés ou non.

2
2
2
2010-11-06 03:27:04 +0000

J'étais juste confronté au même problème, et il s'est finalement résolu après avoir fait ce qui semblait être des modifications aléatoires au fichier de lots - je ne comprends pas pourquoi mais je vais le poster ici au cas où cela aiderait quelqu'un d'autre plus tard.

J'utilise l'utilitaire SysInternals Pskill et l'utilitaire sleep puisque XP Home ne comporte pas beaucoup de fonctionnalités en ligne de commande.


Il s'agit du fichier de lots qui se ferme effectivement après avoir terminé :

@echo off
start /min C:\Progra~1\PsTools\pskill.exe explorer.exe
start /min C:\Progra~1\PsTools\pskill.exe Powermenu.exe
start /min C:\Progra~1\PsTools\pskill.exe PWGen.exe
start /min C:\Progra~1\PsTools\pskill.exe redshiftgui.exe
start /min C:\Progra~1\PsTools\pskill.exe clipx.exe
sleep 2
start explorer.exe
sleep 3
start C:\Progra~1\ClipX\clipx.exe
sleep 1
start C:\Progra~1\Powermenu\PowerMenu.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
start C:\Progra~1\RedshiftGUI\redshiftgui.exe && exit
  • *

Si je changeais les dernières lignes comme ceci, la fenêtre cmd resterait ouverte jusqu'à ce que je clique sur le “X” dans le coin :

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe && exit
  • *

Même si j'essayais d'invoquer pskill pour qu'il se tue, le processus cmd.exe disparaîtrait du gestionnaire des tâches, et pskill ferait son rapport depuis l'intérieur de son cmd. exe que le processus cmd.exe avait été tué, mais la fenêtre cmd.exe restait ouverte jusqu'à ce que je clique sur le “X” dans le coin :

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
C:\Progra~1\PsTools\pskill.exe cmd.exe

Après avoir ajouté && exit à chaque ligne, j'ai remarqué que certains y répondaient et interrompaient le traitement par lots - alors que d'autres ne le faisaient pas.

Donc j'ai juste mis une des réponses à la fin au lieu de la ligne que j'avais à l'origine.

Comme je l'ai dit, je ne sais pas pourquoi, mais je suis content que ce soit terminé.

2
2
2
2010-09-25 04:29:25 +0000

Une fois l'application terminée, elle devrait être sortie. Êtes-vous sûr que l'application Java se termine correctement ?

1
1
1
2010-09-25 04:51:34 +0000

essayer :

cmd /c "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

0
0
0
2015-10-16 12:53:17 +0000

Windows 2003 n'a pas de “Comptes d'utilisateurs” dans le panneau de configuration par défaut. J'ai écrit un petit lot pour ouvrir des comptes d'utilisateurs :

@echo off  
rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll  
exit

Ça a bien fonctionné, les comptes d'utilisateurs se sont ouverts, mais la fenêtre CMD est restée ouverte elle aussi. Après quelques recherches ici, j'ai ajouté : START “” au début de la ligne 2 comme ça :

@echo off  
Start "" rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll o
exit

Maintenant la fenêtre des comptes d'utilisateurs s'ouvre, reste ouverte et la fenêtre CMD se ferme. Easy Peasy.

0
0
0
2016-01-01 06:06:20 +0000

J'ai cherché et cherché une solution pour fermer la fenêtre d'un fichier batch lorsque la commande EXIT laisse la fenêtre ouverte pour une raison inconnue. Je suis finalement tombé sur une solution.

Enlever EXIT de la fin du fichier de lot et utiliser :

Taskkill /IM conhost.exe /F
0
0
0
2016-07-15 10:37:30 +0000

J'ai créé un fichier batch d'utilisation nette sur une machine Windows 7 32 bits et le cmd du fichier batch ne se ferme pas après exécution. J'exécute le même fichier de lot sur une autre machine Windows 7 64 bits et le CD du fichier de lot se termine normalement.

J'ai essayé suggestion de Bryan et cela ne fonctionne pas sur cette machine Windows 7 32 bits parce qu'il n'y avait pas de processus conhost.exe, alors je l'ai modifié comme suit :

Taskkill /IM cmd.exe /F

Le fichier batch d'utilisation nette ne se termine pas toujours normalement et il affiche la confirmation “Terminate batch job (O/N)” aléatoirement.

Selon ce fil J'ai modifié le fichier batch comme suit :

@echo off

if "%~1"=="-FIXED_CTRL_C" (
   REM Remove the -FIXED_CTRL_C parameter
   SHIFT
) ELSE (
   REM Run the batch with <NUL and -FIXED_CTRL_C
   CALL <NUL %0 -FIXED_CTRL_C %*
   GOTO :EOF
)

net use \Server\folder

Taskkill /IM cmd.exe /F

Le fichier batch d'utilisation nette éventuellement se termine normalement.

0
0
0
2014-06-21 17:43:16 +0000

Voici comment je l'ai fait :

  1. créer un fichier de lot avec le contenu suivant

  2. Dans votre flux d'entrée de sortie, ajoutez :