ฉันสามารถวางคำสั่งอะไรไว้ท้ายไฟล์แบตช์เพื่อป้องกันการปิดคอนโซลอัตโนมัติหลังจากเรียกใช้งานไฟล์ได้หรือไม่
ฉันสามารถวางคำสั่งอะไรไว้ท้ายไฟล์แบตช์เพื่อป้องกันการปิดคอนโซลอัตโนมัติหลังจากเรียกใช้งานไฟล์ได้หรือไม่
คำตอบ:
ในไฟล์แบตช์ Windows / DOS:
pause
นี่พิมพ์"Press any key to continue . . . "
ข้อความที่ดี
หรือถ้าคุณไม่ต้องการ"Press any key to continue . . ."
ข้อความให้ทำสิ่งนี้แทน:
pause >nul
ขึ้นอยู่กับคำถามที่แน่นอน!
โดยปกติpause
จะทำงานภายในไฟล์. bat
หากคุณต้องการให้cmd.exeไม่สามารถปิดการพิมพ์ให้ใช้cmd /k
คำสั่งที่ท้ายไฟล์
cmd /k
คำสั่งของคุณแทน & cmd /k
จะไม่ทำงาน
หากคุณต้องการให้ cmd.exe ไม่ปิดและสามารถพิมพ์ต่อไปได้ให้ใช้
cmd /k
เพิ่งรู้สึกว่าจำเป็นต้องชี้แจงสิ่งที่/k
ไม่ (จากเว็บไซต์ windows):
/k
: ดำเนินการคำสั่งที่ระบุโดยสตริงและดำเนินการต่อ
ดังนั้นcmd /k
หากไม่มีคำสั่งติดตามที่ท้ายไฟล์ bat จะcmd.exe
เปิดหน้าต่างค้างไว้เพื่อใช้ต่อไป
ในอีกทางหนึ่งpause
ในตอนท้ายของไฟล์แบทช์ก็จะหยุดกระบวนการและหยุดcmd.exe
ในการกดปุ่มแรก
วิธีด้านล่างของการมีคำสั่งในไฟล์แบตช์จะเปิดหน้าต่างพร้อมรับคำสั่งใหม่และหน้าต่างใหม่จะไม่ออกโดยอัตโนมัติ
start "title" call abcd.exe param1 param2
start "title" call xyz.exe param1 param2
หากคุณใช้Mavenและคุณต้องการข้ามการพิมพ์และป้องกันไม่ให้คอนโซลเข้ามาใกล้เพื่อดูผลลัพธ์ที่คุณต้องใช้CALL
คำสั่งในสคริปต์นอกเหนือจาก 'mvn clean install'
เช่นนี้จะปิดคอนโซล
ECHO This is the wrong exemple
mvn clean install
pause
เช่นนี้คอนโซลจะยังคงเปิดอยู่
ECHO This is the right exemple
CALL mvn clean install
pause
หากคุณไม่ใช้CALL
คำสั่งตัวอย่างที่ผ่านมาจะไม่ทำงาน
call <myCommand>
แก้ไขปัญหานี้ทำให้การแจ้งเตือนของฉันหยุดลงหลังจากการดำเนินการครั้งแรก
เพิ่มcmd.exe
เป็นบรรทัดใหม่ด้านล่างรหัสที่คุณต้องการดำเนินการ:
c:\Python27\python D:\code\simple_http_server.py
cmd.exe
python script.py %1 && cmd
วิธีของฉันคือการเขียนแบทช์จริง (พูดว่า "foo.bat") เพื่อให้งานเสร็จ; จากนั้นสร้าง "start.bat" อื่น:
@echo off
cmd /k foo.bat
ฉันพบว่าสิ่งนี้มีประโยชน์อย่างยิ่งเมื่อฉันตั้งค่าตัวแปรสภาพแวดล้อมแบบครั้งเดียว
cmd /k
(ไม่มีคำสั่งใด ๆ ) ที่ส่วนท้ายของfoo.bat
ไฟล์และเรียกใช้ คุณไม่ต้องการstart.bat
ไฟล์แยกต่างหาก
โทรcmd
ที่ท้ายไฟล์แบตช์
นอกจาก pause
นี้
set /p=
สามารถใช้งานได้มันจะคาดว่าอินพุตของผู้ใช้และจะปล่อยโฟลว์เมื่อกดถูกป้อน
หรือ
runas /user:# "" >nul 2>&1
ซึ่งจะทำเช่นเดียวกันยกเว้นสิ่งใดจากอินพุตของผู้ใช้จะถูกแสดงและจะยังคงอยู่ในประวัติคำสั่ง
ความเป็นไปได้ที่ 1: สร้างไฟล์. bat เพียง 2 ไฟล์แล้วเขียนลงในไฟล์แรก:
start <filename> // name of 2nd batch file
exit
ไฟล์แบทช์ 2 เป็นไฟล์ที่จะไม่ปิดท้าย ดังนั้นเมื่อคุณเปิดแบทช์ nr.1 มันจะเริ่มต้นที่ 2 และปิดบังตัวเอง เมื่อเสร็จสิ้นครั้งที่ 2 มันจะไม่ปิดลงอย่างสมบูรณ์ (ตราบใดที่คุณไม่ต้องออกทางออกในตอนท้าย)
ความเป็นไปได้ที่ 2: ไฟล์แบตช์ 1:
call <filename>
cls
echo End of file
pause
<any code you want>
เมื่อไฟล์ที่ 2 สิ้นสุดลงไฟล์นั้นจะไปยังไฟล์ 1 อีกครั้งและส่งออกส่วนที่เหลือของไฟล์ โดยที่คุณสามารถสร้างตัวจัดการข้อผิดพลาดได้ หาก nr.1 ขัดข้องมันจะเข้าสู่ nr.2 และแสดง
แฮ็คตัวเล็กนี้ขอให้ผู้ใช้ป้อนรหัสและเก็บไว้ในตัวแปร% exitkey% (ตัวแปรนี้สามารถเรียกได้ว่าอะไรก็ได้ที่คุณชอบ)
set /p exitkey= "Press any key to continue..."
หมายเหตุ: ช่องว่างหลังจาก '=' นั้นสำคัญมาก
pause
หรือ
echo text to display
pause>nul
ฉันรู้ว่าฉันมาช้า แต่วิธีที่ฉันชอบคือ:
:programend
pause>nul
GOTO programend
ด้วยวิธีนี้ผู้ใช้ไม่สามารถออกโดยใช้ Enter
มีปัญหากับคำตอบที่นี่ดังนั้นฉันจึงได้สิ่งนี้ซึ่งเหมาะกับฉัน (TM):
cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause
มีสองวิธีที่จะทำมันขึ้นอยู่กับกรณีการใช้งาน
1) ถ้าคุณต้องการให้พรอมต์ Windows cmd เปิดอยู่เพื่อให้คุณเห็นผลการดำเนินการและปิดหลังจากนั้น ใช้
pause
2) ถ้าคุณต้องการให้ Windows cmd prompt เปิดอยู่และให้คุณสามารถรันคำสั่งบางคำสั่งได้ ใช้
cmd
ง่าย ๆ เพิ่มคำสั่งลงในค้างคาวบรรทัดสุดท้ายของคุณ แต่! หากคุณรีเซ็ตหรือล้างเส้นทางระบบของคุณคุณต้องเริ่มต้น cmd ด้วยเส้นทางแบบเต็มเช่น:
%windir%\system32\cmd.exe
ตัวอย่างเช่นฉันมีไฟล์ bat เพื่อรีเซ็ต jdk เป็นเวอร์ชันเก่าเช่นนี้:
PATH=C:\Program Files\Java\jdk1.6.0_45\bin;C:\apache-ant-1.7.1\bin
SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45
%windir%\system32\cmd.exe
เนื่องจากฉันรีเซ็ตเส้นทางของระบบฉันต้องเรียกใช้ cmd ด้วยเส้นทางแบบเต็มหรือระบบไม่สามารถหา cmd.exe ได้มันจะล้มเหลวในการเรียกใช้ cmd และเพียงแค่ปิดหน้าต่างแล้วคุณจะไม่เห็นข้อผิดพลาด msg .