batファイルの実行中にフォルダーが閉じられた場合、CMDウィンドウは閉じません


17

奇妙な動作をしているServer 2012 R2 Standard 64ビット仮想マシンがあります。Batファイルは正常に機能し、CMDウィンドウは正常に閉じます。ただし、batファイルの実行中にbatファイルを含むフォルダーが閉じられると終了しますが、CMDウィンドウは閉じません。これを単純化して、可能な限り単純なbatファイルを作成しました。1行が含まれています。一時停止

  1. Windowsエクスプローラーでbatファイルを含むフォルダーを開きます
  2. batファイルをダブルクリックして開始します
  3. Windowsエクスプローラーウィンドウを閉じる
  4. CMDウィンドウで任意のキーを押します
  5. batファイルが終了すると、カーソルは次の行に移動します
  6. CMDウィンドウが残る

これは1台のマシンでのみ発生します。なぜこれが起こるのか誰にも分かりますか?これはテストVMであり、再構築する必要があるかもしれませんが、興味があります。ありがとう

単純なbatファイルを次のものを含むファイルに置き換えました。

@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

結果は以下のとおりです。

.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 . . .

コマンドライン

04/13/2016これを行う際にタスクマネージャーを見ると、もう少しわかりました。batファイルを起動すると、タスクマネージャー-詳細ウィンドウに2行が表示されます... cmd.exeに1行、conhost.exeに1行。バットが終了すると、cmd.exeは消えますが、conhost.exeは残ります。もう1つ気づいたのは、前述のようにWindowsエクスプローラーフォルダーを終了する必要がないことです。エクスプローラーウィンドウの任意の場所をクリックするだけです。Explorerウィンドウのどこもクリックしなかった場合、batファイルのCMDウィンドウは通常通り閉じ、期待どおりに両方のタスクが詳細ウィンドウから消えます。


2
残念ながら私は仕方がありません。しかし、私はあなたの問題を正確に説明するよく書かれた質問を提供することであなたを補足しなければなりません。もちろん、Win 10マシンで動作を再現することはできません。また、特定の1台のマシンでしか動作を確認できないため、誰が何が起こっているのかを診断することは困難です。
-dbenham

ありがとう@dbenham。私はあなたの知識と、バッチファイルタグの下であなたがSOに注ぐ知恵を尊重します。スーパーユーザーに関する初めてのポスターですが、新しいポスターについてはどういう意味ですか。はい、誰かが複製できる可能性は低いことに同意します...他の誰かがこれに遭遇したかもしれないことを願っています。これは単なるテストVMであるため、重要ではありません。顧客のマシンでこれが発生した場合に備えて、それが何であるかを知りたいだけです。
RGuggisberg

1
@RGuggisberg-自分の質問を編集できるように、必ずアカウントをマージしてください。質問を編集した表示を追加する必要はありません。システムがそれを行うので、まったく不要です。
ラムハウンド

1
回避策としてexit、CMDウィンドウを閉じるコマンドを明示的に述べたため、VMの1つでも同じ問題が発生しました。これが役立つかもしれません。
manjesh23

1
ConMonitor.exeプロセスが待機しているアプリケーションを判断するために、リソースモニターの待機チェーンの分析機能を試しましたか?
Xtremity

回答:


1

これはまずありませんが、可能性のあるすべてのことを除外しているようです。次の2つのレジストリエントリをチェックして、何かが含まれているかどうかを確認します。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

または

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor

バッチファイルを実行するたびに、そこにあるものが呼び出されます。バッチファイルがcmd /kある場合、この動作が発生します。


ありがとう...それもそうではありません。これは単なるテストマシンであるため、もう理解しようとはしていません。
RGuggisberg

0

これを試しましたか?

@echo off
rem some code
pause
cls
exit

同じことですが、一時停止と同じことを許可し、それ自体で終了します。

また、なぜすべての前に@を付けるのですか?残りのコマンドの前に@echo offを使用しないのはなぜですか?


はい。すでにそれを試しました。@序文に同意します。通常、それは私がしていることです。これは重要ではありません。おそらく、コマンドを見るための初期テストのためにそこにあったでしょう。
RGuggisberg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.