สคริปต์ชุด - รหัสส่งคืน

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

ต่อไปนี้เป็นรหัสทางออกทั่วไปและคำอธิบาย

รหัสข้อผิดพลาด คำอธิบาย
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 จะใช้ในโครงสร้างแบบวนซ้ำและใช้เพื่อทำให้เกิดการสิ้นสุดของลูปด้านในสุดในทันที