สคริปต์ชุด - รหัสส่งคืน
โดยค่าเริ่มต้นเมื่อการดำเนินการบรรทัดคำสั่งเสร็จสมบูรณ์ควรคืนค่าศูนย์เมื่อการดำเนินการสำเร็จหรือไม่ใช่ศูนย์เมื่อการดำเนินการล้มเหลว เมื่อสคริปต์ชุดงานส่งคืนค่าที่ไม่ใช่ศูนย์หลังจากการดำเนินการล้มเหลวค่าที่ไม่ใช่ศูนย์จะระบุว่าหมายเลขข้อผิดพลาดคืออะไร จากนั้นเราจะใช้หมายเลขข้อผิดพลาดเพื่อพิจารณาว่าข้อผิดพลาดเกี่ยวกับอะไรและแก้ไขตามนั้น
ต่อไปนี้เป็นรหัสทางออกทั่วไปและคำอธิบาย
รหัสข้อผิดพลาด | คำอธิบาย |
---|---|
0 | โปรแกรมเสร็จสมบูรณ์ |
1 | ฟังก์ชันไม่ถูกต้อง บ่งชี้ว่าการดำเนินการพยายามดำเนินการคำสั่งที่ไม่รู้จักในพรอมต์คำสั่งของ Windows cmd.exe |
2 | ระบบไม่พบแฟ้มที่ระบุ. ระบุว่าไม่พบไฟล์ในตำแหน่งที่ระบุ |
3 | ระบบไม่สามารถหาเส้นทางที่ระบุ. ระบุว่าไม่พบพา ธ ที่ระบุ |
5 | การเข้าถึงถูกปฏิเสธ. ระบุว่าผู้ใช้ไม่มีสิทธิ์เข้าถึงทรัพยากรที่ระบุ |
9009 0x2331 |
โปรแกรมไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอกโปรแกรมที่ใช้งานได้หรือไฟล์แบตช์ ระบุว่าคำสั่งชื่อแอ็พพลิเคชันหรือพา ธ ถูกสะกดผิดเมื่อกำหนดคอนฟิก Action |
221225495 0xC0000017 -1073741801 |
มีหน่วยความจำเสมือนไม่เพียงพอ แสดงว่า Windows มีหน่วยความจำไม่เพียงพอ |
3221225786 0xC000013A -1073741510 |
แอปพลิเคชันสิ้นสุดลงเนื่องจาก CTRL + C บ่งชี้ว่าแอปพลิเคชันถูกยกเลิกโดยการป้อนแป้นพิมพ์ของผู้ใช้ CTRL + C หรือ CTRL + Break หรือหน้าต่างพรอมต์คำสั่งปิด |
3221225794 0xC0000142 -1073741502 |
แอปพลิเคชันไม่สามารถเริ่มต้นได้อย่างถูกต้อง ระบุว่าแอปพลิเคชันเปิดตัวบนเดสก์ท็อปซึ่งผู้ใช้ปัจจุบันไม่มีสิทธิ์เข้าถึง อีกสาเหตุที่เป็นไปได้คือ gdi32.dll หรือ user32.dll ล้มเหลวในการเริ่มต้น |
ระดับข้อผิดพลาด
ตัวแปรสภาพแวดล้อม% ERRORLEVEL% มีโค้ดส่งคืนของโปรแกรมหรือสคริปต์ที่เรียกใช้ล่าสุด
โดยค่าเริ่มต้นวิธีตรวจสอบ ERRORLEVEL คือผ่านรหัสต่อไปนี้
ไวยากรณ์
IF %ERRORLEVEL% NEQ 0 (
DO_Something
)
เป็นเรื่องปกติที่จะใช้คำสั่ง EXIT / B% ERRORLEVEL% ในตอนท้ายของไฟล์แบตช์เพื่อส่งคืนรหัสข้อผิดพลาดจากไฟล์แบตช์
EXIT / B ในตอนท้ายของไฟล์แบตช์จะหยุดการทำงานของไฟล์แบตช์
ใช้ EXIT / B <exitcodes> ที่ท้ายไฟล์แบตช์เพื่อส่งคืนโค้ดส่งคืนที่กำหนดเอง
ตัวแปรสภาพแวดล้อม% ERRORLEVEL% มีระดับข้อผิดพลาดล่าสุดในไฟล์แบตช์ซึ่งเป็นรหัสข้อผิดพลาดล่าสุดจากคำสั่งสุดท้ายที่เรียกใช้ ในไฟล์แบตช์เป็นแนวทางปฏิบัติที่ดีเสมอในการใช้ตัวแปรสภาพแวดล้อมแทนค่าคงที่เนื่องจากตัวแปรเดียวกันจะขยายเป็นค่าที่แตกต่างกันในคอมพิวเตอร์เครื่องอื่น
ลองดูตัวอย่างสั้น ๆ เกี่ยวกับวิธีตรวจสอบรหัสข้อผิดพลาดจากไฟล์แบตช์
ตัวอย่าง
สมมติว่าเรามีไฟล์แบตช์ชื่อ Find.cmd ซึ่งมีรหัสต่อไปนี้ ในโค้ดเราได้กล่าวไว้อย่างชัดเจนว่าหากไม่พบไฟล์ที่เรียกว่า lists.txt เราควรตั้งค่า errorlevel เป็น 7 ในทำนองเดียวกันหากเราเห็นว่าไม่ได้กำหนด Userprofile ของตัวแปรเราควรตั้งค่ารหัส errorlevel เป็น 9.
if not exist c:\lists.txt exit 7
if not defined userprofile exit 9
exit 0
สมมติว่าเรามีไฟล์อื่นชื่อ App.cmd ที่เรียก Find.cmd ก่อน ตอนนี้ถ้า Find.cmd ส่งกลับข้อผิดพลาดซึ่งมันตั้งค่าระดับข้อผิดพลาดเป็นมากกว่า 0 มันจะออกจากโปรแกรม ในไฟล์แบตช์ต่อไปนี้หลังจากเรียก Find.cnd find มันจะตรวจสอบเพื่อดูว่าระดับข้อผิดพลาดมากกว่า 0 หรือไม่
Call Find.cmd
if errorlevel gtr 0 exit
echo “Successful completion”
เอาต์พุต
ในโปรแกรมข้างต้นเราสามารถมีสถานการณ์ต่อไปนี้เป็นผลลัพธ์ -
หากไม่มีไฟล์ c: \ lists.txt จะไม่มีอะไรแสดงในเอาต์พุตคอนโซล
หากไม่มีตัวแปร userprofile จะไม่มีอะไรแสดงในคอนโซลเอาต์พุต
หากเงื่อนไขทั้งสองข้างต้นผ่านไปแล้วสตริง“ Successful complete” จะแสดงในพรอมต์คำสั่ง
ลูป
ในบทการตัดสินใจเราได้เห็นข้อความที่ได้รับการดำเนินการทีละข้อความในลักษณะที่ต่อเนื่องกัน นอกจากนี้การใช้งานยังสามารถทำได้ใน Batch Script เพื่อปรับเปลี่ยนโฟลว์ของการควบคุมในตรรกะของโปรแกรม จากนั้นจะจัดประเภทเป็นโฟลว์ของงบควบคุม
ส. เลขที่ | ลูปและคำอธิบาย |
---|---|
1 | ในขณะที่ดำเนินการตามคำชี้แจง ไม่มีคำสั่ง direct while ใน Batch Script แต่เราสามารถใช้งานลูปนี้ได้อย่างง่ายดายโดยใช้คำสั่ง if และ label |
2 | สำหรับคำชี้แจง - แสดงรายการการดำเนินการ โครงสร้าง "FOR" มีความสามารถในการวนซ้ำสำหรับไฟล์แบตช์ ต่อไปนี้เป็นโครงสร้างทั่วไปของคำสั่ง 'for' สำหรับการทำงานกับรายการค่า |
3 | วนลูปผ่านช่วง คำสั่ง 'for' ยังมีความสามารถในการเลื่อนผ่านช่วงของค่าต่างๆ ต่อไปนี้เป็นรูปแบบทั่วไปของคำสั่ง |
4 | คลาสสิกสำหรับการใช้งานแบบวนซ้ำ ต่อไปนี้เป็นคำสั่ง 'for' แบบคลาสสิกซึ่งมีอยู่ในภาษาโปรแกรมส่วนใหญ่ |
การวนลูปผ่านอาร์กิวเมนต์บรรทัดคำสั่ง
นอกจากนี้ยังสามารถใช้คำสั่ง 'for' เพื่อตรวจสอบอาร์กิวเมนต์บรรทัดคำสั่ง ตัวอย่างต่อไปนี้แสดงให้เห็นว่าคำสั่ง 'for' สามารถใช้เพื่อวนผ่านอาร์กิวเมนต์บรรทัดคำสั่งได้อย่างไร
ตัวอย่าง
@ECHO OFF
:Loop
IF "%1"=="" GOTO completed
FOR %%F IN (%1) DO echo %%F
SHIFT
GOTO Loop
:completed
เอาต์พุต
สมมติว่าโค้ดด้านบนของเราถูกเก็บไว้ในไฟล์ชื่อ Test.bat คำสั่งดังกล่าวจะสร้างผลลัพธ์ต่อไปนี้หากไฟล์แบตช์ส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งที่ 1,2 และ 3 เป็น Test.bat 1 2 3
1
2
3
ส. เลขที่ | ลูปและคำอธิบาย |
---|---|
1 | การใช้งานคำสั่งหยุดพัก คำสั่ง break ใช้เพื่อปรับเปลี่ยนโฟลว์ของการควบคุมภายในลูปภายในภาษาโปรแกรมใด ๆ โดยปกติคำสั่ง break จะใช้ในโครงสร้างแบบวนซ้ำและใช้เพื่อทำให้เกิดการสิ้นสุดของลูปด้านในสุดในทันที |