La fenêtre CMD ne se fermera pas si le dossier est fermé pendant l'exécution du fichier bat

17

J'ai une machine virtuelle 64 bits Server 2012 R2 Standard qui agit étrangement. Les fichiers Bat fonctionnent correctement et la fenêtre CMD se ferme normalement; mais si le dossier contenant le fichier bat est fermé pendant l'exécution du fichier bat, il se terminera mais la fenêtre CMD ne se fermera pas. J'ai simplifié cela au point d'avoir le fichier bat le plus simple possible. Il contient 1 ligne. pause

  1. Ouvrez le dossier contenant le fichier bat avec l'Explorateur Windows
  2. Démarrez le fichier bat en double-cliquant dessus
  3. Fermez la fenêtre de l'Explorateur Windows
  4. Appuyez sur n'importe quelle touche dans la fenêtre CMD
  5. Le curseur passe à la ligne suivante lorsque le fichier bat est terminé
  6. La fenêtre CMD reste

Cela ne se produit que sur une seule machine. Est-ce que quelqu'un sait pourquoi cela pourrait être? C'est une machine virtuelle de test et devrait peut-être juste être reconstruite, mais elle m'intéresse. Merci

J'ai remplacé mon simple fichier bat par un contenant les éléments suivants:

@assoc .bat
@for /F "tokens=1,* delims==" %%G in ('assoc .bat') do @ftype %%H
@reg query "HKLM\Software\Microsoft\Command Processor" /v AutoRun 2>NUL
@reg query "HKCU\Software\Microsoft\Command Processor" /v AutoRun 2>NUL
@wmic process where "caption = 'cmd.exe'" get CommandLine, ParentProcessId,     ProcessID
@echo please close Windows Explorer before continuing
@pause
@wmic process where "caption = 'cmd.exe'" get CommandLine, ParentProcessId,     ProcessID
@pause

Les résultats sont présentés ci-dessous:

.bat=batfile
batfile="%1" %*



CommandLine                                      ParentProcessId  ProcessId
C:\Windows\system32\cmd.exe /c ""D:\test.bat" "  1608             8460

please close Windows Explorer before continuing
Press any key to continue . . .
CommandLine                                      ParentProcessId  ProcessId
C:\Windows\system32\cmd.exe /c ""D:\test.bat" "  1608             8460

Press any key to continue . . .

Ligne de commande

13/04/2016 J'ai découvert un peu plus en regardant le Gestionnaire des tâches en faisant cela. Lorsque je démarre le fichier bat 2 lignes apparaissent dans le Gestionnaire des tâches - fenêtre Détails ... 1 pour cmd.exe et 1 pour conhost.exe. Lorsque la chauve-souris termine cmd.exe disparaît, mais conhost.exe reste. Une autre chose que j'ai remarquée est que vous n'avez pas vraiment à quitter le dossier de l'Explorateur Windows comme je l'ai dit précédemment ... tout ce que vous avez à faire est de cliquer n'importe où dans la fenêtre de l'Explorateur. Si je ne clique nulle part dans la fenêtre de l'Explorateur, la fenêtre CMD pour le fichier bat se ferme normalement et les deux tâches disparaissent de la fenêtre de détails comme nous nous y attendions.

RGuggisberg
la source
2
Malheureusement, je ne peux pas aider. Mais je dois vous compléter en fournissant une question bien écrite qui décrit précisément votre problème, je souhaite que plus de premières affiches prennent le temps d'écrire une question bien écrite comme celle-ci. Bien sûr, je ne peux pas reproduire le comportement sur ma machine Win 10. Et puisque vous ne voyez le comportement que sur une machine spécifique, il peut être difficile pour quiconque de diagnostiquer ce qui se passe.
dbenham
Merci @dbenham. Je respecte vos connaissances et la sagesse que vous produisez sur SO sous la balise batch-file. Je suis donc une première affiche ici sur Super User mais je sais ce que vous voulez dire sur les nouvelles affiches. Oui, je suis d'accord qu'il est peu probable que quelqu'un puisse dupliquer ... en espérant peut-être que quelqu'un d'autre ait rencontré cela. C'est juste une machine virtuelle de test, donc ce n'est pas critique. Je voudrais juste savoir ce que c'est au cas où cela arriverait sur la machine d'un client.
RGuggisberg
1
@RGuggisberg - Assurez-vous de fusionner vos comptes afin de pouvoir modifier vos propres questions. Vous n'avez pas à ajouter d'indications que vous avez modifié votre question, le système le fait pour vous, complètement inutile.
Ramhound
1
J'ai également eu le même problème sur l'une de mes machines virtuelles, comme solution de contournement, j'ai explicitement mentionné la exitcommande pour fermer la fenêtre CMD. Peut-être que cela pourrait aider.
manjesh23
1
Avez-vous essayé la fonction Analyser la chaîne d'attente de Resource Monitor pour déterminer sur quelle application le processus ConHost.exe attend?
Xtremity

Réponses:

1

C'est peu probable, mais vous semblez avoir exclu toutes les choses probables. Vérifiez les deux entrées de registre suivantes pour voir si elles contiennent quelque chose:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

ou

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

Tout ce qui s'y trouve sera appelé à chaque fois que vous exécutez un fichier de commandes, et s'il a cmd /kcela, cela provoquerait ce problème.

Argonautes
la source
Merci ... ce n'est pas ça non plus. Ce n'est qu'une machine de test, donc je n'essaie plus de le comprendre.
RGuggisberg
0

Avez-vous essayé cela?

@echo off
rem some code
pause
cls
exit

Mêmes choses, mais autorise la même chose que la pause et quitte par lui-même.

Aussi, pourquoi mettez-vous le @ devant tout? Pourquoi ne pas simplement utiliser @echo off avant le reste des commandes?

qq410219243
la source
Oui .. déjà essayé ça. Convenez de la @ préface. C'est généralement ce que je fais. Peu importe pour cela. Il y avait probablement cela là pour certains tests initiaux pour voir les commandes.
RGuggisberg