Batch Script - การดีบัก
บ่อยครั้งที่คุณไม่สามารถประสบปัญหาเมื่อเรียกใช้ไฟล์แบตช์และบ่อยกว่านั้นคุณจะต้องดีบักไฟล์แบตช์ของคุณไม่ทางใดก็ทางหนึ่งเพื่อตรวจสอบปัญหากับไฟล์แบตช์เอง ต่อไปนี้เป็นเทคนิคบางอย่างที่สามารถช่วยในการดีบักไฟล์ Batch Script
ข้อความแสดงข้อผิดพลาด
หากต้องการค้นหาแหล่งที่มาของข้อความให้ทำตามขั้นตอนเหล่านี้ -
Step 1 - ลบบรรทัด @ECHO OFF เช่น REM @ECHO OFF หรือ :: @ECHO OFF
Step 2 - รันไฟล์แบตช์ด้วยพารามิเตอร์บรรทัดคำสั่งที่ต้องการโดยเปลี่ยนทิศทางเอาต์พุตทั้งหมดไปยังไฟล์บันทึกเพื่อเปรียบเทียบในภายหลัง
test.bat > batch.log 2>&1
Step 3 - ค้นหาไฟล์ batch.log สำหรับข้อความแสดงข้อผิดพลาด
Step 4- ตรวจสอบบรรทัดก่อนหน้าสำหรับคำสั่งที่ไม่คาดคิดหรือไม่ถูกต้องสวิตช์บรรทัดคำสั่งหรือค่า; ให้ความสนใจเป็นพิเศษกับค่าของตัวแปรสภาพแวดล้อมที่ใช้ในคำสั่ง
Step 5 - แก้ไขข้อผิดพลาดและทำขั้นตอนนี้ซ้ำจนกว่าข้อความแสดงข้อผิดพลาดทั้งหมดจะหายไป
บรรทัดคำสั่งที่ซับซ้อน
แหล่งที่มาของข้อผิดพลาดทั่วไปอื่น ๆ คือคำสั่งที่เปลี่ยนเส้นทางอย่างไม่ถูกต้องเช่นคำสั่ง FIND หรือ FINDSTR "ซ้อนกัน" ที่มีสตริงการค้นหาที่ไม่ถูกต้องบางครั้งอยู่ในลูป FOR / F
ในการตรวจสอบความถูกต้องของคำสั่งที่ซับซ้อนเหล่านี้ให้ทำตามขั้นตอนเหล่านี้ -
Step 1 - แทรก "บรรทัดตรวจสอบคำสั่ง" หน้าบรรทัดซึ่งใช้ชุดคำสั่งที่ซับซ้อน
ต่อไปนี้เป็นตัวอย่างที่คำสั่ง ECHO ถูกแทรกเพื่อทำเครื่องหมายตำแหน่งที่เอาต์พุตของคำสั่ง TYPE แรกสิ้นสุดลงและคำสั่งถัดไปเริ่มต้น
TYPE %Temp%.\apipaorg.reg
ECHO.================================================ TYPE %Temp%.\apipaorg.reg
| FIND
"[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"
Step 2 - ทำตามขั้นตอนเพื่อค้นหาแหล่งที่มาของข้อความแสดงข้อผิดพลาดที่อธิบายไว้ข้างต้น
Step 3- ให้ความสนใจเป็นพิเศษกับเอาต์พุตของบรรทัดคำสั่ง "แบบง่าย": เอาต์พุตเป็นรูปแบบที่คาดไว้หรือไม่? ค่าหรือตำแหน่ง "โทเค็น" เป็นไปตามที่คาดไว้หรือไม่
รูทีนย่อย
รูทีนย่อยที่สร้างข้อความแสดงข้อผิดพลาดถือเป็น "ความท้าทาย" เพิ่มเติมในการค้นหาสาเหตุของข้อผิดพลาดเนื่องจากอาจถูกเรียกหลายครั้งในไฟล์แบตช์เดียวกัน
เพื่อช่วยค้นหาสาเหตุของการเรียกรูทีนย่อยที่ไม่ถูกต้องให้ทำตามขั้นตอนเหล่านี้ -
Step 1 - เพิ่มและรีเซ็ตตัวแปรตัวนับที่จุดเริ่มต้นของสคริปต์ -
SET Counter = 0
Step 2 - เพิ่มตัวนับทุกครั้งที่เรียกรูทีนย่อยโดยการแทรกบรรทัดต่อไปนี้ที่จุดเริ่มต้นของรูทีนย่อย
SET /A Counter+=1
Step 3- แทรกบรรทัดอื่นทันทีหลังจากการเพิ่มตัวนับซึ่งมีเฉพาะคำสั่ง SET สิ่งนี้จะแสดงรายการตัวแปรสภาพแวดล้อมทั้งหมดและค่าของตัวแปร
Step 4 - ทำตามขั้นตอนเพื่อค้นหาแหล่งที่มาของข้อความแสดงข้อผิดพลาดที่อธิบายไว้ข้างต้น
เวอร์ชัน Windows
หากคุณตั้งใจจะแจกจ่ายไฟล์แบตช์ของคุณไปยังคอมพิวเตอร์เครื่องอื่นที่อาจใช้ Windows เวอร์ชันเดียวกันหรือไม่ก็ได้คุณจะต้องทดสอบไฟล์แบตช์ของคุณใน Windows เวอร์ชันต่างๆให้มากที่สุด
ตัวอย่างต่อไปนี้แสดงวิธีการตรวจสอบเวอร์ชันต่างๆของระบบปฏิบัติการเพื่อตรวจสอบเวอร์ชันของ Windows ที่เกี่ยวข้อง
@ECHO OFF
:: Check for Windows NT 4 and later
IF NOT "%OS%"=="Windows_NT" GOTO DontRun
:: Check for Windows NT 4
VER | FIND "Windows NT" >NUL && GOTO DontRun
:: Check for Windows 2000
VER | FIND "Windows 2000" >NUL && GOTO DontRun
:: Place actual code here . . .
:: End of actual code . . .
EXIT
:DontRun
ECHO Sorry, this batch file was written for Windows XP and later versions only