Batch Script - คู่มือฉบับย่อ
Batch Script ถูกรวมเข้ากับลำดับคำสั่งโดยอัตโนมัติซึ่งมีลักษณะซ้ำ ๆ กัน การเขียนสคริปต์เป็นวิธีที่เราสามารถบรรเทาความจำเป็นนี้ได้โดยการจัดลำดับคำสั่งเหล่านี้โดยอัตโนมัติเพื่อให้ชีวิตของคนในเชลล์ง่ายขึ้นและมีประสิทธิผลมากขึ้น ในองค์กรส่วนใหญ่ Batch Script จะรวมเข้าด้วยกันไม่ทางใดก็ทางหนึ่งเพื่อทำให้สิ่งต่างๆเป็นไปโดยอัตโนมัติ
คุณลักษณะบางอย่างของ Batch Script ได้แก่ -
สามารถอ่านอินพุตจากผู้ใช้เพื่อให้สามารถประมวลผลเพิ่มเติมได้
มีโครงสร้างการควบคุมเช่น for, if, while, switch เพื่อการทำงานอัตโนมัติและการเขียนสคริปต์ที่ดีขึ้น
รองรับคุณสมบัติขั้นสูงเช่นฟังก์ชันและอาร์เรย์
รองรับนิพจน์ทั่วไป
สามารถรวมรหัสการเขียนโปรแกรมอื่น ๆ เช่น Perl
การใช้งาน Batch Script โดยทั่วไป ได้แก่ -
การตั้งค่าเซิร์ฟเวอร์เพื่อวัตถุประสงค์ที่แตกต่างกัน
ทำกิจกรรมการดูแลทำความสะอาดโดยอัตโนมัติเช่นการลบไฟล์ที่ไม่ต้องการหรือล็อกไฟล์
การปรับใช้แอปพลิเคชันโดยอัตโนมัติจากสภาพแวดล้อมหนึ่งไปยังอีกสภาพแวดล้อมหนึ่ง
การติดตั้งโปรแกรมบนเครื่องต่างๆในครั้งเดียว
สคริปต์แบตช์จะถูกเก็บไว้ในไฟล์ข้อความธรรมดาที่มีบรรทัดพร้อมคำสั่งที่ดำเนินการตามลำดับทีละบรรทัด ไฟล์เหล่านี้มีนามสกุลพิเศษ BAT หรือ CMD ไฟล์ประเภทนี้ได้รับการยอมรับและดำเนินการผ่านอินเทอร์เฟซ (บางครั้งเรียกว่าเชลล์) ที่จัดเตรียมโดยไฟล์ระบบที่เรียกว่าตัวแปลคำสั่ง ในระบบ Windows ตัวแปลนี้เรียกว่า cmd.exe
การเรียกใช้ไฟล์แบตช์เป็นเรื่องง่ายๆเพียงแค่คลิกที่มัน ไฟล์แบตช์ยังสามารถเรียกใช้ในพรอมต์คำสั่งหรือบรรทัดเริ่ม - รัน ในกรณีเช่นนี้ต้องใช้ชื่อพา ธ แบบเต็มเว้นแต่ว่าพา ธ ของไฟล์อยู่ในสภาพแวดล้อมพา ธ ต่อไปนี้เป็นตัวอย่างง่ายๆของ Batch Script Batch Script นี้เมื่อรันจะลบไฟล์ทั้งหมดในไดเร็กทอรีปัจจุบัน
:: Deletes All files in the Current Directory With Prompts and Warnings
::(Hidden, System, and Read-Only Files are Not Affected)
:: @ECHO OFF
DEL . DR
บทนี้อธิบายสภาพแวดล้อมที่เกี่ยวข้องกับ Batch Script
การเขียนและการดำเนินการ
โดยปกติในการสร้างไฟล์แบตช์จะใช้แผ่นจดบันทึก นี่เป็นเครื่องมือที่ง่ายที่สุดสำหรับการสร้างไฟล์แบตช์ ถัดไปคือสภาพแวดล้อมการดำเนินการสำหรับชุดสคริปต์ ในระบบ Windows สามารถทำได้ผ่านทาง command prompt หรือ cmd.exe ไฟล์แบตช์ทั้งหมดทำงานในสภาพแวดล้อมนี้
ต่อไปนี้เป็นวิธีต่างๆในการเปิด cmd.exe -
Method 1 - ไปที่ C: \ Windows \ System32 แล้วดับเบิลคลิกที่ไฟล์ cmd
Method 2 - ผ่านคำสั่ง run - ภาพรวมต่อไปนี้จะแสดงเพื่อค้นหา command prompt (cmd.exe) บน Windows Server 2012
เมื่อเปิด cmd.exe คุณจะเห็นหน้าจอต่อไปนี้ นี่จะเป็นสภาพแวดล้อมของคุณสำหรับการรันสคริปต์แบตช์ของคุณ
ตัวแปรสภาพแวดล้อม
ในการรันไฟล์แบตช์จากพรอมต์คำสั่งคุณต้องไปที่ตำแหน่งที่จัดเก็บไฟล์แบตช์หรือคุณสามารถป้อนตำแหน่งไฟล์ในตัวแปรสภาพแวดล้อมพา ธ ดังนั้นสมมติว่าไฟล์แบตช์ถูกเก็บไว้ในตำแหน่งC:\Application\bin
คุณจะต้องทำตามคำแนะนำเหล่านี้สำหรับการรวมตัวแปร PATH
ระบบปฏิบัติการ | เอาต์พุต |
---|---|
Windows | ต่อท้ายสตริง; C:\Application\bin ไปยังจุดสิ้นสุดของตัวแปรระบบ PATH |
ในบทนี้เราจะดูคำสั่งแบตช์ที่ใช้บ่อยบางคำสั่ง
ส. เลขที่ | คำสั่งและคำอธิบาย |
---|---|
1 | VER คำสั่งชุดนี้แสดงเวอร์ชันของ MS-DOS ที่คุณใช้ |
2 | ASSOC นี่คือคำสั่งแบตช์ที่เชื่อมโยงส่วนขยายกับประเภทไฟล์ (FTYPE) แสดงการเชื่อมโยงที่มีอยู่หรือลบการเชื่อมโยง |
3 | ซีดี คำสั่งแบตช์นี้ช่วยในการเปลี่ยนแปลงไดเร็กทอรีอื่นหรือแสดงไดเร็กทอรีปัจจุบัน |
4 | CLS คำสั่งแบตช์นี้จะล้างหน้าจอ |
5 | สำเนา คำสั่งแบตช์นี้ใช้สำหรับการคัดลอกไฟล์จากตำแหน่งหนึ่งไปยังอีกที่หนึ่ง |
6 | DEL คำสั่งแบตช์นี้จะลบไฟล์และไม่ใช่ไดเร็กทอรี |
7 | DIR คำสั่งแบตช์นี้แสดงรายการเนื้อหาของไดเร็กทอรี |
8 | วันที่ คำสั่งแบตช์นี้ช่วยในการค้นหาวันที่ของระบบ |
9 | ECHO คำสั่งแบตช์นี้แสดงข้อความหรือเปิดหรือปิดการสะท้อนคำสั่ง |
10 | ออก คำสั่งแบตช์นี้ออกจากคอนโซล DOS |
11 | นพ คำสั่งแบตช์นี้สร้างไดเร็กทอรีใหม่ในตำแหน่งปัจจุบัน |
12 | ย้าย คำสั่งแบตช์นี้จะย้ายไฟล์หรือไดเร็กทอรีระหว่างไดเร็กทอรี |
13 | เส้นทาง คำสั่งแบตช์นี้แสดงหรือตั้งค่าตัวแปรพา ธ |
14 | หยุด คำสั่งแบตช์นี้พร้อมต์ให้ผู้ใช้และรอให้ป้อนบรรทัดอินพุต |
15 | PROMPT คำสั่งแบตช์นี้สามารถใช้เพื่อเปลี่ยนหรือรีเซ็ตพรอมต์ cmd.exe |
16 | RD คำสั่งแบตช์นี้จะลบไดเร็กทอรีออก แต่ไดเร็กทอรีต้องว่างก่อนจึงจะสามารถลบออกได้ |
17 | REN เปลี่ยนชื่อไฟล์และไดเรกทอรี |
18 | REM คำสั่งแบตช์นี้ใช้สำหรับหมายเหตุในไฟล์แบตช์ป้องกันไม่ให้เรียกใช้เนื้อหาของคำพูด |
19 | เริ่มต้น คำสั่งแบตช์นี้เริ่มโปรแกรมในหน้าต่างใหม่หรือเปิดเอกสาร |
20 | เวลา ชุดคำสั่งนี้ตั้งค่าหรือแสดงเวลา |
21 | ประเภท คำสั่ง batch นี้พิมพ์เนื้อหาของไฟล์หรือไฟล์ไปยังเอาต์พุต |
22 | VOL คำสั่งแบตช์นี้แสดงฉลากไดรฟ์ข้อมูล |
23 | ATTRIB แสดงหรือตั้งค่าแอตทริบิวต์ของไฟล์ในไดเร็กทอรี curret |
24 | CHKDSK คำสั่งแบตช์นี้ตรวจสอบดิสก์ว่ามีปัญหาหรือไม่ |
25 | ทางเลือก คำสั่งแบตช์นี้จัดเตรียมรายการตัวเลือกให้กับผู้ใช้ |
26 | CMD คำสั่งแบตช์นี้เรียกใช้อินสแตนซ์ของพรอมต์คำสั่งอื่น |
27 | COMP คำสั่ง batch นี้เปรียบเทียบ 2 ไฟล์ตามขนาดไฟล์ |
28 | แปลง คำสั่งแบตช์นี้แปลงโวลุ่มจากระบบไฟล์ FAT16 หรือ FAT32 เป็นระบบไฟล์ NTFS |
29 | DRIVERQUERY คำสั่งแบตช์นี้แสดงไดรเวอร์อุปกรณ์ที่ติดตั้งและคุณสมบัติทั้งหมด |
30 | ขยาย คำสั่ง batch นี้จะแยกไฟล์จากไฟล์ cabinet. cab ที่บีบอัด |
31 | หา คำสั่งแบตช์นี้ค้นหาสตริงในไฟล์หรืออินพุตเอาต์พุตบรรทัดที่ตรงกัน |
32 | รูปแบบ คำสั่งแบตช์นี้จัดรูปแบบดิสก์เพื่อใช้ระบบไฟล์ที่ Windows รองรับเช่น FAT, FAT32 หรือ NTFS ซึ่งจะเขียนทับเนื้อหาก่อนหน้าของดิสก์ |
33 | ช่วยด้วย คำสั่งแบตช์นี้แสดงรายการคำสั่งที่มาจาก Windows |
34 | IPCONFIG คำสั่งชุดนี้แสดงการกำหนดค่า Windows IP แสดงการกำหนดค่าตามการเชื่อมต่อและชื่อของการเชื่อมต่อนั้น |
35 | ฉลาก คำสั่งแบตช์นี้เพิ่มตั้งค่าหรือลบป้ายชื่อดิสก์ |
36 | มากกว่า คำสั่งแบตช์นี้แสดงเนื้อหาของไฟล์หรือไฟล์ทีละหน้าจอ |
37 | สุทธิ ให้บริการเครือข่ายต่างๆขึ้นอยู่กับคำสั่งที่ใช้ |
38 | ปิง คำสั่ง batch นี้จะส่งแพ็กเก็ต ICMP / IP "echo" ผ่านเครือข่ายไปยังที่อยู่ที่กำหนด |
39 | ปิดตัวลง คำสั่งแบตช์นี้ปิดคอมพิวเตอร์หรือล็อกผู้ใช้ปัจจุบัน |
40 | จัดเรียง คำสั่งแบตช์นี้รับอินพุตจากซอร์สไฟล์และเรียงลำดับเนื้อหาตามตัวอักษรจาก A ถึง Z หรือ Z ถึง A มันจะพิมพ์เอาต์พุตบนคอนโซล |
41 | ย่อย คำสั่งแบตช์นี้กำหนดอักษรระบุไดรฟ์ให้กับโฟลเดอร์ภายในแสดงการกำหนดปัจจุบันหรือลบการกำหนด |
42 | SYSTEMINFO คำสั่งแบตช์นี้แสดงการกำหนดค่าของคอมพิวเตอร์และระบบปฏิบัติการ |
43 | TASKKILL คำสั่งแบตช์นี้จะสิ้นสุดงานอย่างน้อยหนึ่งงาน |
44 | รายการงาน คำสั่งแบตช์นี้แสดงรายการงานรวมถึงชื่องานและรหัสกระบวนการ (PID) |
45 | XCOPY คำสั่งแบตช์นี้คัดลอกไฟล์และไดเร็กทอรีด้วยวิธีขั้นสูง |
46 | ต้นไม้ คำสั่งแบตช์นี้แสดงโครงสร้างของไดเร็กทอรีย่อยทั้งหมดของไดเร็กทอรีปัจจุบันไปยังระดับการเรียกซ้ำหรือระดับความลึกใด ๆ |
47 | เอฟซี คำสั่งแบตช์นี้แสดงความแตกต่างที่แท้จริงระหว่างสองไฟล์ |
48 | DISKPART คำสั่งแบตช์นี้แสดงและกำหนดค่าคุณสมบัติของดิสก์พาร์ติชัน |
49 | หัวข้อ คำสั่งแบตช์นี้กำหนดหัวเรื่องที่แสดงในหน้าต่างคอนโซล |
50 | SET แสดงรายการตัวแปรสภาพแวดล้อมบนระบบปัจจุบัน |
ในบทนี้เราจะเรียนรู้วิธีสร้างบันทึกดำเนินการและแก้ไขไฟล์แบตช์
การสร้างไฟล์แบทช์
โดยปกติไฟล์แบตช์จะถูกสร้างขึ้นในแผ่นจดบันทึก ดังนั้นวิธีที่ง่ายที่สุดคือเปิดแผ่นจดบันทึกและป้อนคำสั่งที่จำเป็นสำหรับสคริปต์ สำหรับแบบฝึกหัดนี้ให้เปิดแผ่นจดบันทึกและป้อนข้อความต่อไปนี้
:: Deletes All files in the Current Directory With Prompts and Warnings
::(Hidden, System, and Read-Only Files are Not Affected)
::
@ECHO OFF
DEL .
DR
การบันทึกไฟล์แบทช์
หลังจากสร้างไฟล์แบตช์แล้วขั้นตอนต่อไปคือการบันทึกไฟล์แบตช์ของคุณ ไฟล์แบตช์มีนามสกุลเป็น. bat หรือ. cmd กฎทั่วไปบางประการที่ควรคำนึงถึงเมื่อตั้งชื่อไฟล์แบตช์ -
พยายามหลีกเลี่ยงช่องว่างเมื่อตั้งชื่อไฟล์แบตช์บางครั้งอาจสร้างปัญหาเมื่อถูกเรียกจากสคริปต์อื่น ๆ
อย่าตั้งชื่อตามไฟล์แบตช์ทั่วไปที่มีอยู่ในระบบเช่น ping.cmd
ภาพหน้าจอด้านบนแสดงวิธีบันทึกไฟล์แบตช์ เมื่อบันทึกไฟล์แบตช์ของคุณบางจุดที่ควรทราบ
- อย่าลืมใส่. bat หรือ. cmd ต่อท้ายชื่อไฟล์
- เลือกตัวเลือก "บันทึกเป็นประเภท" เป็น "ไฟล์ทั้งหมด"
- ใส่ชื่อไฟล์ทั้งหมดในเครื่องหมายคำพูด“”
การเรียกใช้ไฟล์แบทช์
ต่อไปนี้เป็นขั้นตอนในการรันไฟล์แบตช์ -
Step 1 - เปิดพรอมต์คำสั่ง (cmd.exe)
Step 2 - ไปยังตำแหน่งที่เก็บไฟล์. bat หรือ. cmd
Step 3 - เขียนชื่อไฟล์ตามที่แสดงในภาพต่อไปนี้และกดปุ่ม Enter เพื่อเรียกใช้ไฟล์แบตช์
การแก้ไขไฟล์แบทช์
ต่อไปนี้เป็นขั้นตอนในการแก้ไขไฟล์แบตช์ที่มีอยู่
Step 1 - เปิด windows explorer
Step 2 - ไปยังตำแหน่งที่เก็บไฟล์. bat หรือ. cmd
Step 3- คลิกขวาที่ไฟล์แล้วเลือกตัวเลือก "แก้ไข" จากเมนูบริบท ไฟล์จะเปิดขึ้นใน Notepad เพื่อแก้ไขเพิ่มเติม
โดยปกติบรรทัดแรกในแบตช์ไฟล์มักประกอบด้วยคำสั่งต่อไปนี้
คำสั่ง ECHO
@echo off
ตามค่าเริ่มต้นไฟล์แบตช์จะแสดงคำสั่งขณะทำงาน จุดประสงค์ของคำสั่งแรกนี้คือปิดการแสดงผลนี้ คำสั่ง "echo off" จะปิดการแสดงผลสำหรับสคริปต์ทั้งหมดยกเว้นคำสั่ง "echo off" เอง เครื่องหมาย "@" ด้านหน้าทำให้คำสั่งมีผลกับตัวเองเช่นกัน
เอกสารประกอบ
ไฟล์แบตช์มักจะมีบรรทัดที่ขึ้นต้นด้วยคำสั่ง "Rem" นี่เป็นวิธีป้อนความคิดเห็นและเอกสารประกอบ คอมพิวเตอร์จะไม่สนใจสิ่งใด ๆ ในบรรทัดตาม Rem สำหรับไฟล์แบตช์ที่มีจำนวนความซับซ้อนเพิ่มขึ้นคุณควรแสดงความคิดเห็น
โปรแกรมสคริปต์ชุดแรก
มาสร้างโปรแกรมสคริปต์ชุดแรกอย่างง่ายของเรา เปิดแผ่นจดบันทึกและป้อนรหัสต่อไปนี้ บันทึกไฟล์เป็น“ List.cmd”
รหัสทำสิ่งต่อไปนี้ -
ใช้คำสั่ง echo off เพื่อให้แน่ใจว่าคำสั่งจะไม่แสดงเมื่อเรียกใช้โค้ด
คำสั่ง Rem ใช้เพื่อเพิ่มความคิดเห็นเพื่อบอกว่าไฟล์แบตช์นี้ทำอะไรกันแน่
คำสั่ง dir ใช้เพื่อรับเนื้อหาของตำแหน่ง C: \ Program Files
คำสั่ง '>' ใช้เพื่อเปลี่ยนทิศทางผลลัพธ์ไปยังไฟล์ C: \ lists.txt
ในที่สุดคำสั่ง echo จะใช้เพื่อบอกผู้ใช้ว่าการดำเนินการเสร็จสิ้น
@echo off
Rem This is for listing down all the files in the directory Program files
dir "C:\Program Files" > C:\lists.txt
echo "The program has completed"
เมื่อดำเนินการคำสั่งดังกล่าวชื่อของไฟล์ใน C: \ Program Files จะถูกส่งไปยังไฟล์ C: \ Lists.txt และในพรอมต์คำสั่งจะมีข้อความ "โปรแกรมเสร็จสิ้น" ปรากฏขึ้น
มีตัวแปรสองประเภทในไฟล์แบตช์ หนึ่งคือสำหรับพารามิเตอร์ที่สามารถส่งผ่านได้เมื่อไฟล์แบตช์ถูกเรียกและอีกไฟล์หนึ่งทำผ่านคำสั่ง set
อาร์กิวเมนต์บรรทัดคำสั่ง
สคริปต์แบตช์สนับสนุนแนวคิดของอาร์กิวเมนต์บรรทัดคำสั่งซึ่งอาร์กิวเมนต์สามารถส่งผ่านไปยังไฟล์แบตช์เมื่อเรียกใช้ อาร์กิวเมนต์สามารถเรียกได้จากไฟล์แบตช์ผ่านตัวแปร% 1,% 2,% 3 และอื่น ๆ
ตัวอย่างต่อไปนี้แสดงไฟล์แบตช์ซึ่งยอมรับอาร์กิวเมนต์บรรทัดคำสั่ง 3 รายการและสะท้อนไปยังหน้าจอบรรทัดคำสั่ง
@echo off
echo %1
echo %2
echo %3
หากชุดสคริปต์ข้างต้นถูกเก็บไว้ในไฟล์ที่เรียกว่า test.bat และเราต้องเรียกใช้แบตช์เป็น
Test.bat 1 2 3
ต่อไปนี้เป็นภาพหน้าจอของลักษณะนี้ในพรอมต์คำสั่งเมื่อไฟล์แบตช์ถูกเรียกใช้งาน
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้
1
2
3
หากเราเรียกใช้ชุดงานเป็น
Example 1 2 3 4
ผลลัพธ์จะยังคงเหมือนเดิม อย่างไรก็ตามพารามิเตอร์ที่สี่จะถูกละเว้น
ตั้งค่าคำสั่ง
อีกวิธีหนึ่งในการเริ่มต้นตัวแปรคือผ่านคำสั่ง 'set' ต่อไปนี้เป็นไวยากรณ์ของคำสั่ง set
ไวยากรณ์
set /A variable-name=value
ที่ไหน
variable-name คือชื่อของตัวแปรที่คุณต้องการตั้งค่า
value คือค่าที่ต้องตั้งค่ากับตัวแปร
/A – สวิตช์นี้ใช้หากค่าต้องเป็นตัวเลขตามธรรมชาติ
ตัวอย่างต่อไปนี้แสดงวิธีง่ายๆในการใช้คำสั่ง set
ตัวอย่าง
@echo off
set message=Hello World
echo %message%
ในข้อมูลโค้ดด้านบนตัวแปรที่เรียกว่าข้อความถูกกำหนดและตั้งค่าด้วยค่า "Hello World"
ในการแสดงค่าของตัวแปรโปรดทราบว่าตัวแปรนั้นจะต้องอยู่ในเครื่องหมาย%
เอาต์พุต
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้
Hello World
การทำงานกับค่าตัวเลข
ในสคริปต์แบตช์ยังสามารถกำหนดตัวแปรเพื่อเก็บค่าตัวเลขได้ สามารถทำได้โดยใช้สวิตช์ / A
รหัสต่อไปนี้แสดงวิธีง่ายๆในการตั้งค่าตัวเลขด้วยสวิตช์ / A
@echo off
SET /A a = 5
SET /A b = 10
SET /A c = %a% + %b%
echo %c%
ก่อนอื่นเราตั้งค่าของ 2 ตัวแปรคือ a และ b เป็น 5 และ 10 ตามลำดับ
เรากำลังเพิ่มค่าเหล่านั้นและเก็บไว้ในตัวแปร c
สุดท้ายเรากำลังแสดงค่าของตัวแปร c
ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น 15
ตัวดำเนินการเลขคณิตทั้งหมดทำงานในไฟล์แบตช์ ตัวอย่างต่อไปนี้แสดงตัวดำเนินการทางคณิตศาสตร์ที่สามารถใช้ในไฟล์แบตช์
@echo off
SET /A a = 5
SET /A b = 10
SET /A c = %a% + %b%
echo %c%
SET /A c = %a% - %b%
echo %c%
SET /A c = %b% / %a%
echo %c%
SET /A c = %b% * %a%
echo %c%
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้
15
-5
2
50
ตัวแปรท้องถิ่นเทียบกับทั่วโลก
ในภาษาโปรแกรมใด ๆ มีตัวเลือกในการทำเครื่องหมายตัวแปรว่ามีขอบเขตบางประเภทเช่นส่วนของรหัสที่สามารถเข้าถึงได้ โดยปกติตัวแปรที่มีขอบเขตทั่วโลกสามารถเข้าถึงได้จากโปรแกรมใดก็ได้ในขณะที่ตัวแปรที่กำหนดขอบเขตท้องถิ่นจะมีขอบเขตที่กำหนดไว้ซึ่งสามารถเข้าถึงได้
การเขียนสคริปต์ DOS ยังมีคำจำกัดความสำหรับตัวแปรที่กำหนดขอบเขตภายในและทั่วโลก โดยค่าเริ่มต้นตัวแปรจะเป็นส่วนกลางสำหรับเซสชันพรอมต์คำสั่งทั้งหมดของคุณ เรียกใช้คำสั่ง SETLOCAL เพื่อกำหนดตัวแปรให้อยู่ในขอบเขตของสคริปต์ของคุณ หลังจากเรียกใช้ SETLOCAL การกำหนดตัวแปรใด ๆ จะเปลี่ยนกลับเมื่อเรียก ENDLOCAL เรียก EXIT หรือเมื่อการดำเนินการถึงจุดสิ้นสุดของไฟล์ (EOF) ในสคริปต์ของคุณ ตัวอย่างต่อไปนี้แสดงความแตกต่างเมื่อตั้งค่าตัวแปรโลคัลและโกลบอลในสคริปต์
ตัวอย่าง
@echo off
set globalvar = 5
SETLOCAL
set var = 13145
set /A var = %var% + 5
echo %var%
echo %globalvar%
ENDLOCAL
สิ่งสำคัญบางประการที่ควรทราบเกี่ยวกับโปรแกรมข้างต้น
'globalvar' ถูกกำหนดด้วยขอบเขตส่วนกลางและพร้อมใช้งานตลอดทั้งสคริปต์
ตัวแปร 'var' ถูกกำหนดในขอบเขตโลคัลเนื่องจากอยู่ระหว่างบล็อก 'SETLOCAL' และ 'ENDLOCAL' ดังนั้นตัวแปรนี้จะถูกทำลายทันทีที่คำสั่ง 'ENDLOCAL' ถูกเรียกใช้งาน
เอาต์พุต
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้
13150
5
คุณจะสังเกตเห็นว่าคำสั่ง echo% var% จะไม่ให้ผลอะไรเลยเพราะหลังจากคำสั่ง ENDLOCAL ตัวแปร 'var' จะไม่มีอยู่อีกต่อไป
การทำงานกับตัวแปรสภาพแวดล้อม
หากคุณมีตัวแปรที่จะใช้กับไฟล์แบตช์คุณควรใช้ตัวแปรสภาพแวดล้อมเสมอ เมื่อกำหนดตัวแปรสภาพแวดล้อมแล้วจะสามารถเข้าถึงได้โดยใช้เครื่องหมาย% ตัวอย่างต่อไปนี้แสดงวิธีการดู JAVA_HOME ที่กำหนดบนระบบ ตัวแปร JAVA_HOME เป็นส่วนประกอบหลักที่โดยปกติจะใช้กับแอปพลิเคชันที่หลากหลาย
@echo off
echo %JAVA_HOME%
ผลลัพธ์จะแสดงไดเร็กทอรี JAVA_HOME ซึ่งจะขึ้นอยู่กับระบบ ต่อไปนี้เป็นตัวอย่างของผลลัพธ์
C:\Atlassian\Bitbucket\4.0.1\jre
การเพิ่มความคิดเห็นหรือเอกสารสำหรับสคริปต์ที่สร้างขึ้นถือเป็นแนวทางปฏิบัติที่ดีเสมอ สิ่งนี้จำเป็นสำหรับการดูแลรักษาสคริปต์เพื่อให้เข้าใจว่าสคริปต์ทำงานอย่างไร
ตัวอย่างเช่นพิจารณาโค้ดต่อไปนี้ซึ่งไม่มีรูปแบบของความคิดเห็น หากคนทั่วไปที่ไม่ได้พัฒนาสคริปต์ต่อไปนี้พยายามที่จะเข้าใจสคริปต์อาจต้องใช้เวลานานพอสมควรในการที่บุคคลนั้นจะเข้าใจว่าสคริปต์ทำอะไรได้บ้าง
ECHO OFF
IF NOT "%OS%"=="Windows_NT" GOTO Syntax
ECHO.%* | FIND "?" >NUL
IF NOT ERRORLEVEL 1 GOTO Syntax
IF NOT [%2]==[] GOTO Syntax
SETLOCAL
SET WSS=
IF NOT [%1]==[] FOR /F "tokens = 1 delims = \ " %%A IN ('ECHO.%~1') DO SET WSS = %%A
FOR /F "tokens = 1 delims = \ " %%a IN ('NET VIEW ^| FIND /I "\\%WSS%"') DO FOR /F
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND /I /V "%%a" ^| FIND "<03>"')
DO ECHO.%%a %%A
ENDLOCAL
GOTO:EOF
ECHO Display logged on users and their workstations.
ECHO Usage: ACTUSR [ filter ]
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part
of the computer name^(s^) to be displayed
ความคิดเห็นโดยใช้คำสั่ง Rem
มีสองวิธีในการสร้างข้อคิดเห็นใน Batch Script; หนึ่งคือผ่านคำสั่ง Rem ข้อความใด ๆ ที่ตามหลังคำสั่ง Rem จะถือว่าเป็นความคิดเห็นและจะไม่ถูกดำเนินการ ต่อไปนี้เป็นไวยากรณ์ทั่วไปของคำสั่งนี้
ไวยากรณ์
Rem Remarks
โดยที่ 'หมายเหตุ' คือความคิดเห็นที่ต้องเพิ่ม
ตัวอย่างต่อไปนี้แสดงวิธีง่ายๆ Rem สามารถใช้คำสั่งได้
ตัวอย่าง
@echo off
Rem This program just displays Hello World
set message=Hello World
echo %message%
เอาต์พุต
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้ คุณจะสังเกตเห็นว่าบรรทัดที่มีคำสั่ง Rem จะไม่ถูกดำเนินการ
Hello World
ความคิดเห็นโดยใช้คำชี้แจง ::
อีกวิธีในการสร้างความคิดเห็นใน Batch Script คือผ่านคำสั่ง :: ข้อความใด ๆ ที่ตามหลังคำสั่ง :: จะถือว่าเป็นความคิดเห็นและจะไม่ถูกดำเนินการ ต่อไปนี้เป็นไวยากรณ์ทั่วไปของคำสั่งนี้
ไวยากรณ์
:: Remarks
โดยที่ 'หมายเหตุ' คือความคิดเห็นที่ต้องเพิ่ม
ตัวอย่างต่อไปนี้แสดงการใช้คำสั่ง "::"
ตัวอย่าง
@echo off
:: This program just displays Hello World
set message = Hello World
echo %message%
เอาต์พุต
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้ คุณจะสังเกตเห็นว่าบรรทัดที่มีคำสั่ง :: จะไม่ถูกดำเนินการ
Hello World
Note - หากคุณมี Rem หลายบรรทัดเกินไปมันอาจทำให้โค้ดช้าลงเพราะท้ายที่สุดโค้ดแต่ละบรรทัดในไฟล์แบตช์ยังคงต้องดำเนินการ
ลองดูตัวอย่างของสคริปต์ขนาดใหญ่ที่เราเห็นในตอนต้นของหัวข้อนี้และดูว่าจะมีลักษณะอย่างไรเมื่อมีการเพิ่มเอกสารเข้าไป
::===============================================================
:: The below example is used to find computer and logged on users
::
::===============================================================
ECHO OFF
:: Windows version check
IF NOT "%OS%"=="Windows_NT" GOTO Syntax
ECHO.%* | FIND "?" >NUL
:: Command line parameter check
IF NOT ERRORLEVEL 1 GOTO Syntax
IF NOT [%2]==[] GOTO Syntax
:: Keep variable local
SETLOCAL
:: Initialize variable
SET WSS=
:: Parse command line parameter
IF NOT [%1]==[] FOR /F "tokens = 1 delims = \ " %%A IN ('ECHO.%~1') DO SET WSS = %%A
:: Use NET VIEW and NBTSTAT to find computers and logged on users
FOR /F "tokens = 1 delims = \ " %%a IN ('NET VIEW ^| FIND /I "\\%WSS%"') DO FOR /F
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND /I /V "%%a" ^| FIND
"<03>"') DO ECHO.%%a %%A
:: Done
ENDLOCAL
GOTO:EOF
:Syntax
ECHO Display logged on users and their workstations.
ECHO Usage: ACTUSR [ filter ]
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part of the
computer name^(s^) to be displayed
ตอนนี้คุณสามารถเห็นได้ว่าโค้ดได้เข้าใจมากขึ้นสำหรับผู้ใช้ที่ไม่ได้พัฒนาโค้ดและด้วยเหตุนี้จึงสามารถดูแลรักษาได้มากขึ้น
ใน DOS สตริงคือชุดอักขระที่เรียงตามลำดับเช่น "Hello, World!"
ส. เลขที่ | สตริงและคำอธิบาย |
---|---|
1 | สร้างสตริง สามารถสร้างสตริงใน DOS ได้ด้วยวิธีต่อไปนี้ |
2 | สตริงว่าง สตริงว่าง |
3 | การแก้ไขสตริง การแก้ไขสตริงเป็นวิธีสร้างค่าสตริงใหม่จากการผสมของค่าคงที่ตัวแปรลิเทอรัลและนิพจน์โดยการรวมค่าไว้ในลิเทอรัลสตริง |
4 | การต่อสตริง คุณสามารถใช้ตัวดำเนินการ set เพื่อเชื่อมสองสตริงหรือสตริงกับอักขระหรือสองอักขระ ต่อไปนี้เป็นตัวอย่างง่ายๆที่แสดงวิธีใช้การต่อสายอักขระ |
5 | ความยาวสตริง ในการเขียนสคริปต์ DOS ไม่มีฟังก์ชันความยาวที่กำหนดไว้สำหรับการค้นหาความยาวของสตริง มีฟังก์ชันที่กำหนดเองซึ่งสามารถใช้ได้เหมือนกัน ต่อไปนี้เป็นตัวอย่างของฟังก์ชันที่กำหนดเองเพื่อดูความยาวของสตริง |
6 | toInt ตัวแปรที่ถูกตั้งค่าเป็นสตริงโดยใช้ตัวแปร set สามารถแปลงเป็นจำนวนเต็มโดยใช้สวิตช์ / A ซึ่งใช้ตัวแปร set ตัวอย่างต่อไปนี้แสดงให้เห็นว่าสามารถทำได้อย่างไร |
7 | จัดชิดขวา ใช้เพื่อจัดแนวข้อความไปทางขวาซึ่งโดยปกติจะใช้เพื่อปรับปรุงความสามารถในการอ่านคอลัมน์ตัวเลข |
8 | สตริงซ้าย ใช้เพื่อแยกอักขระจากจุดเริ่มต้นของสตริง |
9 | สายกลาง ใช้เพื่อแยกสตริงย่อยผ่านตำแหน่งของอักขระในสตริง |
10 | ลบ คุณลักษณะการแทนที่สตริงยังสามารถใช้เพื่อลบสตริงย่อยออกจากสตริงอื่น |
11 | ลบปลายทั้งสองด้าน ใช้เพื่อลบอักขระตัวแรกและตัวสุดท้ายของสตริง |
12 | ลบ Spaces ทั้งหมด สิ่งนี้ใช้เพื่อลบช่องว่างทั้งหมดในสตริงผ่านการแทนที่ |
13 | แทนที่สตริง ในการแทนที่สตริงย่อยด้วยสตริงอื่นให้ใช้คุณสมบัติการแทนที่สตริง |
14 | สตริงขวา ใช้เพื่อแยกอักขระจากจุดสิ้นสุดของสตริง |
อาร์เรย์ไม่ได้กำหนดไว้เป็นประเภทใน Batch Script โดยเฉพาะ แต่สามารถนำไปใช้งานได้ สิ่งต่อไปนี้ต้องสังเกตเมื่อใช้อาร์เรย์ใน Batch Script
- แต่ละองค์ประกอบของอาร์เรย์จำเป็นต้องกำหนดด้วยคำสั่ง set
- จะต้องมีการวนซ้ำ 'for' เพื่อวนซ้ำตามค่าของอาร์เรย์
การสร้าง Array
อาร์เรย์ถูกสร้างขึ้นโดยใช้คำสั่ง set ต่อไปนี้
set a[0]=1
โดยที่ 0 คือดัชนีของอาร์เรย์และ 1 คือค่าที่กำหนดให้กับองค์ประกอบแรกของอาร์เรย์
อีกวิธีหนึ่งในการใช้อาร์เรย์คือการกำหนดรายการค่าและวนซ้ำผ่านรายการค่า ตัวอย่างต่อไปนี้แสดงให้เห็นว่าสามารถนำไปใช้งานได้อย่างไร
ตัวอย่าง
@echo off
set list = 1 2 3 4
(for %%a in (%list%) do (
echo %%a
))
เอาต์พุต
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้
1
2
3
4
การเข้าถึงอาร์เรย์
คุณสามารถดึงค่าจากอาร์เรย์โดยใช้ไวยากรณ์ตัวห้อยส่งดัชนีของค่าที่คุณต้องการเรียกคืนภายในวงเล็บเหลี่ยมหลังชื่ออาร์เรย์ทันที
ตัวอย่าง
@echo off
set a[0]=1
echo %a[0]%
ในตัวอย่างนี้ดัชนีเริ่มต้นจาก 0 ซึ่งหมายความว่าองค์ประกอบแรกสามารถเข้าถึงได้โดยใช้ดัชนีเป็น 0 องค์ประกอบที่สองสามารถเข้าถึงได้โดยใช้ดัชนีเป็น 1 และอื่น ๆ ลองตรวจสอบตัวอย่างต่อไปนี้เพื่อสร้างเริ่มต้นและเข้าถึงอาร์เรย์ -
@echo off
set a[0] = 1
set a[1] = 2
set a[2] = 3
echo The first element of the array is %a[0]%
echo The second element of the array is %a[1]%
echo The third element of the array is %a[2]%
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้
The first element of the array is 1
The second element of the array is 2
The third element of the array is 3
การปรับเปลี่ยนอาร์เรย์
ในการเพิ่มองค์ประกอบที่ส่วนท้ายของอาร์เรย์คุณสามารถใช้องค์ประกอบชุดร่วมกับดัชนีสุดท้ายขององค์ประกอบอาร์เรย์
ตัวอย่าง
@echo off
set a[0] = 1
set a[1] = 2
set a[2] = 3
Rem Adding an element at the end of an array
Set a[3] = 4
echo The last element of the array is %a[3]%
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้
The last element of the array is 4
คุณสามารถแก้ไของค์ประกอบที่มีอยู่ของ Array ได้โดยกำหนดค่าใหม่ที่ดัชนีที่กำหนดดังที่แสดงในตัวอย่างต่อไปนี้ -
@echo off
set a[0] = 1
set a[1] = 2
set a[2] = 3
Rem Setting the new value for the second element of the array
Set a[1] = 5
echo The new value of the second element of the array is %a[1]%
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้
The new value of the second element of the array is 5
การทำซ้ำบนอาร์เรย์
การวนซ้ำบนอาร์เรย์ทำได้โดยใช้ลูป 'for' และผ่านแต่ละองค์ประกอบของอาร์เรย์ ตัวอย่างต่อไปนี้แสดงวิธีง่ายๆในการใช้อาร์เรย์
@echo off
setlocal enabledelayedexpansion
set topic[0] = comments
set topic[1] = variables
set topic[2] = Arrays
set topic[3] = Decision making
set topic[4] = Time and date
set topic[5] = Operators
for /l %%n in (0,1,5) do (
echo !topic[%%n]!
)
สิ่งต่อไปนี้ต้องสังเกตเกี่ยวกับโปรแกรมข้างต้น -
แต่ละองค์ประกอบของอาร์เรย์จำเป็นต้องกำหนดโดยเฉพาะโดยใช้คำสั่ง set
ลูป 'for' ที่มีพารามิเตอร์ / L สำหรับการย้ายผ่านช่วงจะใช้เพื่อวนซ้ำผ่านอาร์เรย์
เอาต์พุต
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้
Comments
variables
Arrays
Decision making
Time and date
Operators
ความยาวของอาร์เรย์
ความยาวของอาร์เรย์ทำได้โดยการวนซ้ำรายการค่าในอาร์เรย์เนื่องจากไม่มีฟังก์ชันโดยตรงในการกำหนดจำนวนองค์ประกอบในอาร์เรย์
@echo off
set Arr[0] = 1
set Arr[1] = 2
set Arr[2] = 3
set Arr[3] = 4
set "x = 0"
:SymLoop
if defined Arr[%x%] (
call echo %%Arr[%x%]%%
set /a "x+=1"
GOTO :SymLoop
)
echo "The length of the array is" %x%
เอาต์พุต
เอาต์พุตคำสั่งด้านบนสร้างเอาต์พุตต่อไปนี้
The length of the array is 4
การสร้างโครงสร้างในอาร์เรย์
โครงสร้างสามารถนำไปใช้ในไฟล์แบตช์ได้โดยใช้การเข้ารหัสเพิ่มเติมเล็กน้อยสำหรับการนำไปใช้งาน ตัวอย่างต่อไปนี้แสดงให้เห็นว่าสามารถทำได้อย่างไร
ตัวอย่าง
@echo off
set len = 3
set obj[0].Name = Joe
set obj[0].ID = 1
set obj[1].Name = Mark
set obj[1].ID = 2
set obj[2].Name = Mohan
set obj[2].ID = 3
set i = 0
:loop
if %i% equ %len% goto :eof
set cur.Name=
set cur.ID=
for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do (
set cur.%%k=%%l
)
echo Name = %cur.Name%
echo Value = %cur.ID%
set /a i = %i%+1
goto loop
สิ่งสำคัญต่อไปนี้ต้องสังเกตเกี่ยวกับรหัสข้างต้น
ตัวแปรแต่ละตัวที่กำหนดโดยใช้คำสั่ง set มี 2 ค่าที่เกี่ยวข้องกับดัชนีแต่ละตัวของอาร์เรย์
ตัวแปร i ถูกตั้งค่าเป็น 0 เพื่อให้เราสามารถวนซ้ำโครงสร้างได้ตามความยาวของอาร์เรย์ซึ่งเท่ากับ 3
เราตรวจสอบเงื่อนไขเสมอว่าค่าของ i เท่ากับค่าของ len และถ้าไม่เราวนซ้ำโค้ด
เราสามารถเข้าถึงแต่ละองค์ประกอบของโครงสร้างโดยใช้สัญกรณ์ obj [% i%]
เอาต์พุต
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้
Name = Joe
Value = 1
Name = Mark
Value = 2
Name = Mohan
Value = 3
โครงสร้างการตัดสินใจกำหนดให้โปรแกรมเมอร์ระบุเงื่อนไขอย่างน้อยหนึ่งเงื่อนไขที่จะประเมินหรือทดสอบโดยโปรแกรมพร้อมกับคำสั่งหรือคำสั่งที่จะดำเนินการหากเงื่อนไขถูกกำหนดให้เป็น trueและเป็นทางเลือกที่จะเรียกใช้คำสั่งอื่น ๆ หากเงื่อนไขถูกกำหนดให้เป็น false.
ส. เลขที่ | สตริงและคำอธิบาย |
---|---|
1 | ถ้า Statement คำสั่งในการตัดสินใจแรกคือคำสั่ง 'if' |
2 | ถ้า / else คำชี้แจง คำสั่งในการตัดสินใจต่อไปคือคำสั่ง If / else ต่อไปนี้เป็นรูปแบบทั่วไปของคำสั่งนี้ |
3 | ซ้อนถ้าคำสั่ง บางครั้งมีข้อกำหนดที่จะต้องมีคำสั่ง 'if' หลายคำที่ฝังอยู่ภายในซึ่งกันและกัน ต่อไปนี้เป็นรูปแบบทั่วไปของคำสั่งนี้ |
ตัวดำเนินการคือสัญลักษณ์ที่บอกให้คอมไพเลอร์ดำเนินการจัดการทางคณิตศาสตร์หรือตรรกะเฉพาะ
ในสคริปต์ชุดงานสามารถใช้ตัวดำเนินการประเภทต่อไปนี้ได้
- ตัวดำเนินการเลขคณิต
- ตัวดำเนินการเชิงสัมพันธ์
- ตัวดำเนินการทางตรรกะ
- ตัวดำเนินการมอบหมาย
- ตัวดำเนินการ Bitwise
ตัวดำเนินการเลขคณิต
ภาษาสคริปต์ชุดสนับสนุนตัวดำเนินการทางคณิตศาสตร์ปกติเป็นภาษาใดก็ได้ ต่อไปนี้เป็นตัวดำเนินการทางคณิตศาสตร์ที่พร้อมใช้งาน
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
+ | การเพิ่มตัวถูกดำเนินการสองตัว | 1 + 2 จะให้ 3 |
- | ลบตัวถูกดำเนินการที่สองจากตัวแรก | 2 - 1 จะให้ 1 |
* | การคูณของตัวถูกดำเนินการทั้งสอง | 2 * 2 จะให้ 4 |
/ | การหารตัวเศษด้วยตัวส่วน | 3/2 จะให้ 1.5 |
% | ตัวดำเนินการโมดูลัสและส่วนที่เหลือหลังการหารจำนวนเต็ม / จำนวนลอย | 3% 2 จะให้ 1 |
ตัวดำเนินการเชิงสัมพันธ์
ตัวดำเนินการเชิงสัมพันธ์อนุญาตให้เปรียบเทียบวัตถุได้ ด้านล่างนี้คือตัวดำเนินการเชิงสัมพันธ์ที่พร้อมใช้งาน
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
EQU | ทดสอบความเท่าเทียมกันระหว่างสองวัตถุ | 2 EQU 2 จะให้เป็นจริง |
NEQ | ทดสอบความแตกต่างระหว่างสองวัตถุ | 3 NEQ 2 จะให้จริง |
LSS | ตรวจสอบว่าวัตถุด้านซ้ายน้อยกว่าตัวถูกดำเนินการด้านขวาหรือไม่ | 2 LSS 3 จะให้จริง |
LEQ | ตรวจสอบเพื่อดูว่าวัตถุด้านซ้ายน้อยกว่าหรือเท่ากับตัวถูกดำเนินการด้านขวาหรือไม่ | 2 LEQ 3 จะเป็นจริง |
GTR | ตรวจสอบเพื่อดูว่าวัตถุด้านซ้ายมีค่ามากกว่าตัวถูกดำเนินการด้านขวาหรือไม่ | 3 GTR 2 จะให้เป็นจริง |
GEQ | ตรวจสอบว่าวัตถุทางซ้ายมากกว่าหรือเท่ากับตัวถูกดำเนินการด้านขวาหรือไม่ | 3 GEQ 2 จะให้จริง |
ตัวดำเนินการทางตรรกะ
ตัวดำเนินการทางตรรกะใช้เพื่อประเมินนิพจน์บูลีน ต่อไปนี้เป็นตัวดำเนินการทางตรรกะที่พร้อมใช้งาน
ภาษาแบตช์มีชุดตัวดำเนินการตรรกะบูลีนแบบครบชุดเช่น AND, OR, XOR แต่สำหรับเลขฐานสองเท่านั้น ไม่มีค่าใด ๆ สำหรับ TRUE หรือ FALSE ตัวดำเนินการตรรกะเดียวที่ใช้ได้สำหรับเงื่อนไขคือตัวดำเนินการ NOT
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย |
---|---|
และ | นี่คือโอเปอเรเตอร์“ และ” เชิงตรรกะ |
หรือ | นี่คือโอเปอเรเตอร์“ หรือ” เชิงตรรกะ |
ไม่ | นี่คือโอเปอเรเตอร์ "ไม่ใช่" เชิงตรรกะ |
ผู้ดำเนินการมอบหมาย
ภาษา Batch Script ยังมีตัวดำเนินการกำหนด ต่อไปนี้เป็นตัวดำเนินการมอบหมายที่พร้อมใช้งาน
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย | ตัวอย่าง |
---|---|---|
+ = | สิ่งนี้จะเพิ่มตัวถูกดำเนินการด้านขวาให้กับตัวถูกดำเนินการด้านซ้ายและกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการด้านซ้าย | ตั้งค่า / A = 5 a + = 3 เอาต์พุตจะเป็น 8 |
- = | สิ่งนี้จะลบตัวถูกดำเนินการด้านขวาออกจากตัวถูกดำเนินการด้านซ้ายและกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการด้านซ้าย | ตั้งค่า / A = 5 a - = 3 เอาต์พุตจะเป็น 2 |
* = | สิ่งนี้จะคูณตัวถูกดำเนินการด้านขวาด้วยตัวถูกดำเนินการด้านซ้ายและกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการด้านซ้าย | ตั้งค่า / A = 5 a * = 3 เอาต์พุตจะเป็น 15 |
/ = | สิ่งนี้แบ่งตัวถูกดำเนินการด้านซ้ายด้วยตัวถูกดำเนินการด้านขวาและกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการด้านซ้าย | ตั้งค่า / A = 6 a / = 3 เอาต์พุตจะเป็น 2 |
% = | สิ่งนี้ใช้โมดูลัสโดยใช้ตัวถูกดำเนินการสองตัวและกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการด้านซ้าย | ตั้งค่า / A = 5 a% = 3 เอาต์พุตจะเป็น 2 |
ตัวดำเนินการ Bitwise
ตัวดำเนินการ Bitwise เป็นไปได้ในสคริปต์แบทช์ ต่อไปนี้เป็นตัวดำเนินการที่พร้อมใช้งาน
แสดงตัวอย่าง
ตัวดำเนินการ | คำอธิบาย |
---|---|
& | นี่คือโอเปอเรเตอร์“ และ” แบบบิต |
| | นี่คือโอเปอเรเตอร์“ หรือ” แบบบิต |
^ | นี่คือ "xor" แบบบิตหรือเฉพาะตัวหรือโอเปอเรเตอร์ |
ต่อไปนี้เป็นตารางความจริงที่แสดงตัวดำเนินการเหล่านี้
น | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
วันที่และเวลาใน DOS Scripting มีคำสั่งพื้นฐานสองคำสั่งต่อไปนี้สำหรับการดึงข้อมูลวันที่และเวลาของระบบ
วันที่
คำสั่งนี้รับวันที่ของระบบ
ไวยากรณ์
DATE
ตัวอย่าง
@echo off
echo %DATE%
เอาต์พุต
วันที่ปัจจุบันจะแสดงในพรอมต์คำสั่ง ตัวอย่างเช่น,
Mon 12/28/2015
เวลา
คำสั่งนี้กำหนดหรือแสดงเวลา
ไวยากรณ์
TIME
ตัวอย่าง
@echo off
echo %TIME%
เอาต์พุต
เวลาของระบบปัจจุบันจะแสดงขึ้น ตัวอย่างเช่น,
22:06:52.87
ต่อไปนี้เป็นการนำไปใช้งานบางส่วนที่สามารถใช้เพื่อรับวันที่และเวลาในรูปแบบต่างๆ
วันที่ในรูปแบบปี - เดือน - วัน
ตัวอย่าง
@echo off
echo/Today is: %year%-%month%-%day%
goto :EOF
setlocal ENABLEEXTENSIONS
set t = 2&if "%date%z" LSS "A" set t = 1
for /f "skip=1 tokens = 2-4 delims = (-)" %%a in ('echo/^|date') do (
for /f "tokens = %t%-4 delims=.-/ " %%d in ('date/t') do (
set %%a=%%d&set %%b=%%e&set %%c=%%f))
endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :EOF
เอาต์พุต
คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้
Today is: 2015-12-30
มี "ไฟล์" สากลสามแบบสำหรับการป้อนข้อมูลด้วยแป้นพิมพ์การพิมพ์ข้อความบนหน้าจอและข้อผิดพลาดในการพิมพ์บนหน้าจอ ไฟล์“ Standard In” หรือที่เรียกว่าstdinมีอินพุตของโปรแกรม / สคริปต์ ไฟล์“ Standard Out” หรือที่เรียกว่าstdoutใช้ในการเขียนผลลัพธ์เพื่อแสดงบนหน้าจอ สุดท้ายไฟล์“ Standard Err” หรือที่เรียกว่าstderrมีข้อความแสดงข้อผิดพลาดที่แสดงบนหน้าจอ
ไฟล์มาตรฐานทั้งสามไฟล์นี้หรือที่เรียกว่าสตรีมมาตรฐานอ้างอิงโดยใช้หมายเลข 0, 1 และ 2 Stdin คือไฟล์ 0, stdout คือไฟล์ 1 และ stderr คือไฟล์ 2
การเปลี่ยนเส้นทางเอาต์พุต (Stdout และ Stderr)
แนวทางปฏิบัติทั่วไปอย่างหนึ่งในไฟล์แบตช์คือการส่งเอาต์พุตของโปรแกรมไปยังล็อกไฟล์ ตัวดำเนินการ> ส่งหรือเปลี่ยนเส้นทาง stdout หรือ stderr ไปยังไฟล์อื่น ตัวอย่างต่อไปนี้แสดงให้เห็นว่าสามารถทำได้อย่างไร
Dir C:\ > list.txt
ในตัวอย่างข้างต้นไฟล์ stdout ของคำสั่ง Dir C: \ ถูกเปลี่ยนเส้นทางไปยังไฟล์ list.txt
หากคุณต่อท้ายหมายเลข 2 เข้ากับตัวกรองการเปลี่ยนเส้นทางระบบจะเปลี่ยนเส้นทางไฟล์ stderr ไปยังไฟล์ lists.txt
Dir C:\ 2> list.txt
หนึ่งสามารถรวมไฟล์ stdout และ stderrสตรีมโดยใช้หมายเลขไฟล์และคำนำหน้า "&" ต่อไปนี้เป็นตัวอย่าง
DIR C:\ > lists.txt 2>&1
การระงับเอาต์พุตของโปรแกรม
ไฟล์หลอก NUL ใช้เพื่อละทิ้งผลลัพธ์ใด ๆ จากโปรแกรม ตัวอย่างต่อไปนี้แสดงให้เห็นว่าเอาต์พุตของคำสั่ง DIR ถูกละทิ้งโดยการส่งเอาต์พุตไปยัง NUL
Dir C:\ > NUL
Stdin
ในการทำงานกับ Stdin คุณต้องใช้วิธีแก้ปัญหาเพื่อให้บรรลุเป้าหมายนี้ ซึ่งสามารถทำได้โดยเปลี่ยนเส้นทาง stdin ของพรอมต์คำสั่งที่เรียกว่า CON
ตัวอย่างต่อไปนี้แสดงวิธีที่คุณสามารถเปลี่ยนทิศทางเอาต์พุตไปยังไฟล์ที่เรียกว่า lists.txt หลังจากที่คุณดำเนินการคำสั่งด้านล่างพรอมต์คำสั่งจะรับอินพุตทั้งหมดที่ผู้ใช้ป้อนจนกว่าจะได้รับอักขระ EOF ต่อมาจะส่งอินพุตทั้งหมดไปยัง file lists.txt
TYPE CON > lists.txt
โดยค่าเริ่มต้นเมื่อการดำเนินการบรรทัดคำสั่งเสร็จสิ้นควรคืนค่าศูนย์เมื่อการดำเนินการสำเร็จหรือไม่ใช่ศูนย์เมื่อการดำเนินการล้มเหลว เมื่อสคริปต์ชุดงานส่งคืนค่าที่ไม่ใช่ศูนย์หลังจากการดำเนินการล้มเหลวค่าที่ไม่ใช่ศูนย์จะระบุว่าหมายเลขข้อผิดพลาดคืออะไร จากนั้นเราจะใช้หมายเลขข้อผิดพลาดเพื่อพิจารณาว่าข้อผิดพลาดเกี่ยวกับอะไรและแก้ไขตามนั้น
ต่อไปนี้เป็นรหัสทางออกทั่วไปและคำอธิบาย
รหัสข้อผิดพลาด | คำอธิบาย |
---|---|
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 จะใช้ในโครงสร้างแบบวนซ้ำและใช้เพื่อทำให้เกิดการสิ้นสุดของลูปด้านในสุดในทันที |
ฟังก์ชันคือชุดของคำสั่งที่จัดระเบียบร่วมกันเพื่อดำเนินงานเฉพาะ ในสคริปต์ชุดงานจะใช้วิธีการที่คล้ายกันเพื่อจัดกลุ่มคำสั่งเชิงตรรกะเข้าด้วยกันเพื่อสร้างฟังก์ชัน
เช่นเดียวกับภาษาอื่น ๆ ฟังก์ชันใน Batch Script จะทำตามขั้นตอนเดียวกัน -
Function Declaration - จะบอกคอมไพเลอร์เกี่ยวกับชื่อของฟังก์ชันประเภทการส่งคืนและพารามิเตอร์
Function Definition - ให้ตัวจริงของฟังก์ชั่น
นิยามฟังก์ชัน
ใน Batch Script ฟังก์ชันถูกกำหนดโดยใช้คำสั่ง label เมื่อฟังก์ชันถูกกำหนดขึ้นใหม่อาจใช้ค่าหนึ่งหรือหลายค่าเป็น 'พารามิเตอร์' อินพุตให้กับฟังก์ชันประมวลผลฟังก์ชันในเนื้อหาหลักและส่งผ่านค่ากลับไปยังฟังก์ชันเป็น 'ชนิดส่งคืน' เอาต์พุต
ทุกฟังก์ชันมีชื่อฟังก์ชันซึ่งอธิบายถึงงานที่ฟังก์ชันดำเนินการ ในการใช้ฟังก์ชันคุณ "เรียกใช้" ฟังก์ชันนั้นด้วยชื่อและส่งค่าอินพุต (เรียกว่าอาร์กิวเมนต์) ที่ตรงกับประเภทของพารามิเตอร์ของฟังก์ชัน
ต่อไปนี้เป็นไวยากรณ์ของฟังก์ชันอย่างง่าย
:function_name
Do_something
EXIT /B 0
function_name คือชื่อที่กำหนดให้กับฟังก์ชันซึ่งควรมีความหมายบางอย่างเพื่อให้ตรงกับสิ่งที่ฟังก์ชันทำจริง
คำสั่ง EXIT ใช้เพื่อให้แน่ใจว่าฟังก์ชันออกอย่างถูกต้อง
ต่อไปนี้เป็นตัวอย่างของฟังก์ชันง่ายๆ
ตัวอย่าง
:Display
SET /A index=2
echo The value of index is %index%
EXIT /B 0
ส. เลขที่ | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | เรียกใช้ฟังก์ชัน ฟังก์ชันถูกเรียกใช้ใน Batch Script โดยใช้คำสั่งโทร |
2 | ฟังก์ชันที่มีพารามิเตอร์ ฟังก์ชันสามารถทำงานกับพารามิเตอร์ได้โดยเพียงแค่ส่งผ่านเมื่อมีการเรียกใช้ฟังก์ชัน |
3 | ฟังก์ชันที่มีค่าส่งคืน ฟังก์ชันสามารถทำงานกับค่าที่ส่งคืนได้โดยเพียงแค่ส่งชื่อตัวแปร |
4 | ตัวแปรท้องถิ่นในฟังก์ชัน ตัวแปรท้องถิ่นในฟังก์ชันสามารถใช้เพื่อหลีกเลี่ยงความขัดแย้งของชื่อและเก็บการเปลี่ยนแปลงตัวแปรไว้ในฟังก์ชัน |
5 | ฟังก์ชันแบบเรียกซ้ำ ความสามารถในการห่อหุ้มเนื้อหาของฟังก์ชันอย่างสมบูรณ์โดยรักษาการเปลี่ยนแปลงตัวแปรภายในของฟังก์ชันและผู้เรียกมองไม่เห็น |
6 | ไฟล์ I / O ใน Batch Script เป็นไปได้ที่จะดำเนินการไฟล์ I / O ตามปกติที่คาดหวังในภาษาโปรแกรมใด ๆ |
7 | การสร้างไฟล์ การสร้างไฟล์ใหม่ทำได้โดยใช้ตัวกรองการเปลี่ยนเส้นทาง> ตัวกรองนี้สามารถใช้เพื่อเปลี่ยนทิศทางเอาต์พุตไปยังไฟล์ |
8 | การเขียนลงไฟล์ การเขียนเนื้อหาไปยังไฟล์ก็ทำได้ด้วยความช่วยเหลือของตัวกรองการเปลี่ยนเส้นทาง> ตัวกรองนี้สามารถใช้เพื่อเปลี่ยนทิศทางเอาต์พุตไปยังไฟล์ |
9 | ต่อท้ายไฟล์ การเขียนเนื้อหาไปยังไฟล์ก็ทำได้โดยใช้ตัวกรองการเปลี่ยนเส้นทางสองครั้ง >> ตัวกรองนี้สามารถใช้เพื่อต่อท้ายผลลัพธ์ใด ๆ ในไฟล์ |
10 | การอ่านจากไฟล์ การอ่านไฟล์ใน batch script ทำได้โดยใช้คำสั่ง FOR loop เพื่ออ่านแต่ละบรรทัดซึ่งกำหนดไว้ในไฟล์ที่ต้องการอ่าน |
11 | การลบไฟล์ สำหรับการลบไฟล์ Batch Script มีคำสั่ง DEL |
12 | การเปลี่ยนชื่อไฟล์ สำหรับการเปลี่ยนชื่อไฟล์ Batch Script มีคำสั่ง REN หรือ RENAME |
13 | การย้ายไฟล์ สำหรับการย้ายไฟล์ Batch Script จะจัดเตรียมคำสั่ง MOVE |
14 | ไฟล์แบทช์ - ไปป์ ตัวดำเนินการไปป์ (|) รับเอาต์พุต (โดยค่าเริ่มต้นคือ STDOUT) ของคำสั่งหนึ่งคำสั่งและนำไปยังอินพุต (โดยค่าเริ่มต้นคือ STDIN) ของคำสั่งอื่น |
15 | ไฟล์แบทช์ - อินพุต เมื่อรันไฟล์แบตช์จะมีตัวเลือกให้คุณส่งผ่านพารามิเตอร์บรรทัดคำสั่งซึ่งสามารถอ่านได้ภายในโปรแกรมเพื่อประมวลผลเพิ่มเติม |
16 | การใช้ตัวดำเนินการ SHIFT ข้อ จำกัด ประการหนึ่งของอาร์กิวเมนต์บรรทัดคำสั่งคือสามารถยอมรับอาร์กิวเมนต์ได้จนถึง% 9 เท่านั้น ลองดูตัวอย่างข้อ จำกัด นี้ |
17 | โฟลเดอร์ ใน Batch Script เป็นไปได้ที่จะดำเนินการตามโฟลเดอร์ตามปกติที่คาดหวังในภาษาโปรแกรมใด ๆ |
18 | การสร้างโฟลเดอร์ การสร้างโฟลเดอร์ทำได้โดยใช้คำสั่ง MD (Make directory) |
19 | รายการเนื้อหาของโฟลเดอร์ การแสดงรายการเนื้อหาของโฟลเดอร์สามารถทำได้โดยใช้คำสั่ง dir คำสั่งนี้ช่วยให้คุณเห็นไฟล์และไดเร็กทอรีที่มีอยู่ในไดเร็กทอรีปัจจุบัน |
20 | การลบโฟลเดอร์ สำหรับการลบโฟลเดอร์ Batch Scripting จัดเตรียมคำสั่ง DEL |
21 | เปลี่ยนชื่อโฟลเดอร์ สำหรับการเปลี่ยนชื่อโฟลเดอร์ Batch Script มีคำสั่ง REN หรือ RENAME |
22 | การย้ายโฟลเดอร์ สำหรับการย้ายโฟลเดอร์ Batch Script มีคำสั่ง MOVE |
ในบทนี้เราจะพูดถึงกระบวนการต่างๆที่เกี่ยวข้องกับ Batch Script
การดูรายการกระบวนการทำงาน
ใน Batch Script คำสั่ง TASKLIST สามารถใช้เพื่อรับรายการของกระบวนการที่กำลังรันอยู่ภายในระบบ
ไวยากรณ์
TASKLIST [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter]
[/FO format] [/NH]
ส. | ตัวเลือกและคำอธิบาย |
---|---|
1. | /S system ระบุระบบรีโมตที่จะเชื่อมต่อ |
2. | /U [domain\]user ระบุบริบทของผู้ใช้ที่คำสั่งควรดำเนินการ |
3. | /P [password] ระบุรหัสผ่านสำหรับบริบทผู้ใช้ที่กำหนด พร้อมต์สำหรับการป้อนข้อมูลหากละเว้น |
4. | /M [module] แสดงรายการงานทั้งหมดในปัจจุบันโดยใช้ชื่อ exe / dll ที่กำหนด หากไม่ได้ระบุชื่อโมดูลโมดูลที่โหลดทั้งหมดจะแสดงขึ้น |
5. | /SVC แสดงบริการที่โฮสต์ในแต่ละกระบวนการ |
6. | /V แสดงข้อมูลงานแบบละเอียด |
7. | /FI filter แสดงชุดของงานที่ตรงกับเกณฑ์ที่กำหนดโดยตัวกรอง |
8. | /FO format ระบุรูปแบบผลลัพธ์ ค่าที่ถูกต้อง: "TABLE", "LIST", "CSV" |
9. | /NH ระบุว่า "ส่วนหัวของคอลัมน์" ไม่ควรแสดงในเอาต์พุต ใช้ได้กับรูปแบบ "TABLE" และ "CSV" เท่านั้น |
ตัวอย่าง
TASKLIST
คำสั่งดังกล่าวจะได้รับรายการของกระบวนการทั้งหมดที่ทำงานบนระบบภายในของคุณ ต่อไปนี้เป็นสแน็ปช็อตของเอาต์พุตที่แสดงผลเมื่อคำสั่งด้านบนถูกรันตามที่เป็นอยู่ ดังที่คุณเห็นจากผลลัพธ์ต่อไปนี้ไม่เพียง แต่คุณจะได้รับกระบวนการต่างๆที่ทำงานบนระบบของคุณคุณยังได้รับการใช้หน่วยความจำของแต่ละกระบวนการอีกด้วย
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 4 K
System 4 Services 0 272 K
smss.exe 344 Services 0 1,040 K
csrss.exe 528 Services 0 3,892 K
csrss.exe 612 Console 1 41,788 K
wininit.exe 620 Services 0 3,528 K
winlogon.exe 648 Console 1 5,884 K
services.exe 712 Services 0 6,224 K
lsass.exe 720 Services 0 9,712 K
svchost.exe 788 Services 0 10,048 K
svchost.exe 832 Services 0 7,696 K
dwm.exe 916 Console 1 117,440 K
nvvsvc.exe 932 Services 0 6,692 K
nvxdsync.exe 968 Console 1 16,328 K
nvvsvc.exe 976 Console 1 12,756 K
svchost.exe 1012 Services 0 21,648 K
svchost.exe 236 Services 0 33,864 K
svchost.exe 480 Services 0 11,152 K
svchost.exe 1028 Services 0 11,104 K
svchost.exe 1048 Services 0 16,108 K
wlanext.exe 1220 Services 0 12,560 K
conhost.exe 1228 Services 0 2,588 K
svchost.exe 1276 Services 0 13,888 K
svchost.exe 1420 Services 0 13,488 K
spoolsv.exe 1556 Services 0 9,340 K
tasklist > process.txt
คำสั่งดังกล่าวรับเอาต์พุตที่แสดงโดยรายการงานและบันทึกลงในไฟล์ process.txt
tasklist /fi "memusage gt 40000"
คำสั่งดังกล่าวจะดึงเฉพาะกระบวนการที่มีหน่วยความจำมากกว่า 40MB ต่อไปนี้เป็นเอาต์พุตตัวอย่างที่สามารถแสดงผลได้
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
dwm.exe 916 Console 1 127,912 K
explorer.exe 2904 Console 1 125,868 K
ServerManager.exe 1836 Console 1 59,796 K
WINWORD.EXE 2456 Console 1 144,504 K
chrome.exe 4892 Console 1 123,232 K
chrome.exe 4976 Console 1 69,412 K
chrome.exe 1724 Console 1 76,416 K
chrome.exe 3992 Console 1 56,156 K
chrome.exe 1168 Console 1 233,628 K
chrome.exe 816 Console 1 66,808 K
การฆ่ากระบวนการเฉพาะ
อนุญาตให้ผู้ใช้ที่ใช้ Microsoft Windows XP professional, Windows 2003 หรือใหม่กว่าสามารถฆ่างานจากบรรทัดคำสั่งของ Windows โดยใช้รหัสกระบวนการ (PID) หรือชื่อรูปภาพ คำสั่งที่ใช้เพื่อจุดประสงค์นี้คือคำสั่ง TASKILL
ไวยากรณ์
TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter]
[/PID processid | /IM imagename] } [/T] [/F]
ส. | ตัวเลือกและคำอธิบาย |
---|---|
1. | /S system ระบุระบบรีโมตที่จะเชื่อมต่อ |
2. | /U [domain\]user ระบุบริบทของผู้ใช้ที่คำสั่งควรดำเนินการ |
3. | /P [password] ระบุรหัสผ่านสำหรับบริบทผู้ใช้ที่กำหนด พร้อมต์สำหรับการป้อนข้อมูลหากละเว้น |
4. | /FI FilterName ใช้ตัวกรองเพื่อเลือกชุดของงาน อนุญาตให้ใช้ "*" เช่น ชื่อภาพ eq acme * ดูตัวกรองด้านล่างสำหรับข้อมูลเพิ่มเติมและตัวอย่าง |
5. | /PID processID ระบุ PID ของกระบวนการที่จะยุติ ใช้ TaskList เพื่อรับ PID |
6. | /IM ImageName ระบุชื่ออิมเมจของกระบวนการที่จะยุติ สัญลักษณ์แทน '*' สามารถใช้เพื่อระบุงานหรือชื่อรูปภาพทั้งหมด |
7. | /T ยุติกระบวนการที่ระบุและกระบวนการย่อยใด ๆ ที่เริ่มต้นโดยมัน |
8. | /F ระบุเพื่อยุติกระบวนการอย่างมีผลบังคับ (es) |
ตัวอย่าง
taskkill /f /im notepad.exe
คำสั่งดังกล่าวจะฆ่างาน notepad ที่เปิดอยู่หากเปิดอยู่
taskill /pid 9214
คำสั่งดังกล่าวฆ่ากระบวนการที่มีกระบวนการ 9214
การเริ่มกระบวนการใหม่
การเขียนสคริปต์ DOS ยังมีความพร้อมที่จะเริ่มกระบวนการใหม่ทั้งหมด สิ่งนี้ทำได้โดยใช้คำสั่ง START
ไวยากรณ์
START "title" [/D path] [options] "command" [parameters]
ประเด็น
title - ข้อความสำหรับแถบหัวเรื่องของหน้าต่าง CMD (จำเป็น)
path - ไดเรกทอรีเริ่มต้น
command - คำสั่งไฟล์แบตช์หรือโปรแกรมปฏิบัติการที่จะเรียกใช้
parameters - พารามิเตอร์ส่งผ่านไปยังคำสั่ง
ส. | ตัวเลือกและคำอธิบาย |
---|---|
1. | /MIN หน้าต่างเริ่มย่อเล็กสุด |
2. | /MAX หน้าต่างเริ่มขยายใหญ่สุด |
3. | /LOW ใช้คลาสลำดับความสำคัญ IDLE |
4. | /NORMAL ใช้คลาสลำดับความสำคัญปกติ |
5. | /ABOVENORMAL ใช้คลาสลำดับความสำคัญ ABOVENORMAL |
6. | /BELOWNORMAL ใช้คลาสลำดับความสำคัญ BELOWNORMAL |
7. | /HIGH ใช้คลาสที่มีลำดับความสำคัญสูง |
8. | /REALTIME ใช้คลาสลำดับความสำคัญ REALTIME |
ตัวอย่าง
START "Test Batch Script" /Min test.bat
คำสั่งดังกล่าวจะเรียกใช้ batch script test.bat ในหน้าต่างใหม่ หน้าต่างจะเริ่มต้นในโหมดย่อเล็กสุดและยังมีชื่อ "Test Batch Script"
START "" "C:\Program Files\Microsoft Office\Winword.exe" "D:\test\TESTA.txt"
คำสั่งดังกล่าวจะเรียกใช้ Microsoft word ในกระบวนการอื่นจากนั้นเปิดไฟล์ TESTA.txt ใน MS Word
นามแฝงหมายถึงการสร้างทางลัดหรือคำสำคัญสำหรับคำสั่งที่มีอยู่ สมมติว่าเราต้องการรันคำสั่งด้านล่างซึ่งไม่มีอะไรนอกจากคำสั่งแสดงรายการไดเร็กทอรีที่มีตัวเลือก / w เพื่อไม่แสดงรายละเอียดที่จำเป็นทั้งหมดในรายการไดเร็กทอรี
Dir /w
สมมติว่าเราจะสร้างทางลัดไปยังคำสั่งนี้ดังนี้
dw = dir /w
เมื่อเราต้องการเรียกใช้ไฟล์ dir /w คำสั่งเราสามารถพิมพ์คำ dw. ตอนนี้คำว่า 'dw' กลายเป็นนามแฝงของคำสั่ง Dir / w
การสร้างนามแฝง
นามแฝงได้รับการจัดการโดยใช้ doskey คำสั่ง
ไวยากรณ์
DOSKEY [options] [macroname=[text]]
ประเด็น
macroname - ชื่อย่อของมาโคร
text - คำสั่งที่คุณต้องการเรียกคืน
ต่อไปนี้เป็นคำอธิบายของตัวเลือกที่สามารถนำเสนอกับคำสั่ง DOSKEY
ส. | ตัวเลือกและคำอธิบาย |
---|---|
1. | /REINSTALL ติดตั้งสำเนาใหม่ของ Doskey |
2. | /LISTSIZE = size กำหนดขนาดของบัฟเฟอร์ประวัติคำสั่ง |
3. | /MACROS แสดงมาโคร Doskey ทั้งหมด |
4. | /MACROS:ALL แสดงมาโคร Doskey ทั้งหมดสำหรับไฟล์ปฏิบัติการทั้งหมดที่มีมาโคร Doskey |
5. | /MACROS:exename แสดงมาโคร Doskey ทั้งหมดสำหรับปฏิบัติการที่กำหนด |
6. | /HISTORY แสดงคำสั่งทั้งหมดที่เก็บไว้ในหน่วยความจำ |
7. | /INSERT ระบุว่าข้อความใหม่ที่คุณพิมพ์ถูกแทรกในข้อความเก่า |
8. | /OVERSTRIKE ระบุว่าข้อความใหม่เขียนทับข้อความเก่า |
9. | /EXENAME = exename ระบุไฟล์ปฏิบัติการ |
10. | /MACROFILE = filename ระบุไฟล์มาโครที่จะติดตั้ง |
11. | macroname ระบุชื่อสำหรับแมโครที่คุณสร้าง |
12. | text ระบุคำสั่งที่คุณต้องการบันทึก |
ตัวอย่าง
สร้างไฟล์ใหม่ชื่อ keys.bat และป้อนคำสั่งต่อไปนี้ในไฟล์ คำสั่งด้านล่างจะสร้างนามแฝงสองนามหนึ่งชื่อสำหรับคำสั่ง cd ซึ่งจะไปที่ไดเร็กทอรีที่เรียกว่า test โดยอัตโนมัติ และอีกอันใช้สำหรับคำสั่ง dir
@echo off
doskey cd = cd/test
doskey d = dir
เมื่อคุณดำเนินการคำสั่งคุณจะสามารถเรียกใช้นามแฝงเหล่านี้ในพรอมต์คำสั่ง
เอาต์พุต
ภาพหน้าจอต่อไปนี้แสดงให้เห็นว่าหลังจากเรียกใช้ไฟล์แบตช์ที่สร้างข้างต้นแล้วคุณสามารถป้อนคำสั่ง 'd' ได้อย่างอิสระและจะให้รายชื่อไดเร็กทอรีซึ่งหมายความว่ามีการสร้างนามแฝงของคุณ
การลบนามแฝง
นามแฝงหรือมาโครสามารถลบได้โดยตั้งค่าของมาโครเป็น NULL
ตัวอย่าง
@echo off
doskey cd = cd/test
doskey d = dir
d=
ในตัวอย่างข้างต้นเราจะตั้งค่ามาโคร d เป็น d = dir ก่อน หลังจากนั้นเราจะตั้งค่าเป็น NULL เนื่องจากเราได้ตั้งค่าของ d เป็น NULL มาโคร d จะถูกลบ
การเปลี่ยนนามแฝง
สามารถแทนที่นามแฝงหรือมาโครได้โดยตั้งค่าของมาโครเป็นค่าใหม่ที่ต้องการ
ตัวอย่าง
@echo off
doskey cd = cd/test
doskey d = dir
d = dir /w
ในตัวอย่างข้างต้นเราจะตั้งค่ามาโคร d เป็น d = dir ก่อน หลังจากนั้นเราจะตั้งค่าเป็น dir / w เนื่องจากเราได้ตั้งค่า d เป็นค่าใหม่นามแฝง 'd' จึงจะรับค่าใหม่
ขณะนี้ Windows มีไลบรารีที่ปรับปรุงแล้วซึ่งสามารถใช้ใน Batch Script สำหรับการทำงานกับอุปกรณ์ที่เชื่อมต่อกับระบบ สิ่งนี้เรียกว่าคอนโซลอุปกรณ์ - DevCon.exe
นักพัฒนาและผู้ทดสอบไดรเวอร์ Windows สามารถใช้ DevCon เพื่อตรวจสอบว่าไดรเวอร์ได้รับการติดตั้งและกำหนดค่าอย่างถูกต้องรวมถึงไฟล์ INF ที่ถูกต้องชุดไดรเวอร์ไฟล์ไดรเวอร์และแพ็คเกจไดรเวอร์ คุณยังสามารถใช้คำสั่ง DevCon (เปิดปิดใช้งานติดตั้งเริ่มต้นหยุดและดำเนินการต่อ) ในสคริปต์เพื่อทดสอบไดรเวอร์DevCon เป็นเครื่องมือบรรทัดคำสั่งที่ทำหน้าที่จัดการอุปกรณ์บนคอมพิวเตอร์เฉพาะที่และคอมพิวเตอร์ระยะไกล
ข้อมูลไดรเวอร์การแสดงผลและอุปกรณ์ DevCon สามารถแสดงคุณสมบัติต่อไปนี้ของไดรเวอร์และอุปกรณ์บนคอมพิวเตอร์ในระบบและคอมพิวเตอร์ระยะไกล (ใช้ Windows XP และรุ่นก่อนหน้า) -
รหัสฮาร์ดแวร์รหัสที่เข้ากันได้และรหัสอินสแตนซ์อุปกรณ์ ตัวระบุเหล่านี้อธิบายโดยละเอียดในสตริงการระบุอุปกรณ์
คลาสการตั้งค่าอุปกรณ์
อุปกรณ์ในคลาสการตั้งค่าอุปกรณ์
ไฟล์ INF และไฟล์ไดรเวอร์อุปกรณ์
รายละเอียดของแพ็คเกจไดรเวอร์
ทรัพยากรฮาร์ดแวร์
สถานะอุปกรณ์
สแต็คไดรเวอร์ที่คาดไว้
แพ็คเกจไดรเวอร์ของ บริษัท อื่นในที่เก็บไดรเวอร์
ค้นหาอุปกรณ์ DevCon สามารถค้นหาอุปกรณ์ที่ติดตั้งและถอนการติดตั้งบนคอมพิวเตอร์ในระบบหรือระยะไกลโดยใช้รหัสฮาร์ดแวร์รหัสอินสแตนซ์ของอุปกรณ์หรือคลาสการตั้งค่าอุปกรณ์
เปลี่ยนการตั้งค่าอุปกรณ์ DevCon สามารถเปลี่ยนสถานะหรือการกำหนดค่าของอุปกรณ์ Plug and Play (PnP) บนคอมพิวเตอร์ในระบบได้ด้วยวิธีต่อไปนี้ -
เปิดใช้งานอุปกรณ์
ปิดการใช้งานอุปกรณ์
อัปเดตไดรเวอร์ (โต้ตอบและไม่โต้ตอบ)
ติดตั้งอุปกรณ์ (สร้าง devnode และติดตั้งซอฟต์แวร์)
นำอุปกรณ์ออกจากโครงสร้างอุปกรณ์และลบสแต็กของอุปกรณ์
สแกนหาอุปกรณ์ Plug and Play อีกครั้ง
เพิ่มลบและจัดลำดับรหัสฮาร์ดแวร์ของอุปกรณ์ที่ระบุรูทใหม่
เปลี่ยนไดรเวอร์ตัวกรองบนและล่างสำหรับคลาสการตั้งค่าอุปกรณ์
เพิ่มและลบแพ็คเกจไดรเวอร์ของ บริษัท อื่นจากที่เก็บไดรเวอร์
DevCon (DevCon.exe) รวมอยู่ด้วยเมื่อคุณติดตั้ง WDK, Visual Studio และ Windows SDK สำหรับแอปเดสก์ท็อป ชุด DevCon.exe มีอยู่ในตำแหน่งต่อไปนี้เมื่อติดตั้ง
%WindowsSdkDir%\tools\x64\devcon.exe
%WindowsSdkDir%\tools\x86\devcon.exe
%WindowsSdkDir%\tools\arm\devcon.exe
ไวยากรณ์
devcon [/m:\\computer] [/r] command [arguments]
ประเด็น
/m:\\computer- รันคำสั่งบนคอมพิวเตอร์ระยะไกลที่ระบุ จำเป็นต้องมีแบ็กสแลช
/r- รีบูตตามเงื่อนไข รีบูตระบบหลังจากดำเนินการเสร็จสิ้นเฉพาะเมื่อจำเป็นต้องรีบูตเพื่อให้การเปลี่ยนแปลงมีผล
command - ระบุคำสั่ง DevCon
ในการแสดงรายการและแสดงข้อมูลเกี่ยวกับอุปกรณ์บนคอมพิวเตอร์ให้ใช้คำสั่งต่อไปนี้ -
DevCon HwIDs
คลาส DevCon
DevCon ListClass
ไดร์เวอร์ DevCon
DevCon DriverNodes
ทรัพยากร DevCon
กอง DevCon
สถานะ DevCon
DevCon Dp_enum
ในการค้นหาข้อมูลเกี่ยวกับอุปกรณ์บนคอมพิวเตอร์ให้ใช้คำสั่งต่อไปนี้ -
ค้นหา DevCon
DevCon FindAll
ในการจัดการอุปกรณ์หรือเปลี่ยนการกำหนดค่าให้ใช้คำสั่งต่อไปนี้ -
เปิดใช้งาน DevCon
ปิดใช้งาน DevCon
ปรับปรุง DevCon
ปรับปรุง DevConNI
ติดตั้ง DevCon
DevCon ลบ
DevCon Rescan
DevCon เริ่มต้นใหม่
รีบูต DevCon
DevCon SetHwID
DevCon ClassFilter
DevCon Dp_add
DevCon Dp_delete
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างบางส่วนเกี่ยวกับวิธีใช้คำสั่ง DevCon
List all driver files
คำสั่งต่อไปนี้ใช้การดำเนินการ DevCon DriverFiles เพื่อแสดงรายการชื่อไฟล์ของไดรเวอร์ที่อุปกรณ์บนระบบใช้ คำสั่งใช้อักขระตัวแทน (*) เพื่อระบุอุปกรณ์ทั้งหมดในระบบ เนื่องจากเอาต์พุตมีจำนวนมากคำสั่งจึงใช้อักขระการเปลี่ยนเส้นทาง (>) เพื่อเปลี่ยนทิศทางเอาต์พุตไปยังไฟล์อ้างอิงคือ driverfiles.txt
devcon driverfiles * > driverfiles.txt
คำสั่งต่อไปนี้ใช้การดำเนินการสถานะ DevCon เพื่อค้นหาสถานะของอุปกรณ์ทั้งหมดบนคอมพิวเตอร์ในระบบ จากนั้นจะบันทึกสถานะในไฟล์ status.txt เพื่อบันทึกหรือตรวจสอบในภายหลัง คำสั่งใช้อักขระตัวแทน (*) เพื่อแสดงอุปกรณ์ทั้งหมดและอักขระการเปลี่ยนทิศทาง (>) เพื่อเปลี่ยนทิศทางเอาต์พุตไปยังไฟล์ status.txt
devcon status * > status.txt
คำสั่งต่อไปนี้จะเปิดใช้งานอุปกรณ์เครื่องพิมพ์ทั้งหมดบนคอมพิวเตอร์โดยระบุคลาสการตั้งค่าเครื่องพิมพ์ในคำสั่ง DevCon Enable คำสั่งมีพารามิเตอร์ / r ซึ่งจะรีบูตระบบหากจำเป็นเพื่อให้การเปิดใช้งานมีประสิทธิภาพ
devcon /r enable = Printer
คำสั่งต่อไปนี้ใช้การดำเนินการติดตั้ง DevCon เพื่อติดตั้งอุปกรณ์แป้นพิมพ์บนเครื่องคอมพิวเตอร์ คำสั่งประกอบด้วยเส้นทางแบบเต็มไปยังไฟล์ INF สำหรับอุปกรณ์ (keyboard.inf) และ ID ฮาร์ดแวร์ (* PNP030b)
devcon /r install c:\windows\inf\keyboard.inf *PNP030b
คำสั่งต่อไปนี้จะสแกนคอมพิวเตอร์เพื่อหาอุปกรณ์ใหม่
devcon scan
คำสั่งต่อไปนี้จะสแกนคอมพิวเตอร์ใหม่สำหรับอุปกรณ์ใหม่
devcon rescan
Registry เป็นหนึ่งในองค์ประกอบสำคัญของระบบ windows มีข้อมูลมากมายเกี่ยวกับแง่มุมต่างๆของระบบปฏิบัติการ แอพพลิเคชั่นเกือบทั้งหมดที่ติดตั้งบนระบบ windows โต้ตอบกับรีจิสตรีในรูปแบบใดรูปแบบหนึ่ง
Registry ประกอบด้วยองค์ประกอบพื้นฐานสองอย่าง ได้แก่ คีย์และค่า Registry keys เป็นวัตถุคอนเทนเนอร์ที่คล้ายกับโฟลเดอร์ Registry valuesเป็นวัตถุที่ไม่ใช่คอนเทนเนอร์คล้ายกับไฟล์ คีย์อาจมีค่าหรือคีย์เพิ่มเติม คีย์อ้างอิงด้วยไวยากรณ์ที่คล้ายกับชื่อพา ธ ของ Windows โดยใช้แบ็กสแลชเพื่อระบุระดับของลำดับชั้น
บทนี้จะกล่าวถึงฟังก์ชันต่างๆเช่นการสอบถามค่าการเพิ่มการลบและการแก้ไขค่าจากรีจิสทรี
ส. เลขที่ | ประเภทของ Registry & Description |
---|---|
1 | อ่านจาก Registry การอ่านจากรีจิสทรีทำได้โดยใช้คำสั่ง REG QUERY |
2 | การเพิ่มลงใน Registry การเพิ่มลงในรีจิสทรีทำได้โดยใช้คำสั่ง REG ADD |
3 | การลบออกจาก Registry การลบออกจากรีจิสทรีทำได้โดยใช้คำสั่ง REG DEL |
4 | การคัดลอก Registry Keys การคัดลอกจากรีจิสทรีทำได้โดยใช้คำสั่ง REG COPY |
5 | การเปรียบเทียบ Registry Keys การเปรียบเทียบรีจิสตรีคีย์ทำได้โดยใช้คำสั่ง REG COMPARE |
Batch script มีสิ่งอำนวยความสะดวกในการทำงานกับการตั้งค่าเครือข่าย คำสั่ง NET ใช้เพื่ออัปเดตแก้ไขหรือดูการตั้งค่าเครือข่ายหรือเครือข่าย บทนี้จะกล่าวถึงตัวเลือกต่างๆที่มีให้สำหรับคำสั่ง net
ส. เลขที่ | NET คำสั่งและคำอธิบาย |
---|---|
1 | บัญชีสุทธิ View the current password & logon restrictions for the computer. |
2 | NET CONFIG Displays your current server or workgroup settings. |
3 | NET COMPUTER Adds or removes a computer attached to the windows domain controller. |
4 | NET USER This command can be used for the following View the details of a particular user account. |
5 | NET STOP/START This command is used to stop and start a particular service. |
6 | NET STATISTICS Display network statistics of the workstation or server. |
7 | NET USE Connects or disconnects your computer from a shared resource or displays information about your connections. |
Printing can also be controlled from within Batch Script via the NET PRINT command.
Syntax
PRINT [/D:device] [[drive:][path]filename[...]]
Where /D:device - Specifies a print device.
Example
print c:\example.txt /c /d:lpt1
The above command will print the example.txt file to the parallel port lpt1.
Command Line Printer Control
As of Windows 2000, many, but not all, printer settings can be configured from Windows's command line using PRINTUI.DLL and RUNDLL32.EXE
Syntax
RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry [ options ] [ @commandfile ]
Where some of the options available are the following −
/dl − Delete local printer.
/dn − Delete network printer connection.
/dd − Delete printer driver.
/e − Display printing preferences.
/f[file] − Either inf file or output file.
/F[file] − Location of an INF file that the INF file specified with /f may depend on.
/ia − Install printer driver using inf file.
/id − Install printer driver using add printer driver wizard.
/if − Install printer using inf file.
/ii − Install printer using add printer wizard with an inf file.
/il − Install printer using add printer wizard.
/in − Add network printer connection.
/ip − Install printer using network printer installation wizard.
/k − Print test page to specified printer, cannot be combined with command when installing a printer.
/l[path] − Printer driver source path.
/m[model] − Printer driver model name.
/n[name] − Printer name.
/o − Display printer queue view.
/p − Display printer properties.
/Ss − Store printer settings into a file.
/Sr − Restore printer settings from a file.
/y − Set printer as the default.
/Xg − Get printer settings.
/Xs − Set printer settings.
Testing if a Printer Exists
There can be cases wherein you might be connected to a network printer instead of a local printer. In such cases, it is always beneficial to check if a printer exists in the first place before printing.
The existence of a printer can be evaluated with the help of the RUNDLL32.EXE PRINTUI.DLL which is used to control most of the printer settings.
Example
SET PrinterName = Test Printer
SET file=%TEMP%\Prt.txt
RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Xg /n "%PrinterName%" /f "%file%" /q
IF EXIST "%file%" (
ECHO %PrinterName% printer exists
) ELSE (
ECHO %PrinterName% printer does NOT exists
)
The above command will do the following −
It will first set the printer name and set a file name which will hold the settings of the printer.
The RUNDLL32.EXE PRINTUI.DLL commands will be used to check if the printer actually exists by sending the configuration settings of the file to the file Prt.txt
Very often than not you can run into problems when running batch files and most often than not you would need to debug your batch files in some way or the other to determine the issue with the batch file itself. Following are some of the techniques that can help in debugging Batch Script files.
Error Messages
To discover the source of the message, follow these steps −
Step 1 − REM out the @ECHO OFF line, i.e. REM @ECHO OFF or :: @ECHO OFF.
Step 2 − Run the batch file with the required command line parameters, redirecting all output to a log file for later comparison.
test.bat > batch.log 2>&1
Step 3 − Search the file batch.log for the error messages
Step 4 − Check the previous line for any unexpected or invalid command, command line switch(es) or value(s); pay special attention to the values of any environment variables used in the command.
Step 5 − Correct the error and repeat this process until all error messages have disappeared.
Complex Command Lines
Another common source of errors are incorrectly redirected commands, like for example "nested" FIND or FINDSTR commands with incorrect search strings, sometimes within a FOR /F loop.
To check the validity of these complex commands, follow these steps −
Step 1 − Insert "command check lines" just before a line which uses the complex command set.
Following is an example wherein the ECHO command is inserted to mark where the output of the first TYPE command ends and the next one starts.
TYPE %Temp%.\apipaorg.reg
ECHO.================================================ TYPE %Temp%.\apipaorg.reg
| FIND
"[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"
Step 2 − Follow the procedure to find error message sources described above.
Step 3 − Pay special attention to the output of the "simplified" command lines: Is the output of the expected format? Is the "token" value or position as expected?
Subroutines
Subroutines generating error messages pose an extra "challenge" in finding the cause of the error, as they may be called multiple times in the same batch file.
To help find out what causes the incorrect call to the subroutine, follow these steps −
Step 1 − Add and reset a counter variable at the beginning of the script −
SET Counter = 0
Step 2 − Increment the counter each time the subroutine is called, by inserting the following line at the beginning of the subroutine
SET /A Counter+=1
Step 3 − Insert another line right after the counter increment, containing only the SET command; this will list all environment variables and their values.
Step 4 − Follow the procedure to find error message sources described above.
Windows Versions
If you intend to distribute your batch files to other computers that may or may not run the same Windows version, you will need to test your batch files in as many Windows versions as possible.
The following example shows how to check for various operating system versions to check the relevant windows versions.
@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
Logging in is possible in Batch Script by using the redirection command.
Syntax
test.bat > testlog.txt 2> testerrors.txt
Example
Create a file called test.bat and enter the following command in the file.
net statistics /Server
The above command has an error because the option to the net statistics command is given in the wrong way.
Output
If the command with the above test.bat file is run as
test.bat > testlog.txt 2> testerrors.txt
And you open the file testerrors.txt, you will see the following error.
The option /SERVER is unknown.
The syntax of this command is −
NET STATISTICS
[WORKSTATION | SERVER]
More help is available by typing NET HELPMSG 3506.
If you open the file called testlog.txt, it will show you a log of what commands were executed.
C:\tp>net statistics /Server