คุณจะรอ exe ในไฟล์แบตช์ได้อย่างไร


43

ฉันพยายามสร้างสคริปต์เพื่อเรียกใช้ exe เมื่อปิดเครื่องเพื่อติดตั้ง sp1 สคริปต์ของฉันมีลักษณะคล้ายกับ (ไม่ใช่สคริปต์ค้างคาวจริง)

If installed GOTO END
    Install.exe
END:

ปัญหาของฉันคือเมื่อมันทำงานมันจะเริ่มตัวติดตั้งจากนั้นก็เสร็จสคริปต์เพราะตัวติดตั้งเป็นกระบวนการที่แตกต่างกันและติดตามโดยการปิดกระบวนการติดตั้งเพราะคอมพิวเตอร์ของการปิดและปิดระบบ (อย่างน้อยนั่นคือสิ่งที่ฉันคิด มันกำลังทำ.)

มีวิธีใดที่จะบอกให้รอจนกระทั่งกระบวนการเริ่มต้นเสร็จสมบูรณ์แล้วจึงปิดเครื่อง?

คำตอบ:


81

ลองวิ่ง

START /WAIT Install.exe

ทำได้ดีมากกับคำตอบนี้!
l

คุณโยงโซ่ได้ไหม like start /wait install; exit?
Serj Sagan

คุณสามารถทำได้cmd /C start /wait install
graywolf

ถ้าคุณต้องการรอกระบวนการที่ไฟล์แบตช์ไม่เริ่ม
Kyle Delaney

23

หนึ่งวิธีที่สั้นกว่า:

Install.exe|more

ด้วย

install|rem

สามารถใช้ได้แม้ว่าจะมีมากขึ้นในที่สุดคุณจะสามารถจับเอาท์พุทของคอนโซลได้ และนี่คือเหตุผลที่ทำงาน - คำสั่ง piped รออินพุตจนกว่า. exe จะเสร็จสิ้น


และทำไม downlvote คืออะไร?
npocmaka

มันยอดเยี่ยมมาก! ฉันโหวตให้คุณ
Changwang Zhang

2
นี้ชนะอย่างชัดเจน
Fnord

จะทำอย่างไรถ้า exe ใช้พารามิเตอร์? มันจะทำงานอย่างไร
m4l490n

@ m4l490n - มันจะใช้ได้ เปลี่ยนเส้นทางและการดำเนินการตามเงื่อนไขที่ผู้ประกอบการมีความสำคัญสูงในสคริปต์ชุด ( <, >, >>, &, &&, ||, |)
npocmaka

13

การเรียกใช้ exe โดยตรงจากไฟล์แบตช์หรือการใช้start /waitจะใช้ได้ แต่มีข้อแม้

หาก exe ที่คุณโทรสร้างกระบวนการอื่น ๆ เช่นการเรียก exe อื่นแล้วออกจากไฟล์แบตช์จะดำเนินการต่อหลังจากที่ exe ที่เรียกว่าสิ้นสุดลงเนื่องจากไม่มีความรู้เกี่ยวกับกระบวนการอื่น ๆ ที่เริ่มต้นขึ้น

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


คุณสามารถเพิ่มการวนซ้ำลงในรูทีนการปิดระบบเพื่อตรวจสอบว่า msiexec.exe (หรืออะไรก็ตามที่มันเป็น) กำลังทำงานอยู่จากนั้นรอและวนซ้ำอีกครั้ง
mfinni

@mfinni เพียงแค่ทำให้เรื่องซับซ้อนยิ่งขึ้นไปอีกก็msiexecมักจะดับกระบวนการอื่นเช่นกัน :(
John Gardeniers

1
ที่จริงแล้วทำไมคุณถึงต้องการstart /waitอะไร? ฉันเองเชื่อว่าจำเป็นต้องใช้start /waitเพื่อบล็อกไฟล์แบตช์จนกว่าแอปพลิเคชัน GUI (ตรงข้ามกับคอนโซล) จะเสร็จสิ้น แต่การทดสอบตอนนี้ฉันเห็นว่าไฟล์แบตช์จริง ๆ แล้วรอแม้แต่แอปพลิเคชัน GUI ฉันโพสต์คำถามที่เกี่ยวข้อง: ทำไมแอปพลิเคชัน GUI บล็อกไฟล์แบตช์
Martin Prikryl

ฉันมีปัญหานี้เพิ่มคำตอบของฉันเป็นคำตอบ
FreeSoftwareServers

5

นี่คือตัวอย่างการใช้ MATLAB! ฉันได้สันนิษฐานว่าการตั้งค่าพา ธ สำหรับ MATLAB เสร็จสิ้นแล้วและการออกจาก MATLAB นั้นได้รับการรับรองโดยไฟล์ FileName.m (หรือผู้ใช้ระบุไว้ภายใน)

echo off
matlab -nosplash /r "FileName.m"
:loop
tasklist /fi "imagename eq MATLAB.exe" |find ":" > nul
if errorlevel 1 goto loop
exit

2
สมมติว่า Matlab ดูแปลกสำหรับฉันโดยเฉพาะที่นี่ในเซิร์ฟเวอร์ผิดพลาด
Erik

สิ่งนี้สามารถทำงานได้กับสิ่งอื่นนอกเหนือจาก MATLAB เพียงแค่เปลี่ยน "MATLAB.exe" เป็นอย่างอื่น และอาจแก้ไขที่สอง 'ค้นหา' เพื่อค้นหา exe อีกครั้งในผลลัพธ์ที่กรองแล้ว
Oliver Bock

1

ฉันมีปัญหา @John Gardeniers มีหรืออธิบายไว้ซึ่ง exe ของฉันเรียกอีกอย่างว่า exe และยกเลิกดังนั้นจึงไม่สามารถเริ่ม / รอได้ ฉันสร้าง "while loop" เพื่อตรวจสอบว่ามันทำงานหรือไม่ เวลาสามารถปรับแต่งให้เหมาะกับความต้องการของคุณ

TIMEOUT /T 60

SETLOCAL EnableExtensions
set EXE=MYEXETOCHECK.exe
:LOOPSTART
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
goto FIN
:FOUND
TIMEOUT /T 30
goto LOOPSTART
:FIN

0

คุณสามารถใช้คำสั่งเริ่มต้น / รอ สิ่งนี้จะเริ่มต้นแอปพลิเคชันและรอให้โปรแกรมสิ้นสุด

หรือถ้าคุณรู้วิธีการที่จะใช้เวลานานในการดำเนินการที่คุณสามารถดูที่คำสั่งการนอนหลับให้โดยWindows Server 2003 ทรัพยากร Kit เครื่องมือ คุณสามารถใช้ Sleep.exe เพื่อหยุดชุดงานของคุณชั่วคราวไม่กี่วินาทีเพื่อให้โปรแกรมติดตั้งได้อย่างสมบูรณ์ก่อนที่แฟ้มชุดงานจะดำเนินการเพื่อติดตั้งอย่างอื่น มีบางโปรแกรมที่ละเว้นไวยากรณ์ "เริ่มต้น / รอ" เนื่องจากโปรแกรมตัวเองเปิดตัวกระบวนการอื่นดังนั้น sleep.exe จึงมีประโยชน์มาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.