หน้าต่าง CMD จะไม่ปิดหากโฟลเดอร์ถูกปิดระหว่างการประมวลผลไฟล์ bat


17

ฉันมีเครื่องเสมือน Server 2012 R2 Standard 64 บิตที่ทำหน้าที่แปลก ไฟล์ Bat ทำงานได้ดีและหน้าต่าง CMD ปิดตามปกติ แต่ถ้าโฟลเดอร์ที่มีไฟล์ bat ถูกปิดระหว่างการทำงานของไฟล์ bat มันจะเสร็จสิ้น แต่หน้าต่าง CMD จะไม่ปิด ฉันทำให้สิ่งนี้ง่ายขึ้นจนถึงจุดที่มีไฟล์ bat ที่เป็นไปได้ง่ายที่สุด มันมี 1 บรรทัด หยุด

  1. เปิดโฟลเดอร์ที่มีไฟล์ bat ด้วย Windows Explorer
  2. เริ่มต้นไฟล์ bat โดยดับเบิลคลิกที่ไฟล์
  3. ปิดหน้าต่าง Windows Explorer
  4. กดปุ่มใด ๆ ในหน้าต่าง CMD
  5. เคอร์เซอร์ย้ายไปที่บรรทัดถัดไปเมื่อไฟล์ bat เสร็จสิ้น
  6. หน้าต่าง CMD ยังคงอยู่

สิ่งนี้เกิดขึ้นในเครื่องเดียวเท่านั้น มีใครรู้บ้างไหมว่าทำไมถึงเป็นเช่นนั้น มันคือการทดสอบ 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 ฉันหาข้อมูลเพิ่มขึ้นอีกนิดโดยดูที่ Task Manager ขณะทำสิ่งนี้ เมื่อฉันเริ่มต้นไฟล์ค้างคาว 2 บรรทัดปรากฏขึ้นในหน้าต่างตัวจัดการงาน - รายละเอียด ... 1 สำหรับ cmd.exe และ 1 สำหรับ conhost.exe เมื่อค้างคาวเสร็จสิ้น cmd.exe จะหายไป แต่ conhost.exe ยังคงอยู่ สิ่งหนึ่งที่ฉันสังเกตเห็นคือคุณไม่จำเป็นต้องออกจากโฟลเดอร์ Windows Explorer ตามที่ระบุไว้ก่อนหน้านี้ ... สิ่งที่คุณต้องทำคือคลิกที่ใดก็ได้ในหน้าต่าง Explorer หากฉันไม่คลิกที่ใดก็ได้ในหน้าต่าง Explorer หน้าต่าง CMD สำหรับไฟล์ bat จะปิดลงตามปกติและทั้งสองงานจะหายไปจากหน้าต่างรายละเอียดตามที่เราคาดหวัง


2
น่าเสียดายที่ฉันไม่สามารถช่วยได้ แต่ฉันต้องเติมเต็มคุณในการให้คำถามที่เป็นลายลักษณ์อักษรที่อธิบายปัญหาของคุณได้อย่างแม่นยำฉันหวังว่าผู้โพสต์ครั้งแรกจะใช้เวลาในการเขียนคำถามที่เขียนได้ดีเช่นนี้ แน่นอนฉันไม่สามารถทำซ้ำพฤติกรรมบนเครื่อง Win 10 ของฉัน และเนื่องจากคุณเห็นพฤติกรรมในเครื่องหนึ่ง ๆ เท่านั้นมันอาจเป็นเรื่องยากสำหรับทุกคนที่จะวินิจฉัยว่าเกิดอะไรขึ้น
dbenham

ขอบคุณ @ dbenham ฉันเคารพความรู้และภูมิปัญญาที่คุณแจกจ่ายให้กับ SO ภายใต้แท็กแบตช์ไฟล์ ฉันเป็นผู้โพสต์ครั้งแรกที่นี่ใน Super User แต่ฉันรู้ว่าคุณหมายถึงอะไรเกี่ยวกับผู้โพสต์ใหม่ ใช่ฉันยอมรับว่าไม่น่าจะมีใครสามารถทำซ้ำ ... เพียงแค่หวังว่าบางคนอาจเคยเจอสิ่งนี้ มันเป็นเพียงการทดสอบ VM ดังนั้นมันจึงไม่สำคัญ อยากรู้ว่ามันเกิดอะไรขึ้นกับเครื่องจักรของลูกค้า
RGuggisberg

1
@RGuggisberg - ให้แน่ใจว่าคุณรวมบัญชีของคุณเพื่อให้คุณสามารถแก้ไขคำถามของคุณเอง คุณไม่จำเป็นต้องเพิ่มสิ่งบ่งชี้ที่คุณแก้ไขคำถามของคุณระบบทำเพื่อคุณโดยไม่จำเป็นอย่างสมบูรณ์
Ramhound

1
ฉันยังมีปัญหาเดียวกันกับหนึ่งใน VM ของฉันเป็นวิธีแก้ปัญหาฉันได้กล่าวถึงexitคำสั่งอย่างชัดเจนเพื่อปิดหน้าต่าง CMD อาจเป็นสิ่งนี้อาจช่วย
manjesh23

1
คุณได้ลองใช้คุณสมบัติวิเคราะห์ลูกโซ่รอของการตรวจสอบทรัพยากรเพื่อตรวจสอบแอปพลิเคชันที่กระบวนการ ConHost.exe กำลังรออยู่หรือไม่
Xtremity

คำตอบ:


1

สิ่งนี้ไม่น่าเป็นไปได้ แต่ดูเหมือนว่าคุณได้กำจัดสิ่งที่น่าจะเป็นไปได้ทั้งหมด ตรวจสอบรายการรีจิสตรีสองรายการต่อไปนี้เพื่อดูว่ามีรายการอะไรบ้าง:

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.