ตัวแปรใน cmd ได้รับการกำหนดค่าคำสั่ง การกำหนดอักษรระบุไดรฟ์เดียวกันให้กับไดรฟ์แบบถอดได้ ค้นหาคอมพิวเตอร์ที่ใช้งานแอปพลิเคชัน

ภายในไฟล์คำสั่ง คุณสามารถทำงานกับสิ่งที่เรียกว่าตัวแปรสภาพแวดล้อม (หรือ ตัวแปรสภาพแวดล้อม) ซึ่งแต่ละรายการจะถูกเก็บไว้ใน แรมมีชื่อเฉพาะของตัวเอง และค่าของมันคือสตริง ตัวแปรสภาพแวดล้อมมาตรฐานจะเริ่มต้นโดยอัตโนมัติเมื่อระบบปฏิบัติการบู๊ต ตัวแปรดังกล่าว เช่น WINDIR ซึ่งกำหนดตำแหน่ง ไดเร็กทอรีวินโดวส์, TEMP ซึ่งระบุเส้นทางไปยังไดเร็กทอรีหน่วยเก็บข้อมูล ไฟล์ชั่วคราว Windows หรือ PATH ซึ่งเก็บเส้นทางของระบบ (เส้นทางการค้นหา) นั่นคือรายการไดเร็กทอรีที่ระบบควรค้นหาไฟล์ปฏิบัติการหรือไฟล์ การแบ่งปัน(ตัวอย่างเช่น, ไลบรารีแบบไดนามิก- คุณยังสามารถประกาศตัวแปรสภาพแวดล้อมของคุณเองเป็นไฟล์แบตช์ได้โดยใช้คำสั่ง SET

รับค่าของตัวแปร

เพื่อให้ได้ค่าที่แน่นอน ตัวแปรสภาพแวดล้อมคุณต้องใส่ชื่อของตัวแปรนี้ด้วยสัญลักษณ์ % ตัวอย่างเช่น:

@ECHO OFF CLS REM สร้างตัวแปร MyVar SET MyVar=Hello REM เปลี่ยนตัวแปร SET MyVar=%MyVar%! ค่าตัวแปร ECHO MyVar: %MyVar% REM การลบตัวแปร MyVar SET MyVar= ค่าตัวแปร ECHO WinDir: %WinDir%

เมื่อรันสิ่งนี้ ไฟล์แบตช์เส้นจะปรากฏบนหน้าจอ

ค่าตัวแปร MyVar: สวัสดี! ค่าตัวแปร WinDir: C:\WINDOWS

การแปลงตัวแปรเป็นสตริง

คุณสามารถจัดการตัวแปรสภาพแวดล้อมในไฟล์แบตช์ได้ด้วยวิธีบางอย่าง ประการแรกการดำเนินการต่อข้อมูล (การติดกาว) สามารถทำได้ ในการดำเนินการนี้คุณเพียงแค่ต้องเขียนค่าของตัวแปรที่เชื่อมต่อไว้ติดกันในคำสั่ง SET ตัวอย่างเช่น,

ชุด A=หนึ่งชุด B=สองชุด C=%A%%B%

หลังจากดำเนินการคำสั่งเหล่านี้ในไฟล์ ค่าของตัวแปร C จะเป็นสตริง "Double" คุณไม่ควรใช้เครื่องหมาย + ในการต่อข้อมูล เนื่องจากจะตีความได้ว่าเป็นสัญลักษณ์เท่านั้น เช่น หลังจากรันไฟล์โดยมีเนื้อหาดังนี้

SET A=หนึ่งชุด B=สอง ชุดC=A+B ตัวแปรECHO C=%C% SET D=%A%+%B% ตัวแปรECHO D=%D%

สองบรรทัดจะปรากฏบนหน้าจอ:

ตัวแปร C=A+B ตัวแปร D=หนึ่ง+สอง

ประการที่สอง คุณสามารถแยกสตริงย่อยออกจากตัวแปรสภาพแวดล้อมได้โดยใช้โครงสร้าง %ชื่อตัวแปร:~n1,n2%โดยที่ตัวเลข n1 กำหนดออฟเซ็ต (จำนวนอักขระที่จะข้าม) จากจุดเริ่มต้น (หาก n1 เป็นบวก) หรือจากจุดสิ้นสุด (หาก n1 เป็นลบ) ของตัวแปรสภาพแวดล้อมที่เกี่ยวข้อง และตัวเลข n2 คือจำนวน อักขระที่จะจัดสรร (หาก n2 เป็นค่าบวก) หรือตัวเลข อักขระตัวสุดท้ายในตัวแปรที่จะไม่รวมไว้ในสตริงย่อยที่เลือก (หาก n2 เป็นลบ) หากมีการระบุตัวเลือกลบ -n เพียงตัวเดียว อักขระ n ตัวสุดท้ายจะถูกแยกออกมา ตัวอย่างเช่น หากตัวแปร %DATE% เก็บสตริง "09/21/2007" (การแสดงเชิงสัญลักษณ์ของวันที่ปัจจุบันในการตั้งค่าภูมิภาคบางอย่าง) จากนั้นหลังจากดำเนินการคำสั่งต่อไปนี้

SET dd1=%DATE:~0.2% SET dd2=%DATE:~0.-8% SET mm=%DATE:~-7.2% SET yyyy=%DATE:~-4%

ตัวแปรใหม่จะมีค่าดังต่อไปนี้: %dd1%=21, %dd2%=21, %mm%=09, %ปปปป%=2007.

ประการที่สาม คุณสามารถดำเนินการขั้นตอนการเปลี่ยนสตริงย่อยได้โดยใช้โครงสร้าง %ตัวแปร_ชื่อ:s1=s2%(สิ่งนี้จะส่งคืนสตริงพร้อมกับสตริงย่อยทุกครั้ง s1 ในตัวแปรสภาพแวดล้อมที่เกี่ยวข้องแทนที่ด้วย s2 ) เช่น หลังจากดำเนินการตามคำสั่งแล้ว

SET a=123456 SET b=%a:23=99%

ตัวแปร b จะเก็บสตริง "199456" หากไม่ได้ระบุพารามิเตอร์ s2 สตริงย่อย s1 จะถูกลบออกจากสตริงเอาต์พุต กล่าวคือ หลังจากดำเนินการคำสั่ง

เซต ก=123456 เซต ข=%a:23=%

ตัวแปร b จะเก็บสตริง "1456"

การดำเนินการกับตัวแปรเช่นเดียวกับตัวเลข

เมื่อเปิดใช้งานการประมวลผลคำสั่งขั้นสูง (โหมดเริ่มต้นใน Windows XP) คุณสามารถถือว่าค่าตัวแปรสภาพแวดล้อมเป็นตัวเลขและทำการคำนวณทางคณิตศาสตร์ได้ เมื่อต้องการทำเช่นนี้ ใช้คำสั่ง SET กับสวิตช์ /A ลองยกตัวอย่าง ไฟล์แบตช์ add.bat โดยบวกตัวเลขสองตัวที่กำหนดเป็นพารามิเตอร์ บรรทัดคำสั่งและแสดงจำนวนผลลัพธ์บนหน้าจอ:

@ECHO OFF REM ตัวแปร M จะเก็บผลรวม SET /A M=%1+%2 ECHO ผลรวมของ %1 และ %2 เท่ากับ %M% REM ลบตัวแปร M SET M=

การเปลี่ยนแปลงในท้องถิ่นตัวแปร

การเปลี่ยนแปลงใดๆ ที่คุณทำกับตัวแปรสภาพแวดล้อมในไฟล์คำสั่งโดยใช้คำสั่ง SET จะยังคงอยู่หลังจากไฟล์ออก แต่จะมีผลเฉพาะภายในหน้าต่างคำสั่งปัจจุบันเท่านั้น นอกจากนี้ยังสามารถแปลการเปลี่ยนแปลงตัวแปรสภาพแวดล้อมภายในแบตช์ไฟล์ได้ กล่าวคือ เพื่อกู้คืนค่าของตัวแปรทั้งหมดโดยอัตโนมัติเหมือนก่อนที่จะเปิดตัวไฟล์ มีการใช้คำสั่งสองคำสั่งสำหรับสิ่งนี้: SETLOCAL และ ENDLOCAL คำสั่ง SETLOCAL กำหนดจุดเริ่มต้นของพื้นที่ การติดตั้งในท้องถิ่นตัวแปรสภาพแวดล้อม กล่าวอีกนัยหนึ่ง การเปลี่ยนแปลงสภาพแวดล้อมที่เกิดขึ้นหลังจากการรัน SETLOCAL จะถูกบันทึกไว้ในไฟล์แบตช์ปัจจุบัน คำสั่ง SETLOCAL แต่ละคำสั่งต้องมีคำสั่ง ENDLOCAL ที่สอดคล้องกันเพื่อเรียกคืนค่าตัวแปรสภาพแวดล้อมก่อนหน้า การเปลี่ยนแปลงสภาพแวดล้อมที่เกิดขึ้นหลังจากดำเนินการคำสั่ง ENDLOCAL จะไม่อยู่ในไฟล์แบตช์ปัจจุบันอีกต่อไป ค่าก่อนหน้าของพวกเขาจะไม่ถูกเรียกคืนเมื่อดำเนินการไฟล์นี้เสร็จสิ้น

บางครั้งก็จำเป็นต้องสร้าง ตัวแปรวันที่และเวลาวี cmd/batสคริปต์ หน้าต่างในแบบที่เราต้องการ ไม่ใช่วิธีที่ระบบปฏิบัติการมอบให้เรา

ตัวอย่างเช่น หากต้องการเพิ่มข้อมูลนี้ลงในไฟล์บันทึก หากต้องการบันทึกเวลาหรือวันที่ของเหตุการณ์ ให้สร้างไฟล์ที่มีชื่อที่ควรมีข้อมูลวันที่หรือเวลา (วัน เดือน ปี ชั่วโมง นาที วินาที มิลลิวินาที ) คุณไม่มีทางรู้หรอกว่างานของเราคืออะไร... มาใช้จินตนาการของเรากันเถอะ :)

ในตัวอย่างต่อไปนี้ เราจะเห็นการแจกแจงตัวแปรตามรูปแบบที่เราต้องการ

ชั่วโมง- ชั่วโมง 2 หลัก (คือชั่วโมงจะระบุมา) แบบฟอร์มต่อไปนี้ - 01, 02, ..., 09, ... , 12, ... 24)

ม. - นาที 2 ตัวอักษร

s - วินาที 2 สัญญาณ

ms - มิลลิวินาที 2 หลัก ด้วยเหตุผลบางประการตั้งแต่ 0 ถึง 99

dd - สัญญาณวันที่ 2

มม. - เดือน 2 ตัวอักษร

ปปปป - ปี 4 หลัก

ตัวอย่างการใช้ตัวแปร %วันที่%และ %เวลา%ในสคริปต์ คำสั่ง / ค้างคาวหน้าต่าง:

@ปิดเสียงสะท้อน
ตั้งชั่วโมง=%เวลา:~0.2%
ตั้ง ม.=%เวลา:~3.2%
ตั้งค่า s=%เวลา:~6.2%
ตั้งค่า ms=%เวลา:~9.2%
ตั้งค่าเคอร์ไทม์=%h%:%m%:%s%:%ms%
ตั้ง dd=%วันที่:~0.2%
ตั้ง มม.=%วันที่:~3.2%
ตั้ง ปปปป=%วันที่:~6.4%
ตั้ง curdate=%dd%-%mm%-%yyyy%
ตั้งค่า curdatetime=%curdate% %curtime%

echo เวลาปัจจุบันคือ %curdatetime%

ในบางเวอร์ชั่น รูปแบบวินโดวส์วันที่และเวลาออกจะแตกต่างกันดังนั้น สคริปต์นี้สามารถทำงานได้ตรงตามที่เราต้องการ

ตามทฤษฎี คุณสามารถแยกส่วนของตัวแปรใดๆ ก็ได้ในลักษณะเดียวกัน ประเด็นก็คือ รูปแบบที่นี่จะเป็นดังนี้:

หลักแรกหลังจาก: ~ คือจำนวนอักขระที่เราเริ่มรับค่า หลักที่สองคือจำนวนอักขระที่จะจับ

ดังนั้นปรากฎว่าเราสามารถรับส่วนใดส่วนหนึ่งของตัวแปรสภาพแวดล้อม Windows ที่มีอยู่สำหรับความต้องการของเราได้

ฉันรู้ตัวแปรต่อไปนี้ซึ่งมีค่าที่เราสามารถรับได้:

ชื่อ
คำอธิบาย
โปรไฟล์ผู้ใช้ทั้งหมด ส่งกลับตำแหน่งของโปรไฟล์ "ผู้ใช้ทั้งหมด"
ข้อมูลแอป ส่งกลับตำแหน่งเริ่มต้นสำหรับข้อมูลแอปพลิเคชัน
ซีดี บ่งบอกถึงเส้นทาง โฟลเดอร์ปัจจุบัน- เหมือนกับคำสั่ง CD โดยไม่มีอาร์กิวเมนต์
CMDCMDLINE คำสั่งที่แน่นอนที่ใช้ในการเริ่ม cmd.exe ปัจจุบัน
CMDEXTVERSION เวอร์ชันของส่วนขยายตัวประมวลผลคำสั่งปัจจุบัน
CommonProgramFiles ตำแหน่งของไดเร็กทอรี "Common Files" (โดยปกติจะเป็น %ProgramFiles%\Common Files)
ชื่อคอมพิวเตอร์ ชื่อคอมพิวเตอร์
คอมสเปค เส้นทางสู่การเรียกทำงานของเชลล์
วันที่ ส่งกลับวันที่ปัจจุบัน ใช้รูปแบบเดียวกับคำสั่ง date /t สร้างโดยคำสั่ง Cmd.exe
ระดับข้อผิดพลาด ส่งกลับรหัสข้อผิดพลาดของคำสั่งสุดท้ายที่ใช้ ความหมายไม่มี เท่ากับศูนย์มักจะแสดงว่ามีข้อผิดพลาด
โฮมไดรฟ์ ส่งกลับชื่อไดรฟ์ในเครื่อง เวิร์กสเตชันเชื่อมโยงกับโฮมไดเร็กตอรี่ของผู้ใช้ ตั้งค่าตามตำแหน่งของไดเร็กทอรีหลัก โฮมไดเร็กตอรี่ของผู้ใช้ถูกระบุในสแน็ปอิน " ผู้ใช้ท้องถิ่นและกลุ่ม”
โฮมพาธ การส่งคืน เส้นทางเต็มไปยังโฮมไดเร็กตอรี่ของผู้ใช้ ตั้งค่าตามตำแหน่งของไดเร็กทอรีหลัก โฮมไดเร็กทอรีของผู้ใช้ถูกระบุในสแนปอินผู้ใช้และกลุ่มภายในเครื่อง
โฮมแชร์ ส่งกลับเส้นทางเครือข่ายไปยังโฮมไดเร็กตอรี่ที่แชร์ของผู้ใช้ ตั้งค่าตามตำแหน่งของไดเร็กทอรีหลัก โฮมไดเร็กทอรีของผู้ใช้ถูกระบุในสแนปอินผู้ใช้และกลุ่มภายในเครื่อง
เข้าสู่ระบบเซิร์ฟเวอร์ ชื่อของตัวควบคุมโดเมนที่ใช้ในการอนุญาตผู้ใช้ปัจจุบัน
NUMBER_OF_PROCESSORS จำนวนโปรเซสเซอร์ในระบบ
ระบบปฏิบัติการ ชื่อระบบปฏิบัติการ Windows XP และ Windows 2000 ปรากฏเป็น Windows_NT
เส้นทาง ระบุเส้นทางการค้นหาสำหรับ ไฟล์ปฏิบัติการ.
เส้นทาง ส่งคืนรายการนามสกุลไฟล์ที่ระบบปฏิบัติการพิจารณาว่าสามารถเรียกใช้งานได้
PROCESSOR_สถาปัตยกรรม สถาปัตยกรรมโปรเซสเซอร์
PROCESSOR_IDENTIFIER คำอธิบายโปรเซสเซอร์
PROCESSOR_LEVEL หมายเลขรุ่นโปรเซสเซอร์
PROCESSOR_REVISION การแก้ไขโปรเซสเซอร์
โปรแกรมไฟล์ เส้นทางไป โฟลเดอร์โปรแกรมไฟล์
พร้อมท์ ส่งคืนตัวเลือกบรรทัดคำสั่งสำหรับล่ามปัจจุบัน สร้างโดยคำสั่ง Cmd.exe
สุ่ม เลขทศนิยมสุ่มตั้งแต่ 0 ถึง 32767 สร้างโดย Cmd.exe
SESSIONNAME ประเภทเซสชัน ค่าเริ่มต้นคือ "คอนโซล"
ไดรฟ์ระบบ ดิสก์ที่มันอยู่ โฟลเดอร์รูทหน้าต่าง
ระบบรูท เส้นทางโฟลเดอร์รูทของ Windows
อุณหภูมิหรือ TMP ส่งคืนโฟลเดอร์ชั่วคราวเริ่มต้นที่ใช้โดยแอปพลิเคชันที่ผู้ใช้ที่เข้าสู่ระบบสามารถเข้าถึงได้ แอปพลิเคชั่นบางตัวต้องการตัวแปร TEMP และแอปพลิเคชั่นบางตัวจำเป็นต้องใช้ตัวแปร TMP TEMP และ TMP อาจชี้ไปยังไดเร็กทอรีที่แตกต่างกัน แต่โดยปกติแล้วจะเหมือนกัน
เวลา ส่งกลับเวลาปัจจุบัน ใช้รูปแบบเดียวกับคำสั่ง time /t สร้างโดยคำสั่ง Cmd.exe
โดเมนผู้ใช้ ชื่อของโดเมนที่ผู้ใช้ปัจจุบันอยู่
ชื่อผู้ใช้ ชื่อผู้ใช้ปัจจุบัน
โปรไฟล์ผู้ใช้ เส้นทางไปยังโปรไฟล์ของผู้ใช้ปัจจุบัน
วินเดียร์ ไดเร็กทอรีที่ติดตั้ง Windows

0.00 (1 )

แนวทางทั่วไป

ไฟล์คำสั่งได้แก่ ไฟล์ข้อความมีส่วนขยาย ค้างคาวหรือ คำสั่งซึ่งมีบรรทัดแทนคำสั่งหรือชื่อของไฟล์ปฏิบัติการ เมื่อคุณเรียกใช้แบตช์ไฟล์ การควบคุมจะถูกควบคุมโดยตัวประมวลผลคำสั่งของระบบปฏิบัติการ (มักเรียกว่าตัวแปลคำสั่ง) ซึ่งจะอ่านและตีความบรรทัดในแบตช์ไฟล์ตามลำดับ สำหรับ Windows9X จะเป็นอันเสร็จสิ้น คอมมานด์.คอม, สำหรับ WinNT/2K/XP - cmd.exe- บรรทัดไฟล์แบตช์สามารถมีคำสั่งจากตัวประมวลผลคำสั่งเอง (FOR, GOTO, IF ฯลฯ ) หรือชื่อของโมดูลที่ปฏิบัติการได้ (net.exe, regedit.exe, win.com ฯลฯ ) บนระบบปฏิบัติการ WinNT/2K/XP คุณสามารถรับได้ ข้อมูลโดยย่อตามองค์ประกอบของคำสั่งโดยใช้บรรทัดคำสั่ง:

หรือตามคำสั่งเฉพาะ:

ชื่อคำสั่งช่วยเหลือ

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

< - การเปลี่ยนเส้นทางอินพุต

> - การเปลี่ยนเส้นทางเอาต์พุต (หรือ > > - การเปลี่ยนเส้นทางไปยังไฟล์ที่มีอยู่ เมื่อข้อมูลเอาต์พุตถูกต่อท้ายไฟล์)

เพื่อส่งออกสตรีมข้อมูลคำสั่งช่วยในไฟล์ help.txt บรรทัดคำสั่งจะเป็นดังนี้:

ช่วยเหลือ > help.txt

วิธีแสดงความช่วยเหลือสำหรับคำสั่ง GOTO ในไฟล์ goto.txt:

ช่วย GOTO > goto.txt

การใช้ตัวแปรสภาพแวดล้อม

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

SET [ตัวแปร=[สตริง]]

ตัวแปรชื่อตัวแปรสภาพแวดล้อม

เส้นสตริงอักขระที่กำหนดให้กับตัวแปรที่ระบุ

ตัวอย่างเช่น บรรทัดคำสั่ง

SET มีนา=วาสยา

จะเพิ่มตัวแปร myname ที่ใช้ค่า Vasya

คุณสามารถรับค่าของตัวแปรในโปรแกรมและแบตช์ไฟล์ได้โดยใช้ชื่อที่ล้อมรอบด้วยเครื่องหมายเปอร์เซ็นต์ ( %) - ยกตัวอย่างคำสั่ง

จะแสดงคำว่า เวลา และคำสั่ง

จะแสดงค่าของตัวแปรเวลาซึ่งใช้ค่าของเวลาปัจจุบัน

และบรรทัดคำสั่ง

SET PATH=C:myprog;%เส้นทาง%

จะเพิ่มเส้นทางการค้นหา โปรแกรมปฏิบัติการอธิบายโดยค่าของตัวแปร PATH ซึ่งเป็นไดเร็กทอรี C:myprog

การดำเนินการคำสั่ง SET โดยไม่มีพารามิเตอร์จะทำให้ค่าปัจจุบันของตัวแปรปรากฏบนหน้าจอในรูปแบบ:

NUMBER_OF_PROCESSORS=1 - จำนวนโปรเซสเซอร์

OS=Windows_NT - ประเภทระบบปฏิบัติการ

Path=E:WINDOWSsystem32;E:WINDOWS;E:Program FilesFar - เส้นทางการค้นหาสำหรับไฟล์ปฏิบัติการ

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH - ส่วนขยายสำหรับไฟล์ปฏิบัติการ

PROCESSOR_ARCHITECTURE=x86 - สถาปัตยกรรมโปรเซสเซอร์

PROCESSOR_IDENTIFIER=x86 ตระกูล 6 รุ่น 8 Stepping 1, AuthenticAMD - ตัวระบุโปรเซสเซอร์

PROCESSOR_LEVEL=6 - ระดับโปรเซสเซอร์ (หมายเลขรุ่น)

PROCESSOR_REVISION=0801 - เวอร์ชันโปรเซสเซอร์

ProgramFiles=E:Program Files - พาธไปยังโฟลเดอร์ "Program Files"

PROMPT=$P$G - รูปแบบพรอมต์บรรทัดคำสั่ง $P - พาธสำหรับไดเร็กทอรีปัจจุบัน เครื่องหมาย $G - ">"

SystemDrive=E: - อักษรระบุไดรฟ์ของระบบ

SystemRoot=E:WINDOWS - ไดเร็กทอรีระบบปฏิบัติการ Windows

ค่าของตัวแปรบางตัวจะไม่ถูกส่งกลับโดยคำสั่ง SET เหล่านี้เป็นตัวแปรที่มีค่าเปลี่ยนแปลงแบบไดนามิก:

%CD% - รับค่าของสตริงไดเร็กทอรีปัจจุบัน

%DATE% - ยอมรับค่า วันที่ปัจจุบัน.

%TIME% - ยอมรับค่าเวลาปัจจุบัน

%RANDOM% - ยอมรับค่าของตัวเลขทศนิยมแบบสุ่มในช่วง 1 -32767

%ERRORLEVEL% - ยอมรับค่าปัจจุบันของรหัสทางออกของงาน ERRORLEVEL

%CMDEXTVERSION% - รับค่าของเวอร์ชันตัวประมวลผลคำสั่ง CMD.EXE สำหรับการประมวลผลคำสั่งแบบขยาย

%CMDCMDLINE% - รับค่าของบรรทัดที่เรียกว่าเชลล์

คุณสามารถใช้บรรทัดคำสั่งเพื่อดูค่าของตัวแปร:

เสียงสะท้อน %ตัวแปร%

พารามิเตอร์อินพุตสำหรับไฟล์แบตช์

เป็นไปได้ที่จะส่งพารามิเตอร์บรรทัดคำสั่งไปยังไฟล์คำสั่งและใช้ค่าในคำสั่งในไฟล์คำสั่งเอง

ไฟล์ BAT< параметр1 > , < параметр2 >, ... < параметрN >

ในแบตช์ไฟล์นั้น พารามิเตอร์แรกจะพร้อมใช้งานเป็นตัวแปร %1 , ที่สอง - %2 ฯลฯ ชื่อของไฟล์แบตช์นั้นสามารถใช้เป็นตัวแปรได้ %0 - ตัวอย่างเช่นเรามาสร้างไฟล์แบตช์ซึ่งมีหน้าที่แสดงค่าของพารามิเตอร์ที่ป้อนบนหน้าจอ โดยทั่วไปคำสั่งที่ใช้แสดงข้อความคือ

เอคโค่< текст >

อย่างไรก็ตาม หากแทนที่ข้อความด้วย %1 พารามิเตอร์แรกจะถูกส่งกลับ โดยมี %2 - พารามิเตอร์ตัวที่สอง เป็นต้น

สร้างไฟล์ parm.bat โดยมีเนื้อหาดังต่อไปนี้:

echo พารามิเตอร์แรก=%1

echo พารามิเตอร์ที่สอง =%2

echo พารามิเตอร์ที่สาม = %3

และรันด้วยคำสั่งต่อไปนี้:

parm.bat ครั้งแรกที่สอง “สองคำ”

หลังจากดำเนินการแล้ว คุณจะเข้าใจวิธีการทำงานและต้องใส่พารามิเตอร์ที่มีการเว้นวรรค เครื่องหมายคำพูดคู่- เพื่อนำไปแปรรูป โปรเซสเซอร์คำสั่งเส้นไม่แสดงบนหน้าจอ คุณสามารถใช้คำสั่งได้ปิดเสียงสะท้อนโดยวางไว้ที่บรรทัดแรกของไฟล์แบตช์ หากต้องการสร้างบรรทัดในแบตช์ไฟล์ที่เชลล์ละเว้น ให้วางไว้ที่จุดเริ่มต้นของบรรทัดอาร์.อี.เอ็ม.< пробел > - วิธีนี้ทำให้คุณสามารถใส่ความคิดเห็น ซึ่งมักจะมีประโยชน์ในไฟล์แบตช์ขนาดใหญ่:

rem ECHO OFF ปิดโหมดการแสดงเนื้อหาของบรรทัดไฟล์คำสั่งบนหน้าจอ

REM จะแสดงเฉพาะผลลัพธ์ของการดำเนินการเท่านั้น

echo พารามิเตอร์แรก=%1

echo พารามิเตอร์ที่สอง =%2

echo พารามิเตอร์ที่สาม = %3

ลองแทนที่ ECHO OFF ด้วย @ECHO OFF - ผลลัพธ์จะพูดเพื่อตัวมันเอง เส้นที่ปิดโหมดเอาท์พุตจะไม่แสดงบนหน้าจออีกต่อไป

การเปลี่ยนภาพและป้ายกำกับ

ในไฟล์แบตช์ คุณสามารถใช้คำสั่งข้ามแบบมีเงื่อนไขซึ่งเปลี่ยนตรรกะของการดำเนินการขึ้นอยู่กับการปฏิบัติตามเงื่อนไขบางประการ เพื่อสาธิตวิธีใช้การข้ามแบบมีเงื่อนไข เรามาสร้างไฟล์แบตช์โดยมีวัตถุประสงค์เพื่อกำหนดอักษรระบุไดรฟ์ที่กำหนดไว้ล่วงหน้าให้กับ สื่อที่ถอดออกได้ซึ่งจะใช้เป็นแฟลชไดรฟ์ เงื่อนไขมีดังนี้ - มีแฟลชไดรฟ์ 2 ตัวโดยอันหนึ่งควรมองเห็นได้ใน Explorer เป็นไดรฟ์ X: และอันที่สองเป็นไดรฟ์ Y: ไม่ว่าจะเชื่อมต่อพอร์ต USB ใดก็ตาม เราจะถือว่า ล้อจริงสามารถเชื่อมต่อเป็น F: หรือ G: เราจะระบุดิสก์โดยการมีไฟล์ที่มีชื่อที่แน่นอน (ควรซ่อนไฟล์ดังกล่าวในไดเร็กทอรีรากและตั้งชื่อให้เป็นสิ่งที่ผิดปกติ):

Flashd1.let - บนดิสก์แผ่นแรก

Flashd2.let - ในวินาที

เหล่านั้น. วัตถุประสงค์ของแบตช์ไฟล์คือเพื่อตรวจสอบการมีอยู่ของ ดิสก์แบบถอดได้ ฉ:และ กรัม:ไฟล์ Flashd1.letหรือ Flashd2.letและกำหนดอักษรระบุไดรฟ์ ทั้งนี้ขึ้นอยู่กับอันใดที่มีอยู่ เอ็กซ์:หรือ ใช่:

หากต้องการค้นหาไฟล์บนดิสก์ให้ใช้คำสั่งหากมีอยู่:

คำสั่งชื่อไฟล์ IF EXIST

วิธีที่ง่ายที่สุดในการใช้เป็นคำสั่งคือย่อยซึ่งตรงกับชื่อไดรฟ์และไดเร็กทอรี

รายการ X: C: - สร้างไดรฟ์เสมือน X: ซึ่งเนื้อหาจะเป็นไดเร็กทอรีรากของไดรฟ์ C:

สร้างแบตช์ไฟล์ setXY.bat โดยมีบรรทัดต่อไปนี้:

หลังจากเรียกใช้ไฟล์ดังกล่าว คุณจะมีไดรฟ์ X: และ Y: แต่ถ้าคุณเรียกใช้งานไฟล์ดังกล่าวอีกครั้ง คำสั่ง SUBST จะแสดงข้อความแสดงข้อผิดพลาด - ท้ายที่สุดแล้ว ไดรฟ์ X: และ Y: มีอยู่แล้ว

ขอแนะนำให้ข้ามการดำเนินการ SUBST หากดิสก์เสมือน X: และ Y: ถูกสร้างขึ้นแล้ว (หรือลบออกโดยใช้ SUBST พร้อมด้วยพารามิเตอร์ -d ก่อนทำการติดตั้ง) แก้ไขไฟล์แบตช์โดยใช้ไป- ถ่ายโอนการควบคุมไปยังบรรทัดของไฟล์แบตช์ตามป้ายกำกับ

ป้ายกำกับ GOTO

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

REM หากไม่มี X - จากนั้นไปที่ป้ายกำกับ SETX

หากไม่มี X: ไปที่ SETX

REM หากมี X: - มาดูการตรวจสอบการมีอยู่ของ Y:

หากมี G:flashd1.let SUBST X: G:

หากมีอยู่ F:flashd1.let SUBST X: F:

REM ถ้า Y: มีอยู่ - กรอกไฟล์แบตช์

หากมี Y: ไปที่ทางออก

หากมี G:flashd2.let SUBST Y: G:

หากมีอยู่ F:flashd2.let SUBST Y: F:

REM ออกจากแบตช์ไฟล์

ข้อความแสดงข้อผิดพลาด SUBST หายไป สัญญาณของข้อผิดพลาดเมื่อดำเนินการคำสั่งสามารถติดตามได้ในไฟล์คำสั่งโดยการวิเคราะห์ตัวแปรระดับข้อผิดพลาดซึ่งเป็นค่าที่เกิดขึ้นระหว่างการทำงานของโปรแกรมส่วนใหญ่ ERRORLEVEL จะเป็น 0 หากโปรแกรมเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด และ 1 หากเกิดข้อผิดพลาด อาจมีค่าอื่น ๆ หากมีการระบุไว้ในโปรแกรมที่รัน

คุณยังสามารถใช้แบตช์ไฟล์เป็นคำสั่งในบรรทัดในแบตช์ไฟล์ได้ นอกจากนี้ ในการถ่ายโอนและกลับไปยังจุดดำเนินการของไฟล์แบตช์ที่เรียก คำสั่งจะถูกใช้เรียก- มาสร้างไฟล์คำสั่ง test.bat โดยมีเนื้อหาดังต่อไปนี้:

ECHO โทร 1.bat

เอคโค่กลับมา

และไฟล์ 1.bat ที่มีคำสั่งหยุดชั่วคราว,ระงับการดำเนินการแบตช์ไฟล์จนกว่าจะกดปุ่มใด ๆ

เมื่อรัน test.bat ข้อความจะปรากฏขึ้นบนหน้าจอ

โทร 1.ค้างคาว

และการควบคุมจะมอบให้กับ 1.bat ด้วยคำสั่งหยุดชั่วคราว หลังจากกดปุ่มบนแป้นพิมพ์แล้ว การควบคุมจะถูกส่งไปยังบรรทัดคำสั่ง “ECHO Return” และมันจะแสดงบนหน้าจอ

หากคุณลบ CALL ออกจาก test.bat การส่งคืนจากไฟล์ 1.bat จะไม่ถูกดำเนินการ อย่างไรก็ตาม ด้วยการถ่ายโอนการควบคุมไปยังไฟล์แบตช์ คุณสามารถจัดระเบียบให้เป็นลูปได้ ลองเพิ่มบรรทัดต่อไปนี้ต่อท้ายไฟล์ test.bat:

คุณสามารถแยกออกจากลูปไฟล์แบตช์ได้โดยการกด CTRL-Break คุณสามารถใช้คำสั่ง CALL เพื่อเรียกขั้นตอนภายในแบตช์ไฟล์ได้ ในกรณีนี้ ชื่อจะไม่ถูกใช้เป็นอาร์กิวเมนต์ ไฟล์ภายนอกและป้ายกำกับ:
....
โทร: proc1
....
:proc1
....
ออก
....

การสร้างไฟล์.

ไม่มีคำสั่งพิเศษใน Windows ในการสร้างไฟล์ แต่คุณสามารถทำได้โดยไม่ต้องมีหลายวิธี:

การคัดลอกจากคอนโซลไปยังไฟล์

คัดลอกคอน myfile.txt

เมื่อดำเนินการคำสั่งนี้ ข้อมูลจากแป้นพิมพ์ (อุปกรณ์ CON) จะถูกเขียนลงในไฟล์ myfile.txt กด F6 หรือ ชุดค่าผสม CTRL-Zจะทำให้เอาท์พุตเสร็จสมบูรณ์

การเปลี่ยนเส้นทางเอาต์พุต

เสียงสะท้อน 1 > myfile.txt

การรันคำสั่งนี้จะสร้างไฟล์ myfile.txt ที่มีอักขระ “1”

การรวมกันของการเปลี่ยนเส้นทางอินพุตและเอาต์พุต:

คัดลอกคอน > myfile.txt< xyz

เมื่อดำเนินการคำสั่งนี้ เช่นเดียวกับในกรณีแรก จะใช้การคัดลอกจากคอนโซลไปยังไฟล์ แต่แทนที่จะป้อนข้อมูลจากแป้นพิมพ์ จะใช้อินพุตจากอุปกรณ์ xyz ที่ไม่มีอยู่จริง ระบบจะแสดงข้อความแจ้งว่าไม่มีอุปกรณ์ดังกล่าว แต่จะสร้างไฟล์ว่าง myfile.txt ได้สำเร็จ
ตัวเลือกที่ง่ายมาก - การคัดลอกจากอุปกรณ์สมมติที่มีชื่อ ไม่มีเพื่อยื่น
คัดลอก null myfile.txt

หากคุณจำเป็นต้องสร้างไฟล์ว่างบ่อยครั้ง คุณสามารถเตรียมไฟล์แบตช์ของคุณเองได้ (เช่น - newfile.bat หรือที่ดีกว่านั้น - nf.bat) และตั้งชื่อ สร้างไฟล์ส่งผ่านเป็นพารามิเตอร์เมื่อเริ่มต้น

เนื้อหาไฟล์:

วางไฟล์แบตช์นี้ไว้ ไดเร็กทอรีระบบ(C:windowssystem32 หรืออื่นๆ ที่พบในเส้นทางการค้นหา PATH)

บรรทัดคำสั่ง:

newfile.bat myfile.txt

หรือ

nf.bat myfile.txt

หรือ
nf myfile.txt

นี่คือทีมของคุณ nfเพื่อสร้าง ไฟล์เปล่าบนบรรทัดคำสั่ง

การกำหนดอักษรระบุไดรฟ์เดียวกันให้กับไดรฟ์แบบถอดได้

ความท้าทายคือการ USB แบบถอดได้สามารถเข้าถึงไดรฟ์ (แฟลชไดรฟ์) ด้วยตัวอักษรเดียวกันเสมอ ไม่ว่าจะใช้งานกับคอมพิวเตอร์เครื่องใดหรือเชื่อมต่อด้วยวิธีใดก็ตาม เพื่อแก้ปัญหานี้ เราจะใช้คำสั่ง SUBST ที่กล่าวไปแล้วข้างต้น ให้เราเลือกตัวอักษรที่ต้องการสำหรับดิสก์แบบถอดได้ เช่น - X ชื่อของดิสก์ที่ใช้เปิดแบตช์ไฟล์จะมีให้ใช้งานเป็นตัวแปร %~d0 สร้างแบตช์ไฟล์ที่มีเนื้อหาดังต่อไปนี้:
@ปิดเสียงสะท้อน
ส่วนย่อย X: %~d0
การสร้างดิสก์เสมือน X: ซึ่งเกี่ยวข้องกับอะไร ฟิสิคัลดิสก์จากตำแหน่งที่เรียกใช้ไฟล์แบตช์
สามารถรับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับค่าการทดแทนสำหรับตัวแปร %0 ได้จากไฟล์แบตช์ต่อไปนี้:

@ปิดเสียงสะท้อน
การประมวลผลไฟล์เสียงสะท้อน - %0
ECHO วันที่/เวลาที่ไฟล์แบตช์ถูกสร้าง/แก้ไข - %~t0
เส้นทางไฟล์ ECHO แบตช์ - "%~f0"
ดิสก์ไฟล์คำสั่ง ECHO - %~d0
ไดเรกทอรีไฟล์ ECHO Batch - "%~p0"
ชื่อไฟล์แบตช์ ECHO - %~n0
นามสกุลไฟล์ ECHO แบตช์ - %~x0
ECHO ชื่อย่อและนามสกุล - %~s0
แอ็ตทริบิวต์ไฟล์แบตช์ ECHO - %~a0
ขนาดไฟล์แบตช์ ECHO - %~z0

การสร้างเอกสารสำคัญรุ่นต่างๆ ตามวันที่และเวลา

มาแก้ไขปัญหาต่อไปนี้ - เราจำเป็นต้องสร้างไฟล์เก็บถาวรที่อยู่ในไดเร็กทอรี C:Program FilesFAR ชื่อ ไฟล์เก็บถาวรควรประกอบด้วยเวลาปัจจุบัน (hour. minutes.seconds - HH.MM.SS.rar) และควรวางไว้ใน แค็ตตาล็อกใหม่ซึ่งชื่อจะต้องประกอบด้วยวันที่ปัจจุบัน (วัน.เดือน.ปี - วว.ดด.ปปป) สำหรับการเก็บถาวรเราจะใช้ RAR archiver รูปแบบการเปิดตัวสำหรับการสร้างไฟล์เก็บถาวร:

RAR เอ-อาร์< путь и имя архива > < Путь и имя архивируемых данных >

- คำสั่งสร้างไฟล์เก็บถาวร
-ร- คีย์ที่กำหนดการเก็บถาวรไดเร็กทอรีย่อย (เนื่องจากมีไดเร็กทอรีย่อยในโฟลเดอร์ต้นทาง)

ดังนั้น ในการแก้ปัญหา คุณต้องสร้างชื่อและเส้นทางสำหรับ RAR อย่างถูกต้อง สำหรับสิ่งนี้เราจะใช้ปัจจัยต่อไปนี้:

  • ในไฟล์แบตช์คุณสามารถเข้าถึงวันที่และเวลาปัจจุบัน - ตัวแปร %DATE% และ %TIME%
  • ในแบตช์ไฟล์ คุณสามารถสร้างตัวแปรชั่วคราวได้โดยใช้คำสั่ง SET
  • ค่าของตัวแปรชั่วคราวสามารถสร้างขึ้นตาม %DATE% และ %TIME% โดยการละเว้นและ (หรือ) เปลี่ยนชิ้นส่วนโดยใช้คำสั่ง SET เดียวกัน

    วันที่ที่ได้รับจากตัวแปร %DATE% พร้อมการตั้งค่าภูมิภาคมาตรฐานจะมีลักษณะดังนี้:
    จันทร์ที่ 21/01/2548- วันในสัปดาห์ (2 ตัวอักษร) - ช่องว่าง - วันที่ (10 ตัวอักษร)
    ตัวอย่างเช่น เรามาสร้างไดเร็กทอรีด้วยคำสั่ง MD< имя каталога >.
    เราสร้างตัวแปรชั่วคราว VDATE ในหน่วยความจำและกำหนดค่าของตัวแปรสภาพแวดล้อม DATE โดยไม่มีอักขระ 3 ตัวแรก - 01/20/2548:

    ตั้ง VDATE=%วันที่:~3%

    สร้างไดเร็กทอรีบนไดรฟ์ C: ซึ่งมีชื่อ = วันที่ปัจจุบันจากตัวแปร VDATE:

    MD C:\%VDATE%
    หลังจากดำเนินการคำสั่งนี้ ไดเร็กทอรีชื่อ 01/20/2005 จะถูกสร้างขึ้นบนไดรฟ์ C:

    เวลาที่ได้รับจากตัวแปร %TIME%:
    14:30:59.93 - ชั่วโมง นาที วินาที หนึ่งในร้อยวินาที
    หลายร้อยอาจไม่จำเป็นในชื่อไฟล์เก็บถาวร สร้างตัวแปรชั่วคราว VTIME และกำหนดเวลาปัจจุบันโดยไม่มีอักขระ 3 ตัวสุดท้าย
    ตั้งค่า VTIME=%เวลา:~0,-3%
    ตอนนี้ VTIME = 14:30:59 แต่ไม่สามารถใช้เครื่องหมาย /// ในชื่อไฟล์ได้ ดังนั้นให้แทนที่ด้วยจุด
    ตั้งค่า VTIME=%VTIME::=.%
    ตัวแปร VTIME จะใช้ค่า 14.30.59 สำหรับชื่อไฟล์ที่จะทำ

    มาเปิดตัว Archiver กัน:

    ตอนนี้คุณสามารถสร้างแบตช์ไฟล์ที่มีเนื้อหา:

    ตั้ง VDATE=%วันที่:~3%
    เอ็มดี c:\%VDATE%
    ตั้งค่า VTIME=%เวลา:~0,-3%
    ตั้งค่า VTIME=%VTIME::=.%
    rar a -r C:\%VDATE%\%VTIME%.rar "C: โปรแกรม filesfar*.*"

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

    การสร้างไฟล์เก็บถาวรโดยใช้ตัวแปรโปรไฟล์ผู้ใช้

    ไฟล์แบตช์นี้สร้างการเก็บถาวรเนื้อหาของโฟลเดอร์ "My Documents" ของผู้ใช้ Win2K/XP โดยวางไว้ในไดเร็กทอรี
    C:ARHIVเอกสารของฉันชื่อผู้ใช้DateTime

    มีการใช้ตัวแปร USERPROFILE, USERNAME, WINDIR ดังนั้นไฟล์แบตช์นี้จะไม่ทำงานใน WIN9X (แม้ว่าหากต้องการคุณสามารถแทรกคำสั่งลงใน autoexec.bat เพื่อตั้งค่าของตัวแปรเหล่านี้และใช้ในเวอร์ชันผู้ใช้คนเดียวโดยแทบไม่มีการเปลี่ยนแปลงเลย) เนื้อหาของไฟล์แบตช์ได้รับการแสดงความคิดเห็นและไม่ควรทำให้เกิดปัญหามากนัก หากคุณเข้าใจตัวอย่างก่อนหน้านี้:

    @ปิดเสียงสะท้อน
    rem ตั้งค่าตัวแปร FROM - ตำแหน่งที่จะรับข้อมูลสำหรับการเก็บถาวร
    ตั้งค่าจาก=%USERPROFILE%เอกสารของฉัน
    rem ตั้งค่าตัวแปรเป็น - ตำแหน่งที่จะวางไฟล์เก็บถาวร
    ตั้งเป็น=C:arhivMyเอกสาร\%ชื่อผู้ใช้%
    rem มาสร้างไดเร็กทอรีการบำรุงรักษากันดีกว่า
    เอ็มดี "%ถึง%"
    rem มาสร้างชื่อของไดเร็กทอรีย่อยจากวันที่ปัจจุบัน
    rem วันที่ปัจจุบันพร้อมการตั้งค่าเริ่มต้นสำหรับ Win2K - จันทร์ 04/25/2548
    rem วันที่ปัจจุบัน พร้อมการตั้งค่าเริ่มต้นสำหรับ WinXP - 04/25/2005
    rem จากวันที่ปัจจุบันเราจะสร้างชื่อของไดเรกทอรีย่อย - 04/25
    rem โดยค่าเริ่มต้น Windir สำหรับ WinXP คือ C:WINDOWS และสำหรับ Win2K - C:WINNT
    ถ้า /I %Windir% == C:WINNT ไปที่ Win2K
    ตั้ง vdate=%DATE:~0.-5%
    ไปที่ SetFileName
    :Win2K
    ตั้ง vdate=%DATE:~3.-5%
    rem มาสร้างชื่อไฟล์เก็บถาวรตั้งแต่เวลาปัจจุบัน - 12:00:00.99 น
    rem เราจะทิ้งหนึ่งในร้อยของวินาทีและแทนที่สัญลักษณ์: ด้วยสัญลักษณ์ ผลการแข่งขัน - 12.00.00 น
    :SetFileName
    ตั้งค่า vtime=%TIME:~0,-3%
    ตั้งค่า vtime=%vtime::=.%
    rem สร้างไดเรกทอรีย่อยสำหรับไฟล์เก็บถาวร
    md "%TO%\%VDATE%"
    rem คำสั่งสำหรับการเก็บถาวร จำเป็นต้องใช้สวิตช์ -r สำหรับการเก็บถาวรด้วยโฟลเดอร์ย่อย
    ตัวเลือก rem สำหรับผู้จัดเก็บ ARJ: arj a -r "%TO%\%VDATE%\%VTIME%.arj" "%FROM%*.*"
    rem เมื่อใช้ โปรแกรมเก็บถาวร RAR:
    rar -r "%TO%\%VDATE%\%VTIME%.rar" "%FROM%*.*"

    ดำเนินการคำสั่งตามกำหนดเวลา

    ใน WIN2K/XP จะมียูทิลิตีบรรทัดคำสั่งที่,ช่วยให้คุณสามารถรันคำสั่งหรือแบตช์ไฟล์ได้ เวลาที่กำหนดในท้องถิ่นหรือ คอมพิวเตอร์ระยะไกล- หากต้องการใช้คำสั่ง AT จะต้องเรียกใช้บริการ Task Scheduler (โดยปกติจะเริ่มต้นตามค่าเริ่มต้นระหว่างการติดตั้งระบบ)

    AT [\ชื่อคอมพิวเตอร์] [ [รหัส] | /ลบ ]

    ณ เวลา [\ชื่อคอมพิวเตอร์]

    [ /ทุก:วัน[,...] | /NEXT:day[,...]] "คำสั่ง"

    \ชื่อคอมพิวเตอร์ชื่อของคอมพิวเตอร์ระยะไกล หากละเว้นพารามิเตอร์นี้

    ใช้คอมพิวเตอร์ท้องถิ่น

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

    /ลบยกเลิกงานที่กำหนดเวลาไว้ หากละเว้นรหัสงาน

    ยกเลิกงานทั้งหมดที่กำหนดไว้ตามที่ระบุ

    คอมพิวเตอร์.

    /ใช่ยกเลิกคำขอยืนยันเมื่อยกเลิกทั้งหมด

    งานที่วางแผนไว้

    เวลาถึงเวลาที่จะเริ่มคำสั่ง

    /โต้ตอบอนุญาตให้มีปฏิสัมพันธ์กับผู้ใช้

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

    /ทุกวัน[,...]งานจะเริ่มในวันที่ระบุของสัปดาห์หรือ

    เดือน. หากละเว้นวันที่ ระบบจะใช้วันที่ปัจจุบัน

    /ถัดไป:วัน[,...]งานจะทำงานในวันที่ระบุถัดไปของสัปดาห์

    (เช่นวันพฤหัสบดีหน้า) หากละเว้นวันที่

    ใช้วันที่ปัจจุบันของเดือน

    "ทีม"ชื่อไฟล์คำสั่งหรือแบตช์

    ตัวอย่างการใช้งาน:

    อะนาล็อกของ "นาฬิกาปลุก" - หน้าต่างป๊อปอัปพร้อมข้อความเตือนกระแสหรือ ไปยังผู้ใช้ที่ระบุเกี่ยวกับความจำเป็นในการดำเนินการบางอย่าง เพื่อส่งข้อความถึงผู้ใช้ที่เราใช้ยูทิลิตี้นี้NET.EXE

    เวลา 13:50 น. net.exe ส่ง * เวลาสำหรับกาแฟ

    เวลา 17:50 น. net.exe ส่ง User Time เพื่อกลับบ้าน

    ที่ \SERVER 13:45 net.exe ส่ง คุณต้องรีสตาร์ทเซิร์ฟเวอร์

    ดูรายการงานที่กำหนดเวลาไว้:

    การลบงานที่กำหนดเวลาไว้แล้ว:

    ที่ 3 /ลบ- การลบงานหมายเลข 3

    AT /ลบ /ใช่- การลบงานทั้งหมด

    “แผงควบคุม” - “งานที่กำหนดเวลาไว้” ช่วยให้คุณสามารถดู เปลี่ยนแปลง และลบงานที่สร้างโดยทีมได้ ที่การมอบหมายงาน

    การหยุดและการเริ่มต้นบริการระบบ

    หากต้องการหยุดและเริ่มบริการ Win2K/XP จากบรรทัดคำสั่ง ให้ใช้คำสั่ง NET.EXE

    NET.EXE หยุด< имя службы >

    NET.EXE เริ่มต้น< имя службы >

    คุณสามารถใช้ทั้งชื่อสั้นและชื่อเต็มได้ ("Dnscache" เป็นชื่อสั้น "DNS client" เป็นชื่อเต็มของบริการ) ชื่อบริการที่มีการเว้นวรรคจะอยู่ในเครื่องหมายคำพูดคู่ ตัวอย่างการรีสตาร์ทบริการ “DNS Client”

    หยุดสุทธิ "ไคลเอนต์ DNS"

    เริ่มต้นสุทธิ "ไคลเอ็นต์ DNS"

    เช่นเดียวกันโดยใช้ชื่อสั้น:

    หยุดสุทธิ Dnscache

    Dnscache เริ่มต้นสุทธิ

    สามารถคัดลอกชื่อเต็มของบริการได้จาก “บริการ” -< Имя службы >- “คุณสมบัติ” - “ชื่อที่แสดง”

    ในการจัดการบริการ การใช้ยูทิลิตี้ PsService.exe จากยูทิลิตี้ PsTools จะสะดวกกว่ามาก ยูทิลิตี้นี้ไม่จำเป็นต้องติดตั้งและทำงานบนระบบปฏิบัติการ Windows ใด ๆ นอกเหนือจากการเริ่มต้นและหยุดบริการแล้ว ยังช่วยให้คุณค้นหาบริการเฉพาะบนคอมพิวเตอร์ได้อีกด้วย เครือข่ายท้องถิ่นสำรวจสถานะและการกำหนดค่าบริการ เปลี่ยนประเภทการเริ่มต้น หยุดบริการชั่วคราว ดำเนินการต่อ เริ่มต้นใหม่

    ที่จะทำงานร่วมกับ บริการระบบใน Windows XP คุณสามารถใช้ยูทิลิตี้นี้ได้ sc.exeซึ่งช่วยให้คุณไม่เพียงหยุด/เริ่มบริการเท่านั้น แต่ยังสำรวจสถานะ พารามิเตอร์การเริ่มต้นและการทำงาน เปลี่ยนการกำหนดค่า และยังใช้งานได้ไม่เพียงกับบริการของระบบเท่านั้น แต่ยังรวมถึงไดรเวอร์ด้วย หากคุณมีสิทธิ์ คุณสามารถจัดการบริการได้ไม่เพียงแต่บนเครื่องภายในเครื่องเท่านั้น แต่ยังรวมถึงเครื่องระยะไกลด้วย ตัวอย่าง:
    sc.exe หยุด DNSCache- หยุดบริการ DNSCache บนเครื่องคอมพิวเตอร์
    sc\192.168.0.1 สอบถาม DNSCache- สำรวจสถานะของบริการ DNSCache บนคอมพิวเตอร์ที่มีที่อยู่ IP 192.168.0.1
    sc\COMP เริ่ม DNSCacheเริ่มบริการ DNSCache บนคอมพิวเตอร์ COMP
    คุณสามารถรับความช่วยเหลือในการทำงานกับยูทิลิตี้นี้ได้โดยการป้อน:
    สค/?

    การแสดงค่าของตัวแปร ERRORLEVEL

    ไฟล์แบตช์แบบง่ายนี้จะแสดงค่า ระดับข้อผิดพลาดของตัวแปรบนบรรทัดคำสั่งเฉพาะ ขั้นแรกจะตรวจสอบการมีอยู่ของพารามิเตอร์อินพุตอย่างน้อยหนึ่งรายการ และหากไม่มีการระบุไว้ จะมีข้อความแสดงข้อผิดพลาดปรากฏขึ้นและทางออกจะเกิดขึ้น หากมีการระบุพารามิเตอร์อย่างน้อยหนึ่งรายการ พารามิเตอร์อินพุตถือเป็นบรรทัดคำสั่งและดำเนินการ และค่า ERRORLEVEL จะถูกส่งกลับโดยใช้คำสั่ง ECHO เนื้อหาของไฟล์ (ฉันเรียกมันว่า echoEL.bat):

    @ปิดเสียงสะท้อน
    ถ้า "%1" NEQ "" GOTO PARMOK
    ECHO คุณต้องตั้งค่าบรรทัดคำสั่งเพื่อกำหนด ERRORLEVEL
    ออก
    :ปาร์ม็อก
    %1 %2 %3 %4 %5 %6 %7 %8
    เสียงสะท้อน %1 %2 %3 %4 %5 %6 %7 %8 ระดับข้อผิดพลาด=%ระดับข้อผิดพลาด%

    เปิดตัวตัวอย่าง:
    echoEL.bat แบ่งปันสุทธิ
    - คำสั่ง NET SHARE จะถูกดำเนินการ (ให้รายการทรัพยากรเครือข่ายที่ใช้ร่วมกัน) และรหัส ERRORLEVEL จะถูกออก
    echoEL.bat NET แบ่งปัน X"="C:
    - คำสั่ง NET SHARE X:=C: จะถูกดำเนินการ (สร้างไฟล์ที่แชร์ ทรัพยากรเครือข่ายด้วยชื่อ X และเส้นทางไปยังไดเร็กทอรีรากของไดรฟ์ C :) โปรดทราบว่าสัญลักษณ์ = อยู่ในเครื่องหมายคำพูดคู่
    ตัวเลือกที่ระบุไว้ข้างต้นจะตั้งค่าบรรทัดคำสั่งที่ถูกต้อง แต่ลองตั้งค่าพารามิเตอร์ผิดเป็น NET.EXE หรือคำสั่งที่ไม่มีอยู่ แล้วคุณจะเห็นว่า ERRORLEVEL จะใช้ค่าใด และโปรดทราบว่าบรรทัดคำสั่งทำงานได้จริง และตัวอย่าง ตัวเลือก “echoEL.bat รูปแบบ A:” จะเริ่มฟอร์แมตฟล็อปปี้ดิสก์ในไดรฟ์ A:

    การสนทนากับผู้ใช้

    หากต้องการโต้ตอบกับผู้ใช้ คุณสามารถใช้คำสั่ง:
    SET /พี< имя переменной >=< текст >
    เมื่อดำเนินการแล้ว หน้าจอจะแสดงขึ้นมา ข้อความ < текст >และคาดหวังข้อความตอบกลับ ตัวอย่าง - ขอรหัสผ่านและกำหนดค่าให้กับตัวแปร "pset":

    ตั้ง /p pset="ใส่รหัสผ่าน - "
    รหัสผ่าน echo คือ - %pset%

    ข้อเสีย วิธีนี้คือความเป็นไปไม่ได้ที่จะดำเนินการแบตช์ไฟล์ต่อไปในกรณีที่ไม่มีการตอบกลับของผู้ใช้ ดังนั้นบ่อยครั้งมากแทนที่จะใช้การตั้งค่า โปรแกรมของบุคคลที่สาม- หนึ่งในนั้นก็คือ CHOICE.COMดาวน์โหลด (1.7kb)
    CHOICE ส่งข้อความตัวอักษรให้ผู้ใช้และรอให้ผู้ใช้เลือกหนึ่งในตัวเลือกการตอบกลับที่กำหนด (การกดปุ่มบนแป้นพิมพ์) ขึ้นอยู่กับผลการเลือก ตัวแปร ERRORLEVEL จะถูกสร้างขึ้น โดยค่าจะเท่ากับเลขลำดับของการเลือก ตามค่าเริ่มต้น มีสองตัวเลือก - Y หรือ N หากคำตอบคือ Y - ERRORLEVEL=1 ถ้า N - ERRORLEVEL=2 คุณสามารถใช้ตัวเลือกการเลือกได้มากกว่า 2 ตัวเลือก และสามารถตั้งค่าการเลือกเริ่มต้นได้เมื่อผู้ใช้อยู่ที่ เวลาที่แน่นอนฉันไม่ได้กดปุ่มเดียว รูปแบบบรรทัดคำสั่ง:

    ทางเลือก ตัวเลือก] c,nn]
    /C[:]choices - กำหนดตัวเลือกที่ถูกต้อง หากไม่ได้ระบุ - YN
    /N - ไม่แสดงตัวเลือกการเลือก
    /S - ตัวพิมพ์เล็กและ ตัวพิมพ์ใหญ่แตกต่างกัน
    /T[:]c,nn - การเลือกเริ่มต้นคือ "c" หลังจาก "nn" วินาที
    ข้อความ - เอาต์พุตสตริงข้อความตามคำขอ

    มาสร้างแบตช์ไฟล์ที่สาธิตการใช้ CHOICE กันดีกว่า จะตอบสนองต่อการกดปุ่ม "1", "2", 3" และ "0" เมื่อกด "0" จะเป็นอันเสร็จสิ้นและเมื่อกดที่เหลือจะมีข้อความส่งถึงผู้ใช้หากไม่มีสิ่งใดเกิดขึ้น กดภายใน 10 วินาทีก็เสร็จสิ้น

    @ปิดเสียงสะท้อน
    :ทางเลือก
    ทางเลือก /C:1230 /T:0.10 ตัวเลือกของคุณ
    หาก % ERRORLEVEL% เท่ากับ 4 GOTO ออก
    สะท้อนตัวเลือกของคุณ=%ERRORLEVEL%
    ไปที่ตัวเลือก
    :ออก

    ตอนนี้ เมื่อใช้ CHOICE คุณสามารถสร้างไฟล์แบตช์ได้ ซึ่งผู้ใช้สามารถกำหนดตรรกะได้

    ความล่าช้าในไฟล์แบตช์

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

    : SLEEP N - โดยที่ N คือจำนวนวินาทีที่จะดีเลย์

    หากไม่มีชุดทรัพยากร คุณสามารถใช้คำสั่ง CHOISE ที่กล่าวถึงก่อนหน้านี้โดยไม่ต้องมีเอาต์พุตข้อความและสร้างการตอบสนองอัตโนมัติใน nn วินาที (1-99):

    Choice.com /T:y,10 /N - ดีเลย์ 10 วินาที

    วิธีการที่เป็นสากลมากขึ้นจะขึ้นอยู่กับการส่ง Ping ไปยังอินเทอร์เฟซแบบย้อนกลับด้วยจำนวนแพ็กเก็ตที่ต้องการ Ping สำหรับอินเทอร์เฟซแบบย้อนกลับ (ชื่อโฮสต์คือ localhost หรือ ที่อยู่ IP 127.0.0.1) ถูกดำเนินการโดยไม่มี การส่งจริงข้อมูลเช่น แทบจะในทันที และช่วงเวลาระหว่างการส่ง Ping คือ 1 วินาที ด้วยการระบุจำนวนการ Ping โดยใช้สวิตช์ "-n" คุณสามารถได้รับความล่าช้า n วินาที:

    Ping 127.0.0.1 -n 30 > nul - จะให้ความล่าช้า 30 วินาที

    ค้นหาคอมพิวเตอร์ที่ใช้งานแอปพลิเคชัน

    หากต้องการใช้สคริปต์นี้ ให้ใช้ยูทิลิตีจากแพ็กเกจ PSTools(คำอธิบายสั้น ๆ ) มาสร้างแบตช์ไฟล์ที่ค้นหาเครือข่ายท้องถิ่นเพื่อหาคอมพิวเตอร์ที่กำลังรันโปรแกรม โดยชื่อ (ส่วนเริ่มต้นของชื่อ) จะถูกระบุเป็นพารามิเตอร์เมื่อเริ่มต้น เช่น เกม . หากตรวจพบ ข้อความจะถูกส่งไปยังคอมพิวเตอร์ ADMINCOMP และแอปพลิเคชันที่ตรวจพบจะถูกบังคับให้ยุติการทำงาน ในการค้นหาเราจะใช้ยูทิลิตี้ Pslist.exe และวิเคราะห์โค้ดส่งคืน ค่าของตัวแปร ERRORLEVEL เท่ากับศูนย์หมายความว่ายูทิลิตี้ตรวจพบกระบวนการบนคอมพิวเตอร์ระยะไกลที่ตรงตามเงื่อนไขการค้นหา เราจะตั้งชื่อกระบวนการเพื่อค้นหาเป็นพารามิเตอร์เมื่อเรียกใช้ไฟล์แบตช์ มาตั้งชื่อไฟล์แบตช์ของเรากัน ปล.ค้างคาว- การรันด้วยพารามิเตอร์จะมีลักษณะดังนี้:
    เกม psl.bat
    ขั้นแรกเราต้องตรวจสอบว่ามีการระบุพารามิเตอร์ในบรรทัดคำสั่งเมื่อเริ่มต้นหรือไม่ และหากไม่ได้ระบุ เราจะส่งข้อความถึงผู้ใช้และดำเนินการให้เสร็จสิ้น หากมีการระบุพารามิเตอร์ ไปที่ป้ายกำกับ "PARMOK":
    @ปิดเสียงสะท้อน
    ถ้า "%1" NEQ "" GOTO PARMOK
    ECHO คุณต้องระบุชื่อกระบวนการเพื่อค้นหา
    ออก
    :ปาร์ม็อก
    ตอนนี้เราต้องตรวจสอบให้แน่ใจว่ามีการสร้างที่อยู่ IP ของคอมพิวเตอร์ที่สอดคล้องกันสำหรับบรรทัดคำสั่ง PSlist วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการกำหนดตัวแปรสภาพแวดล้อมชั่วคราว (ใช้ได้เฉพาะในช่วงระยะเวลาของการดำเนินการไฟล์คำสั่ง) ให้กับค่าของส่วนประกอบคงที่ของที่อยู่ (เช่น 192.168.0.) และค่าที่คำนวณได้ของ ชิ้นส่วนที่มีการสั่งซื้อต่ำ (เช่น ในช่วง 1-254) ตัวอย่างเช่น เราจะถือว่าเราต้องสแกนคอมพิวเตอร์ในช่วงที่อยู่:
    192.168.0.1 - 192.168.0.30:
    ตั้งค่า IPTMP=192.168.0.
    - ส่วนอาวุโสของที่อยู่
    set /A IPLAST=1 - ส่วนต่ำ สวิตช์ /A หมายถึงนิพจน์ตัวเลขจากการคำนวณ
    set IPFULL=%IPTMP%%IPLAST% - ค่าของที่อยู่ IP แบบเต็ม
    บรรทัดคำสั่งสำหรับ PSlist จะมีลักษณะดังนี้:
    pslist\%IPFULL%%1
    ตอนนี้สิ่งที่เหลืออยู่คือการรัน PSlist แบบวนรอบ โดยเพิ่มหนึ่งรายการไปยังส่วนที่เรียงลำดับต่ำของที่อยู่ในแต่ละรอบจนกระทั่งค่าถึง 30 และวิเคราะห์ค่า ERRORLEVEL หลังจากดำเนินการ เพื่อวิเคราะห์ผลลัพธ์ เราจะทำการเปลี่ยนแปลงด้วยคำสั่ง:
    ไปที่%ข้อผิดพลาด%%
    ให้การเปลี่ยนไปใช้ป้ายกำกับ REZULT0 เมื่อตรวจพบกระบวนการและเป็น REZULT1
  • 25-08-2013 14:35:35: บทความ: ความปลอดภัยของข้อมูล: ซอฟต์แวร์ คุณชอบมันไหม?

    • ในบทความนี้:
    • การกำหนดตัวแปร
    • ตัวแปรบรรทัดคำสั่ง (พารามิเตอร์การเรียกไฟล์ค้างคาว)
    • ถ้าตัวดำเนินการแบบมีเงื่อนไข
    • การใช้ค่าส่งคืน (กำลังประมวลผลโค้ดออก)

    การกำหนดตัวแปร

    ชุด<Имяпеременной>=<Значениепеременной>

    คำสั่ง SET เป็นส่วนขยายของตัวเลือกระบบปฏิบัติการสำหรับการทำงานกับพารามิเตอร์ โดยระบุตัวแปรที่มีค่าจะถูกแทนที่สำหรับชื่อเมื่อใดก็ตามที่มีการใช้ชื่อนั้นระหว่างเครื่องหมายเปอร์เซ็นต์ ดังนั้น หากได้รับ (ตัวแปรที่เกมจำนวนมากที่ใช้การ์ดเสียงของคอมพิวเตอร์ต้องการ):

    ชุดบลาสเตอร์=A220 I5 D1 P330

    จากนั้นเมื่อใช้โครงสร้างต่อไปนี้ในแบตช์ไฟล์:

    เสียงสะท้อน %บลาสเตอร์%

    "A220 I5 D1 P330" จะแสดงบนหน้าจอ ตัวแปรที่กำหนดโดยใช้คำสั่ง SET เรียกว่าตัวแปรสภาพแวดล้อม และจะมองเห็นได้หลังจากดำเนินการจนกว่า DOS จะรีสตาร์ท (เว้นแต่จะเปลี่ยนด้วยตนเองในหน่วยความจำ) นั่นคือสามารถใช้งานได้จากไฟล์แบตช์หรือโปรแกรมหนึ่งหลังจากถูกระบุในอีกไฟล์หนึ่ง ตัวแปรที่มีชื่อเสียงที่สุดคือตัวแปร PATH ซึ่งเป็นชุดของเส้นทางสำหรับ ค้นหาอย่างรวดเร็วไฟล์. มันถูกตั้งค่าไว้ในไฟล์ autoexec.bat

    ตัวแปรบรรทัดคำสั่ง
    (พารามิเตอร์สำหรับการเรียกไฟล์ค้างคาว)

    %<цифра 0-9>

    เช่นเดียวกับภาษาอื่นๆ ในภาษาไฟล์แบตช์ คุณสามารถใช้ตัวแปรที่ได้รับเป็นพารามิเตอร์ของไฟล์ค้างคาวได้

    สามารถมีตัวแปรอิสระที่มีอยู่พร้อมกันได้ทั้งหมด 10 ตัว สำหรับการเขียน โปรแกรมที่ซับซ้อนมันค่อนข้างเล็กสำหรับ ทำงานประจำบ่อยครั้ง 3-4 ก็เพียงพอแล้ว ค่าของตัวแปรเท่ากับค่าของพารามิเตอร์ที่เกี่ยวข้องจากบรรทัดคำสั่ง ตัวแปร %0 จะมีชื่อของไฟล์ .bat และเส้นทางไปยังไฟล์ หากคุณระบุไว้ นั่นคือหากคุณรันไฟล์ abc.bat ด้วยพารามิเตอร์ต่อไปนี้:

    abc.bat และ bc def

    จากนั้นตัวแปร %0 จะมีค่า abc.bat , %1 จะมีค่า a , %2 จะมี bc และ %3 จะมี def คุณสมบัตินี้ใช้กันอย่างแพร่หลายในการสร้างไฟล์แบตช์อเนกประสงค์เมื่อต้องรับมือกับการดำเนินการซ้ำๆ

    หากต้องการรับตัวแปรมากกว่า 10 รายการจากบรรทัดคำสั่ง คุณสามารถใช้คำสั่ง SHIFT

    คำสั่ง SHIFT อนุญาตให้คุณใช้พารามิเตอร์บรรทัดคำสั่งมากกว่า 10 รายการ อย่างไรก็ตาม พารามิเตอร์ก่อนหน้าที่เกี่ยวข้องจะสูญหายไป กล่าวอีกนัยหนึ่งคำสั่ง SHIFT จะเลื่อนค่าตัวแปรทั้งหมดไปทางซ้ายหนึ่งขั้น นั่นคือ ตัวแปร %0 จะประกอบด้วยค่าที่มีอยู่ในตัวแปร %1 ก่อนหน้านี้ และตัวแปร %1 จะมีค่าของตัวแปร %2 ก่อนการเปลี่ยนแปลง อย่างไรก็ตาม, การดำเนินการนี้ไม่สามารถย้อนกลับได้ กล่าวคือ ไม่สามารถเปลี่ยนตัวแปรกลับได้

    ถ้าตัวดำเนินการแบบมีเงื่อนไข

    โชคดี, ล่ามคำสั่ง cmd.exe ใน Windows 2000 สมัยใหม่และใหม่กว่ารองรับบล็อกคำสั่งในโครงสร้างการแยกสาขา ทำให้ไม่จำเป็นต้องใช้ IF กับป้ายกำกับ บล็อกคำสั่งจะอยู่ในวงเล็บ ดูเหมือนว่านี้ (เลียนแบบสไตล์การเยื้อง C/C++):

    ถ้าเงื่อนไข (

    คำสั่ง Rem ของสาขา 'จากนั้น'

    เรม...

    ) อื่น (

    คำสั่ง Rem ของสาขา 'else'

    เรม...

    ตัวอย่างที่เฉพาะเจาะจงใช้:

    @ปิดเสียงสะท้อน

    ตั้งค่า BUILDMODE=%1

    ถ้า "%BUILDMODE%" == "" (

    Echo FAIL: ต้องมีอาร์กิวเมนต์ ^(--debug, --release^)

    ออก /ข 1

    rem ลบยัติภังค์ทั้งหมดออกจากอาร์กิวเมนต์เพื่อทำให้การประมวลผลง่ายขึ้น

    ตั้งค่า BUILDMODE=%BUILDMODE:-=%

    ถ้า "%BUILDMODE%" == "debug" (

    ตั้งค่า CCFLAGS=/Od /MDd /Z7

    ) อื่น (

    ตั้งค่า CCFLAGS=/O2 /MD

    ในความคิดของฉันสิ่งนี้ค่อนข้างเป็นไปได้ที่จะอยู่ด้วย แต่เช่นเคย ชีวิตไม่ง่ายอย่างที่คิด มีปัญหาหนึ่งคือ ตัวแปรที่ใช้ในบล็อกนั้นและบล็อกอื่นจะถูกขยายก่อนที่บล็อกจะเริ่มดำเนินการ ไม่ใช่ระหว่างการดำเนินการ ในตัวอย่างข้างต้นจะไม่ทำให้เกิดปัญหาใดๆ แต่ในกรณีต่อไปนี้:

    ถ้า "%BUILDMODE%" == "debug" (

    Echo INFO: การตั้งค่าโหมดสภาพแวดล้อมการดีบัก

    ตั้งค่า OPTFLAGS=/Od

    ตั้งค่า CCFLAGS=%OPTFLAGS% /MDd /Z7

    ) อื่น (

    Echo INFO: การตั้งค่าโหมดการปล่อยสภาพแวดล้อม

    ตั้งค่า OPTFLAGS=/O2

    ตั้งค่า CCFLAGS=%OPTFLAGS% /MD

    สิ่งที่จับได้ก็คือในทั้งสองบล็อก การแทนที่ตัวแปร OPTFLAGS จะเกิดขึ้นก่อนที่จะมีการเปลี่ยนแปลงระหว่างการดำเนินการของบล็อกนั้น ดังนั้น CCFLAGS จะถูกเติมด้วยค่าที่ OPTFLAGS มี ณ เวลาที่ดำเนินการหากบล็อกเริ่มต้นขึ้น

    ปัญหานี้แก้ไขได้โดยใช้การขยายตัวแปรแบบหน่วงเวลา ตัวแปรที่มีอยู่ใน !…!

    แทนที่จะเป็น %...% ความหมายจะถูกเปิดเผยเฉพาะในขณะที่ใช้งานโดยตรงเท่านั้น โหมดนี้ถูกปิดใช้งานตามค่าเริ่มต้น คุณสามารถเปิดใช้งานได้โดยใช้สวิตช์ /V:ON เมื่อเรียก cmd.exe หรือโดยใช้คำสั่ง:

    ในข้อความของไฟล์ bat นั้นเอง วิธีที่สองดูเหมือนจะสะดวกกว่าสำหรับฉัน - การกำหนดให้ใครสักคนเรียกใช้สคริปต์ของคุณด้วยพารามิเตอร์บางตัวนั้นไม่ใช่เรื่องดี

    ด้วยเหตุนี้ ตัวอย่างที่ "ผิด" ก่อนหน้านี้สามารถแก้ไขได้ดังนี้:

    ถ้า "%BUILDMODE%" == "debug" (

    setlocal ที่เปิดใช้งานelayedexpansion

    ตั้งค่า OPTFLAGS=/Od

    Echo INFO: การตั้งค่าสภาพแวดล้อมโหมดแก้ไขข้อบกพร่อง

    ) อื่น (

    ตั้งค่า CCFLAGS=!OPTFLAGS! /MDd /Z7

    ตั้งค่า OPTFLAGS=/O2

    Echo INFO: การตั้งค่าสภาพแวดล้อมโหมดรีลีส

    ตั้งค่า CCFLAGS=!OPTFLAGS! /นพ

    แต่ไม่ว่าในกรณีใด นี่ยังดีกว่าจำนวนแท็กและการเปลี่ยนภาพที่บ้าคลั่งมาก

    ฟังก์ชั่น

    เป็นไปได้ไหมที่จะสร้างฟังก์ชั่นในไฟล์ bat? ใช่คุณสามารถ ยิ่งกว่านั้นบางครั้งก็จำเป็นด้วยซ้ำ จริงอยู่สิ่งเหล่านี้สามารถเรียกได้ว่าเป็นฟังก์ชันแบบมีเงื่อนไข

    มีไวยากรณ์พิเศษสำหรับคำสั่ง call ซึ่งช่วยให้คุณไปที่เครื่องหมายในไฟล์ bat เดียวกันโดยจดจำตำแหน่งที่เกิดการโทรนี้:

    โทร: อาร์กิวเมนต์ป้ายกำกับ

    ฟังก์ชั่นส่งคืนด้วยคำสั่ง:

    exit /b [รหัสส่งคืนทางเลือก]

    ที่นี่คีย์ /b มีความสำคัญมาก: หากไม่มีมัน คุณจะออกจากฟังก์ชันไม่ได้ แต่จะออกจากสคริปต์โดยทั่วไป

    สำหรับรายละเอียด ให้พิมพ์ที่บรรทัดคำสั่ง:

    เรียก/?

    ออก /?

    สิ่งที่น่าสนใจคือ คำสั่งการโทรที่มีไวยากรณ์นี้รองรับการโทรแบบเรียกซ้ำด้วยการสร้างเฟรมใหม่โดยอัตโนมัติสำหรับอาร์กิวเมนต์ตัวแปร %0-%9 บางครั้งสิ่งนี้อาจมีประโยชน์ นี่คือตัวอย่างคลาสสิกของการคำนวณแฟคทอเรียลแบบเรียกซ้ำในภาษาคำสั่ง:

    @ปิดเสียงสะท้อน

    โทร:แฟกทอเรียล %1

    สะท้อน %ผลลัพธ์%

    ออก

    rem ฟังก์ชันคำนวณค่าแฟกทอเรียล

    เข้าสู่ระบบ:

    rem %1 จำนวนที่คุณต้องการคำนวณแฟกทอเรียล

    รีมเอาท์พุต:

    rem %ผลลัพธ์% ค่าแฟกทอเรียล

    :แฟกทอเรียล

    ถ้า %1 == 0 (

    ตั้งค่าผลลัพธ์=1

    ออก /ข

    ถ้า %1 == 1 (

    ตั้งค่าผลลัพธ์=1

    ออก /ข

    ตั้งค่า /a พารามิเตอร์=%1 - 1

    โทร:แฟคทอเรียล %PARAM%

    ตั้งค่า /a ผลลัพธ์=%1 * %ผลลัพธ์%

    ออก /ข

    ตัวอย่างงาน:

    > แฟคทอเรียล.bat 10

    3628800

    การใช้ค่าส่งคืน
    (กำลังประมวลผลรหัสทางออกของโปรแกรม)

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

    ไฟล์แบตช์จะค้นหารหัสทางออกของโปรแกรมที่รันได้อย่างไร? ตัวแปรคีย์ ERRORLEVEL มีไว้เพื่อจุดประสงค์นี้

    ตัวอย่างไฟล์แบตช์ที่มีระดับข้อผิดพลาด:

    @ปิดเสียงสะท้อน

    REM รันโปรแกรม prg1.exe

    PRG1.EXE

    การวิเคราะห์รหัสความสมบูรณ์ REM

    หากระดับข้อผิดพลาด 2 ไปที่ไฟล์ไม่พบ

    หากระดับข้อผิดพลาด 1 ไปที่ผู้เขียน

    หากระดับข้อผิดพลาด 0 ไปที่ EXITOK

    ไปที่ ONEXIT

    :ไฟล์ไม่พบ

    ข้อผิดพลาดเอคโค่! ไม่พบไฟล์!

    ไปที่ ONEXIT

    :นักเขียน

    ข้อผิดพลาดในการบันทึก ECHO!

    ไปที่ ONEXIT

    :ออก

    ECHO โปรแกรมเสร็จสมบูรณ์เรียบร้อยแล้ว

    ไปที่ ONEXIT

    :ONEXIT

    โปรดทราบว่าการวิเคราะห์รหัสทางออกไม่ได้เริ่มต้นจากศูนย์ แต่จากค่าสูงสุดที่เป็นไปได้ ความจริงก็คือการตรวจสอบดังกล่าวหมายถึง: “ถ้าระดับข้อผิดพลาดมากกว่าหรือเท่ากับค่าแล้ว...” นั่นคือถ้าเราตรวจสอบโดยเริ่มจากศูนย์ ค่าใดๆ ก็ตามในบรรทัดแรกจะเป็นจริงซึ่งไม่ถูกต้อง

    นี่เป็นข้อผิดพลาดที่พบบ่อยที่สุดในโปรแกรมประเภทนี้

    การประกาศตัวแปรของคุณเองเป็นส่วนสำคัญของภาษาการเขียนโปรแกรมเกือบทุกภาษา ดังนั้นในภาษา vbscript ตัวแปรจึงถูกประกาศโดยใช้คำสำคัญ สลัวและใน jscript จะใช้ คำหลัก var.

    ตัวแปรคำสั่ง สตริงของ Windowsแสดงถึงอักขระที่แตกต่างกันเล็กน้อย ที่นี่คุณไม่สามารถประกาศกลุ่มของตัวแปร cmd หรือกำหนดค่าให้กับตัวแปรหลายตัวในบรรทัดคำสั่งได้ทันที เรามาดูกันดีกว่า บรรทัดถัดไปรหัส:

    เสียงสะท้อน % Var3% เสียงสะท้อน % VAR3% เสียงสะท้อน % vAr3%

    จุดหนึ่งที่ควรพิจารณาคือการบันทึก

    ตั้ง var1 = 100
    ตั้งค่า var1 = 100

    นี่ไม่ใช่สิ่งเดียวกันนั่นคือในกรณีแรกเราสร้างตัวแปร cmd "var1" และในกรณีที่สอง - "var1" สถานการณ์ก็คล้ายๆ กับการกำหนดค่า ดังนั้น ควรใส่ใจกับพื้นที่!!!

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

    ถ้าคุณวิ่ง คำสั่ง cmd set ซึ่งแสดงรายการตัวแปรทั้งหมดและค่าของมัน เซสชันปัจจุบันคุณจะเห็นว่าตัวแปร cmd ที่สร้างขึ้นใหม่และ. เราจะสามารถเข้าถึงสิ่งเหล่านี้ได้ตลอดเซสชั่นทั้งหมด

    หากต้องการล้างเนื้อหาในบรรทัดคำสั่งของ Windows คุณเพียงแค่ต้องกำหนดค่าว่าง:

    จะพิมพ์บรรทัด %Var3% และคำสั่ง

    ในตัวอย่างนี้ เราเลี่ยงอักขระ & และ ^ ดังนั้นจึงกำหนดวลี:

    "100 & 3 = 5"
    "100 ^3"

    เป็นที่น่าสังเกตว่าหากเราพยายามแสดงค่าของตัวแปรเหล่านี้โดยใช้ ฟังก์ชัน cmdตั้งค่าไว้ก็จะไม่มีปัญหา แต่ถ้าเราใช้ฟังก์ชัน echo เราก็จะได้ผลลัพธ์ที่แตกต่างไปจากที่เราคาดไว้อย่างสิ้นเชิง ดังนั้น เมื่อคุณพยายามรันคำสั่งต่อไปนี้:

    ตอนนี้เมื่อรันโค้ด:

    เสียงสะท้อน %var4% เสียงก้อง %var5%

    ทุกอย่างจะเป็นไปด้วยดี

    เป็นที่ชัดเจนว่าตัวแปร cmd ที่สร้างขึ้นในหน้าต่างบรรทัดคำสั่งปัจจุบันไม่พร้อมใช้งานสำหรับกระบวนการอื่น ๆ แต่สามารถตั้งค่าข้อจำกัดที่ยิ่งใหญ่กว่าได้

    จะถามอะไร พื้นที่ท้องถิ่นการมองเห็นมีการใช้บล็อก SETLOCAL...ENDLOCAL- ตัวแปร cmd บรรทัดคำสั่งของ Windows ทั้งหมดที่ประกาศไว้ตรงกลางบล็อกนี้จะไม่สามารถมองเห็นได้ภายนอกบล็อก เปิดตัวแก้ไข (ฉันใช้โปรแกรมแก้ไข กระดาษจดบันทึก++เนื่องจากจะไฮไลท์โค้ดทันที) และเขียนโค้ดบรรทัดต่อไปนี้ลงไป:

    เราจะเห็นว่าอันดับแรกเราประกาศ var1 และกำหนดค่าให้เป็น 0 จากนั้นเราประกาศตัวแปรที่มีชื่อเดียวกันอีกครั้ง แต่อยู่ในบล็อก SETLOCAL...ENDLOCAL- สคริปต์ส่งออกค่าของ var1 ทั้งภายในและส่วนกลาง ฉันใช้ตัวอักษรละตินโดยเฉพาะเพื่อที่ว่าถ้าเกิดอะไรขึ้นคุณจะไม่โดนต้มตุ๋น