เหตุใด cmd จะไม่ออกหลังจากเรียกใช้งานไฟล์แบตช์
ฉันเหนื่อย:
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
และ
@echo off
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
exit
เหตุใด cmd จะไม่ออกหลังจากเรียกใช้งานไฟล์แบตช์
ฉันเหนื่อย:
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
และ
@echo off
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
exit
คำตอบ:
หากแอป Java ไม่ยุติ (เช่นคุณกำลังใช้แบตช์ไฟล์เพื่อเปิดแอป Java) ให้ใช้startคำสั่งเพื่อเปิดใช้งาน: -
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
การดำเนินการนี้จะเรียกใช้แอปพลิเคชัน java และดำเนินการเรียกใช้แบตช์ไฟล์โดยไม่ต้องรอให้แอปพลิเคชัน Java ดำเนินการจนเสร็จสิ้น
คำอธิบาย:
นี่คือวิธีการทำงาน; ไฟล์แบตช์จะถูกประมวลผลทีละหนึ่งบรรทัด แต่ละคำสั่งจะถูกดำเนินการในทางกลับกันและหน่วยประมวลผลชุดรอให้คำสั่งเดียวให้เสร็จสิ้นก่อนที่จะเริ่มต่อไป ปัญหาที่คุณประสบคือแอพพลิเคชั่น Java ที่คุณกำลังเปิดตัว (Jilko.jar) เป็นโปรแกรมแบบเรียงซ้อนซึ่งจะทำงานต่อไปแม้หลังจากบรรทัดที่เปิดตัว หากเป็นเครื่องมือที่ดำเนินการบางอย่างแล้วยุติไฟล์แบตช์จะดำเนินการต่อในคำสั่งถัดไป (หรือออกหากไม่มีอีก) เนื่องจากโปรแกรมยังคงทำงานอยู่ตัวประมวลผลแบบชุดจะรอจนกว่าจะปิดหน้าต่างก่อนที่จะดำเนินการต่อ คุณสามารถเห็นการทำงานนี้โดยออกจากโปรแกรม Java: หน้าต่างคอนโซลพร้อมไฟล์แบตช์แล้วปิด
วิธีการแก้:
สิ่งที่คุณต้องทำเพื่อแก้ไขคือสั่งให้ตัวประมวลผลแบตช์เพื่อเปิดโปรแกรมและดำเนินการต่อโดยไม่ต้องรอ:
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
ในฐานะที่เป็นTerrance กล่าวถึงการ""เป็นชื่อที่จะใช้สำหรับหน้าต่างคอนโซล อย่างไรก็ตามมันเป็นทางเลือกเฉพาะถ้าคำสั่งไม่ได้อยู่ในเครื่องหมายคำพูด; มิฉะนั้นจะถูกต้อง คุณสามารถใส่อะไรลงไปในนั้นได้ถ้าคุณชอบหรือปล่อยว่างไว้ แต่ถ้าคำสั่งนั้นอยู่ในเครื่องหมายคำพูดมันจะต้องปรากฏมิฉะนั้นตัวแปลคำสั่งจะถือว่าคำสั่งที่ยกมาเป็นชื่อเรื่องและเปิดคอนโซลที่เพิ่งรออยู่ สิ่งที่ต้องทำ
คุณสามารถใช้คำสั่งต่อไปนี้แทนได้ แต่เครื่องหมายคำพูดนั้นง่ายกว่าและปลอดภัยกว่าเนื่องจากชื่อย่อจะไม่รับประกันว่าจะเหมือนกันในทุกระบบ
start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar
startคำสั่งในตัวคำสั่งที่ spawns กระบวนการ (พื้นเช่นการเรียกใช้โปรแกรมจากเมนู Start) ดังนั้นสิ่งที่เกิดขึ้นในบริบทนี้คือตัวประมวลผลแบตช์รันstartคำสั่งซึ่งจะรันโปรแกรมที่ระบุและยุติ (ตัวเองไม่ใช่โปรแกรมที่เกิด) ดังนั้นโปรเซสเซอร์แบบแบตช์จะดำเนินต่อไปตามที่คาดไว้ นอกจากนี้ยังมีตัวเลือกบางอย่างที่มีประโยชน์เช่นการเรียกใช้โปรแกรมย่อขนาดเล็กสุด ( /min) หรือขยายใหญ่สุด ( /max) ขยายใหญ่สุดใช้งานในลำดับความสำคัญต่ำ ( /low) และอื่น ๆ ดูstart /?รายละเอียดที่
ฉันได้พบว่าบางโปรแกรมที่ฉันเปิดใช้กระบวนการปล่อยทำงานและหน้าต่างคอนโซลจะไม่ปิดจนกว่าพวกเขาจะยุติหากฉันเพียงแค่เรียกใช้พวกเขาด้วยการเปิดตัวปฏิบัติการ
โปรแกรม START แก้ไขปัญหานั้นได้ แต่ปัญหาเก่า ๆ เกี่ยวกับการเริ่มต้นยังคงอยู่ คุณไม่สามารถใช้เพียง:
START "c:\my dir\myfile.exe"
พารามิเตอร์แรกของ START ยังคงเป็นชื่อหน้าต่าง หากคุณไม่ใช้งานคุณเพียงเปิดกล่องคอนโซล CMD ที่มีหน้าต่างชื่อสิ่งที่คุณพยายามเปิดใช้ ในตัวอย่างข้างต้นตอนนี้ฉันมีหน้าต่างคอนโซลที่มีชื่อหน้าต่างเป็น " c: \ my dir \ myfile.exe " ไม่ใช่สิ่งที่ฉันต้องการ!
หากต้องการละเว้นชื่อหน้าต่างเพียงใช้เครื่องหมายคำพูดคู่เพื่อกำหนดสตริงว่างเช่น:
START "" "c:\my dir\myfile.exe"
สุดท้ายให้จบแบตช์ไฟล์ของคุณด้วยคำสั่ง EXIT เพื่อให้แน่ใจว่ามันปิด
วิธีนี้ดูเหมือนว่าจะทำงานอย่างต่อเนื่องใน Windows 7 และ 8
สำหรับการแก้ไขปัญหาฉันพบว่าการเพิ่ม ECHO ของสิ่งที่ฉันกำลังจะทำจากนั้นระยะเวลาของสิ่งที่ฉันเพิ่งทำจะช่วยได้มาก ตัวอย่างเช่น:
ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5
เนื่องจากการหมดเวลาให้การนับถอยหลังแก่คุณคุณไม่จำเป็นต้อง ECHO ที่คุณกำลังจะล่าช้า
นอกจากนี้ - ใช้ EXIT ตลอดเวลาใน Windows 7 เนื่องจากการไปถึงจุดสิ้นสุดของไฟล์แบตช์ไม่จำเป็นต้องยกเลิกมัน - เช่นเดียวกับใน Windows รุ่นก่อนหน้า Windows 7 อาจมีความไวต่อสิ่งนี้มากกว่า NT รุ่นก่อนหน้า (เช่น Windows 2000 Professional) เรื่องนี้ถูกกล่าวถึงในบางส่วนแต่ไม่ใช่คำตอบก่อนหน้าทั้งหมด
รายละเอียดของประสบการณ์ส่วนตัวเพื่อสนับสนุนคำตอบ:
หลังจากถ่ายโอนการติดตั้ง StarOffice5.2 จาก Windows 2000 ไปเป็น Windows 7 ฉันได้รับข้อผิดพลาดเกี่ยวกับพื้นที่หน่วยความจำเมื่อยกเลิกชุดโปรแกรม เรื่องนี้ไม่เห็นใน Windows 2000
ปีที่แล้วฉันได้เขียนไฟล์แบตช์เพื่อสำรองข้อมูลโดยอัตโนมัติและกู้คืน soffice.ini เพื่ออนุญาตการซ่อมแซมเมื่อเกิดความเสียหาย (มักจะเพียงพอที่จะเป็นปัญหา - ชุดไม่สามารถโหลดได้) การสำรองข้อมูลอัตโนมัติ (ถูกเรียกใช้โดยลิงก์ไปยังไฟล์แบตช์อยู่ใน Office52 \ user \ config \ startup) จะเกิดขึ้นหลังจากผ่านไป 5 วินาทีเท่านั้น ฉันสังเกตว่าเมื่อใดก็ตามที่ฉันออกจากชุดก่อนที่แบตช์ไฟล์จะทำงานการยุติของชุดจะไม่มีข้อผิดพลาด สิ่งนี้ชี้ให้ฉันเห็นปัญหาในแบตช์ไฟล์
หลังจากที่วางคำสั่ง 'EXIT' เป็นบรรทัดสุดท้ายของแบตช์ไฟล์ชุดสำนักงานเริ่มที่จะยกเลิกโดยไม่มีข้อความแสดงข้อผิดพลาดเกี่ยวกับพื้นที่หน่วยความจำตลอดเวลาไม่ว่าจะเป็นไฟล์แบตช์ก็ตาม
เมื่อแอปเสร็จสิ้นก็ควรจะออก คุณแน่ใจหรือไม่ว่าแอป Java กำลังออกอย่างถูกต้อง?
ฉันเพิ่งจะจัดการกับปัญหาเดียวกันและในที่สุดก็แก้ไขตัวเองหลังจากทำสิ่งที่ดูเหมือนการเปลี่ยนแปลงแบบสุ่มไปยังชุดไฟล์ - ฉันไม่เข้าใจว่าทำไม แต่ฉันจะโพสต์ที่นี่ในกรณีที่มันช่วยคนอื่นในภายหลัง
ฉันใช้ประโยชน์จากยูทิลิตี้SysInternals Pskillและยูทิลิตีsleepเนื่องจาก XP Home ไม่ได้รวมฟังก์ชันการใช้คำสั่งมากมายนัก
นี่คือ batchfile ที่ปิดจริงหลังจากเสร็จสิ้น:
@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
หากฉันมีการเปลี่ยนแปลงสองสามบรรทัดสุดท้ายเช่นนี้หน้าต่าง cmd จะยังคงเปิดอยู่จนกระทั่งฉันคลิก 'X' ที่มุม:
start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe && exit
แม้เมื่อฉันพยายามเรียกใช้ pskill เพื่อฆ่าตัวเองกระบวนการ cmd.exe จะหายไปจากตัวจัดการงานและ pskill จะรายงานจากภายในเป็น cmd.exe ว่ากระบวนการ cmd.exe ถูกฆ่า แต่cmd.exeหน้าต่างจะยังคงอยู่จนกว่า ฉันคลิก 'X' ที่มุม:
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
หลังจากที่ฉันเพิ่มเข้าไป&& exitในทุกบรรทัดฉันสังเกตว่าบางคนตอบกลับมาและจะขัดจังหวะการประมวลผลแบบแบทช์ขณะที่คนอื่นไม่ทำ
ดังนั้นฉันเพิ่งวางหนึ่งของการตอบสนองในตอนท้ายแทนที่จะเป็นวิธีที่ฉันมีมันในตอนแรก
อย่างที่ฉันบอกไปฉันไม่รู้ว่าทำไม แต่ดีใจที่มันจบลงด้วย
ลอง:
cmd /c "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
นี่คือวิธีที่ฉันทำ:
สร้างแบตช์ไฟล์ที่มีเนื้อหาดังต่อไปนี้:
java -Xms512M -Xmx512M -jar yourFileName.jar -o true
EXIT
ภายในอินพุตสตรีมออกของคุณให้เพิ่ม:
System.exit(1);
Windows 2003 ไม่มี "บัญชีผู้ใช้" ในแผงควบคุมโดยค่าเริ่มต้น ฉันเขียนแบทช์สั้น ๆ เพื่อเปิดบัญชีผู้ใช้:
@echo off
rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll
exit
ใช้งานได้ดีบัญชีผู้ใช้เปิด แต่หน้าต่าง CMD ยังคงเปิดอยู่เช่นกัน หลังจากการวิจัยที่นี่ฉันเพิ่ม: เริ่มต้น "" ไปที่จุดเริ่มต้นของบรรทัด 2 เช่น:
@echo off
Start "" rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll o
exit
ตอนนี้หน้าต่างบัญชีผู้ใช้จะเปิดขึ้นยังคงเปิดอยู่และหน้าต่าง CMD จะปิดลง ง่าย Peasy
ฉันค้นหาและค้นหาวิธีแก้ไขเพื่อปิดหน้าต่างไฟล์แบตช์เมื่อคำสั่ง EXIT เปิดหน้าต่างทิ้งไว้โดยไม่ทราบสาเหตุ ในที่สุดฉันก็สะดุดกับทางออก
ลบ EXIT ออกจากท้ายไฟล์แบตช์และใช้:
Taskkill /IM conhost.exe /F
ฉันสร้างไฟล์แบ็ตช์การใช้งานเน็ตบนเครื่อง Windows 7 32 บิตและ cmd ของไฟล์แบทช์จะไม่ออกหลังจากทำงาน ฉันเรียกใช้ไฟล์แบตช์เดียวกันในเครื่อง Windows 7 64 บิตเครื่องอื่นและ cmd ของไฟล์แบตช์ออกจากปกติ
ฉันลองใช้คำแนะนำของ Bryanและมันไม่ทำงานบนเครื่อง Windows 7 32 บิตนั้นเพราะไม่มีกระบวนการ conhost.exe ดังนั้นฉันจึงแก้ไขดังต่อไปนี้:
Taskkill /IM cmd.exe /F
ไฟล์ใช้งานชุดสุทธิไม่เคยออกจากปกติและมันแสดงให้เห็น "ยุติงานชุด (Y / N)" ยืนยันแบบสุ่ม
ตามหัวข้อนี้ฉันแก้ไขไฟล์แบตช์ดังนี้:
@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
ไฟล์แบ็ตช์การใช้เน็ตในที่สุดก็ออกจากปกติ
nohupen.wikipedia.org/wiki/Nohup