CMD-BAT Онцлог ба функцууд. Үндсэн cmd тушаалууд - зүгээр л хэрэгтэй мэдээлэл

Өөрийнхөө хувьсагчдыг зарлах нь бараг бүх програмчлалын хэлний салшгүй хэсэг байдаг тул 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 багц функцийг ашиглан эдгээр хувьсагчийн утгыг харуулахыг оролдвол ямар ч асуудал гарахгүй, харин цуурай функцийг ашиглавал бидний хүлээж байснаас тэс өөр үр дүн гарах болно гэдгийг тэмдэглэх нь зүйтэй. Тиймээс, та дараах тушаалыг ажиллуулахыг оролдох үед:

Одоо кодыг гүйцэтгэх үед:

цуурай %var4% цуурай %var5%

бүх зүйл сайхан болно.

Одоогийн командын мөрийн цонхонд үүсгэсэн cmd хувьсагчдыг бусад процессуудад ашиглах боломжгүй нь ойлгомжтой, гэхдээ үүнээс ч илүү хязгаарлалт тавих боломжтой.

Орон нутгийн хамрах хүрээг тохируулахын тулд блок ашиглана уу SETLOCAL...ENDLOCAL. Энэ блокийн дунд зарласан Windows командын мөрийн бүх cmd хувьсагчууд гадна талд харагдахгүй. Редакторыг нээх (би засварлагчийг ашигладаг Notepad++, кодыг нэн даруй тодруулдаг тул үүн дээр дараах кодын мөрүүдийг бичнэ үү:

Бид эхлээд var1-г зарлаж, түүнд 0 утгыг өгсөн, дараа нь ижил нэртэй хувьсагчийг дахин зарласан, гэхдээ блок дээр. SETLOCAL...ENDLOCAL. Скрипт нь дотоод болон глобал var1-ийн утгыг гаргадаг. Хэрэв ямар нэг зүйл тохиолдвол та догдолж чадахгүй байхын тулд би латин үсгийг тусгайлан ашигласан.

    Баг SET Windows командын мөрөнд орчны хувьсагчдыг харах, өөрчлөхөд ашигладаг. Хүрээлэн буй орчны хувьсагчид нь хүлээн зөвшөөрөгдсөн утгууд нь одоогийн програм ажиллаж байгаа орчныг тодорхойлдог хувьсагч юм - системийн файлын зам, техник хангамжийн мэдээлэл, хэрэглэгчийн лавлах гэх мэт. Орчны хувьсагчийн утгууд нь Windows ачаалах, хэрэглэгч системд нэвтрэх, бие даасан процессуудыг ажиллуулах эсвэл тушаалыг ашиглах үед үүсдэг. SET. Тодорхой хувьсагчийн авсан утгыг харахын тулд та дараах тушаалыг ашиглаж болно.

SET хувьсагч
ЗАМ ТОХИРУУЛАХ- хувьсагчийн утгыг харуулах ЗАМ
Шинэ хувьсагч үүсгэх эсвэл байгаа нэгийн утгыг өөрчлөхийн тулд дараах тушаалыг ашиглана уу.

SET хувьсагч=мөр

хувьсагч- Орчны хувьсагчийн нэр.
шугам- Заасан хувьсагчид оноогдсон тэмдэгтийн мөр.

SET MyName=Вася- хувьсагчийн утгыг тохируулах Миний нэр

SET зам=C:\progs;%зам%- хувьсагчийн утгыг өөрчлөх ЗАМмөрийн эхэнд нэмэх замаар C:\progs

Хувьсагчаар хүлээн зөвшөөрөгдсөн утгыг хувийн тэмдэгтээр хавсаргасан нэрийг ашиглан тушаалын файлд боловсруулах боломжтой. % . Жишээлбэл, ECHO дэлгэц дээр текстийг дараах хэлбэрээр харуулах тушаал:

ECHO огноо- "огноо" гэсэн үг болон тушаалыг харуулах болно
ECHO % огноо %хувьсагчийн утгыг харуулах болно огноо, өөрөөр хэлбэл үйлдлийн системийн форматаар одоогийн огноо.

Баг SETпараметргүй нь орчны хувьсагчдын одоогийн утгыг харуулахад ашиглагддаг.

ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Usr\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
КОМПЬЮТЕРНЭР=ТУРШИЛТ 7
ComSpec=C:\windows\system32\cmd.exe
FP_NO_HOST_CHECK=ҮГҮЙ
HOMEDRIVE=C:
HOMEPATH=\Хэрэглэгчид\Usr
LOCALAPPDATA=C:\Хэрэглэгчид\Usr\AppData\Local
LOGONSERVER=\\TEST7
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Зам=C:\windows\system32;C:\windows;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS; .VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Гэр бүлийн 15 загвар 3 Алхам 4, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0304
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\windows\system32\Windows PowerShell\v1.0\Modules\
PUBLIC=C:\Хэрэглэгчид\Нийтийн
SystemDrive=C:
SystemRoot=C:\windows
TEMP=C:\Usr\Usr\AppData\Local\Temp
TMP=C:\Usr\Usr\AppData\Local\Temp
USERDOMAIN=туршилт 7
USERNAME=Usr
USERPROFILE=C:\Usr\Usr
windir = C: \ windows

SET командыг дуудах үед жагсаалтад харагдах хувьсагчдаас гадна утгууд нь динамикаар өөрчлөгддөг бусад хувьсагчдаас гадна:

%CD%- одоогийн лавлахын утгыг авна.
%DATE%- одоогийн огнооны утгыг авна.
%TIME%- одоогийн цагийн утгыг авна.
%САНАМСАРГҮЙ%- 0-ээс 32767-ийн хоорондох санамсаргүй тооны утга.
%ERRORLEVEL%- ERRORLEVEL-ийн одоогийн утга, програмын гүйцэтгэлийн үр дүнгийн үзүүлэлт болгон ашигладаг тусгай хувьсагч.
%CMDEXTVERSION% CMD.EXE өргөтгөсөн тушаал боловсруулах хувилбарын утга.
%CMDCMDLINE%- бүрхүүл гэж нэрлэдэг анхны командын мөрөнд тэлэх.

Хэрэв та SET командыг дуудахдаа нэрний зөвхөн нэг хэсгийг зааж өгвөл нэр нь заасан мөрөөр эхэлсэн хувьсагчдын жагсаалт гарч ирнэ. Жишээлбэл:

SET U- нэр нь "U" -ээр эхэлсэн бүх хувьсагчийн утгыг харуулах болно.

SET команд нь хоёр нэмэлт шилжүүлэгчийг дэмждэг:

SET /A илэрхийлэл

SET /P хувьсагч=

/A шилжүүлэгч нь тэнцүү тэмдгийн баруун талд байгаа тэмдэгт мөр нь утгыг нь үнэлж байгаа тоон илэрхийлэл гэдгийг заадаг. Илэрхийлэх хөдөлгүүр нь маш энгийн бөгөөд тэргүүлэх ач холбогдлын буурах дарааллаар жагсаасан дараах үйлдлүүдийг дэмждэг.

Аливаа логик эсвэл хоёртын операторыг ашиглахдаа илэрхийллийн мөрийг хашилтанд оруулах ёстой. Илэрхийлэл дэх аливаа тоон бус мөрүүдийг ашиглахын өмнө утгыг тоон хэлбэрт хөрвүүлдэг орчны хувьсагчийн нэр гэж үздэг. Хэрэв системд заасан нэртэй хувьсагч тодорхойлогдоогүй бол оронд нь тэг утгыг орлуулна. Энэ нь утгыг авахын тулд % тэмдэг оруулахгүйгээр орчны хувьсагчийн утгууд дээр арифметик үйлдлүүдийг хийх боломжийг танд олгоно. Хэрэв SET /A нь багц файлаас биш командын мөрөөс дуудагдсан бол илэрхийллийн эцсийн утгыг хэвлэнэ. Хүрээлэн буй орчны хувьсагчийн нэр нь аливаа хуваарилалтын операторын зүүн талд байх ёстой. Өмнө нь угтвар оруулаагүй тохиолдолд тоон утгыг аравтын бутархай гэж үзнэ.

0x- арван зургаатын тоонуудын хувьд
0 - наймтын тооны хувьд.

Угтвар ашиглах жишээ:

SET /A REZ=0xA+012
ECHO %REZ%

Энэ багц файлд хувьсагчийн утга нь байна REZ 10-ын тоог 16-т (0xA) болон наймтын тоогоор илэрхийлсэн 10-ыг (012) нэмэх замаар тооцоолно.

/P шилжүүлэгч нь хэрэглэгчийн оруулсан оролтын мөрөнд хувьсагчийн утгыг тохируулах боломжийг олгодог. Оруулсан мөрийг уншихаас өмнө заасан promptString сануулгыг харуулна. promptString сануулга хоосон байж магадгүй. Энэ түлхүүр нь багц файл дахь хэрэглэгчтэй харилцах харилцааг зохион байгуулах боломжийг танд олгоно.

@ECHO OFF
SET /P NAME=Хэрэглэгчийн нэрийг оруулна уу:
SET /P pass=Нууц үг оруулна уу:
ECHO хэрэглэгчийн нэр - %NAME% , Нууц үг - %PASS%

Багц файлуудад та хувьсагчийн авсан утгын нэг хэсэгтэй ажиллах шаардлагатай байдаг бөгөөд үүнд орлуулах утгыг ашигладаг:

хувьсагч: мөр1 = мөр2- хувьсагчийн хүлээн авсан утгыг орлуулна мөр 1дээр мөр 2

Дараах багц файл нь одоогийн огноотой харгалзах хувьсагчийн утгын цэгээс зураасны тэмдэгтийг ашигладаг:

@ECHO OFF
tm=%DATE% тохируулах
ЦУУРАХ огноо1 = %tm%
SET tm=%DATE:.=-%
ЦУУРАХ огноо2 = %tm%

Хувьсагчийн авсан утгын хэсгийг тодруулахын тулд дараах бүтцийг ашиглана.

хувьсагч:~x,y- Хаана x- мөрийн эхнээс алгассан тэмдэгтүүдийн тоо, ба y- хувьсагчийн утга болгон ашигласан тэмдэгтүүдийн тоо.

Дараах жишээнд одоогийн цагийн дэлгэцийг секунд, секундын бутархайгүйгээр ашигладаг (TIME хувьсагчийн стандарт утгаас зөвхөн эхний 5 тэмдэгт):

@ECHO OFF
tm=%TIME% тохируулах
ЦУУРХАЙ цаг1 = %tm%
ТОХИРУУЛАХ tm=%TIME:~0.5%
ECHO цаг2 = %tm%

Хэрэв үнэ цэнэ y(урт)-ыг заагаагүй бол мөрийн төгсгөл хүртэл үлдсэн хувьсагчийн утгыг ашиглана. Хэрэв үнэ цэнэ yсөрөг байвал төгсгөлөөс нь хувьсагчийн утгын мөрийн хэсгийг ашиглана. Өмнөх жишээг хүлээн авсан хугацааны утгыг төгсгөлөөс нь 6 тэмдэгтээр хасаж өөрчлөхийн тулд өөрчилж болно:

@ECHO OFF
tm=%TIME% тохируулах
ЦУУРХАЙ цаг1 = %tm%
SET tm=%TIME:~0.-6%
ECHO цаг2 = %tm%

Цоорхойн тоог заагаагүй, сөрөг тоог ашиглах боломжтой бол хүлээн авсан утга нь мөрийн төгсгөлөөс хувьсагчийн нэг хэсэг болно.

%ЗАМ:~-10%- PATH хувьсагчийн сүүлийн 10 тэмдэгтийг задлах болно

Орлуулах форматыг хадгалахын зэрэгцээ та тэг утгыг орхиж болно:

%ЗАМ:~0.-2%тэнцүү %ЗАМ:~,-2%

Командын файлд орчны хувьсагчдыг ашиглахдаа хаалтанд заасан командуудын бүлэг дотор, жишээлбэл командуудад өөрчлөлт оруулах үед өгөгдсөн утга өөрчлөгдөхгүй байхтай холбоотой тодорхой хязгаарлалт байдаг. ХЭРВЭЭэсвэл ТӨЛӨӨ. Энэ хязгаарлалтыг даван туулахын тулд командын процессорыг /V:ON параметрээр ажиллуулж, хувьсагчийн хүлээн зөвшөөрсөн утгыг авахын тулд хувийн тэмдгийн оронд анхаарлын тэмдэг ашиглана уу. Нэмж дурдахад, командын процессорыг стандарт ажиллуулах боломжтой боловч энэ горимыг дараах тушаалаар идэвхжүүлсэн тохиолдолд:

Хувьсагчийн утгыг ашиглах үр дүнгийн ялгааг дараах багц файлаар тодорхой харуулав.


@ECHO OFF
VAR=өмнө тохируулна уу
хэрэв "%VAR%" == "өмнө" (
VAR=дараа тохируулна уу
хэрэв "!VAR!" == "дараа" @echo Хувийн тэмдэгтэй=%VAR% , Асуултын тэмдэгтэй=!VAR!

Баг VAR=дараа тохируулна уухаалтаар тусгаарлагдсан дэд програм дотор гүйцэтгэгдэх ба хэрэв командыг устгавал Local EnableDelayedExpansion-г тохируулахэсвэл хувьсагчийн утгыг авахын тулд ашиглахгүй байх VARанхаарлын тэмдэг, түүний утга нь хуучин хэвээр байх болно (дэд програм руу орохоос өмнө тохируулсан зүйл). Командын цикл дотор хувьсагчийн утгыг өөрчлөх үед ижил төстэй асуудал гардаг. ТӨЛӨӨ. Жишээлбэл, одоогийн директор доторх файлуудын жагсаалтыг авахын тулд иймэрхүү багц файл ажиллахгүй:

LIST= гэж тохируулна
%%i-д (*) LIST=%LIST% %%i-г тохируулна уу
цуурай %LIST%

Хувьсах утга ЖАГСААЛТгогцоо дотор өөрчлөгдөхгүй. Үүнийг хийхийн тулд багц файлыг дараах байдлаар өөрчлөх шаардлагатай.

Local EnableDelayedExpansion-г тохируулах
LIST= гэж тохируулна
(*) доторх %%i-д LIST=!LIST-г тохируулна уу! %%i
цуурай %LIST%

Одоо хувьсагчийн утга ЖАГСААЛТгогцоо дотор ТӨЛӨӨзайгаар тусгаарлагдсан файлын нэрсийн утгыг дараалан авч өөрчлөгдөнө ( LIST=!LIST! %%i)

Багц (тушаал) файлуудад ашигладаг орчны хувьсагч нь лавлах руу үнэмлэхүй замыг зааж өгөхөөс зайлсхийх боломжийг танд олгоно. Жишээлбэл, хэрэв бид системийн хөтчийн үсгийг урьдчилан мэдэхгүй бол хувьсагчийг үргэлж ашиглаж болно %системийн драйв%, энэ нь үйлдлийн систем суулгасан хөтчийн үсгийг буцаана. Мөн хувьсагчдыг кодыг оновчтой болгоход ашигладаг - дахин дахин давтагдах параметрийг (жишээлбэл, бүртгэлийн түлхүүр) богино хувьсагчаар хуваарилж, ашиглаж болно. Энэ нийтлэлд хувьсагчтай ажиллах янз бүрийн арга техник, мөн хувьсагчийг өөрчлөх, шинээр бий болгох аргуудыг дэлгэрэнгүй авч үзнэ. Одоо бүх зүйлийг дарааллаар нь яръя.

Хүрээлэн буй орчны хувьсагчдын ангилал

Дүгнэлт

Windows командын бүрхүүл (cmd.exe) нь системтэй ажиллах маш хүчирхэг хэрэгсэл юм. Багц файлууд нь нэлээд хэмжээний ажлыг автоматжуулж чаддаг тул Windows-ыг автоматаар суулгахад ихэвчлэн ашигладаг. Багц файл дахь хувьсагчдыг чадварлаг ашиглах нь олон төрлийн асуудлыг шийдвэрлэх боломжийг танд олгоно. Командын бүрхүүлтэй ажиллах нь илүү үр дүнтэй болохын зэрэгцээ багц файлуудын кодыг хялбаршуулсан болно. Та хувьсагчийг ашиглах бусад жишээг вэбсайт эсвэл форумын хуудаснаас олж болно. Энэ нийтлэлд ашигласан бүх жишээг оролцогчдын скриптээс авсан бөгөөд үүнд маш их баярлалаа.

Нэр томьёо

Командын бүрхүүлнь хэрэглэгч болон үйлдлийн систем хоорондын шууд холбоог хангадаг тусдаа програм хангамжийн бүтээгдэхүүн юм. Тушаалын мөрийн текст хэрэглэгчийн интерфэйс нь текстэд суурилсан програмууд болон хэрэгслүүдийг ажиллуулах орчинг бүрдүүлдэг.

cmd.exe- Windows үйлдлийн системийн командын бүрхүүл нь оруулсан командыг системд ойлгомжтой формат руу хөрвүүлэхэд ашигладаг командын орчуулагч.

Багийн хуралдаанхөөргөх замаар эхлүүлж болно cmd.exe, мөн багц файл ажиллуулах замаар. Өөрөөр хэлбэл одоогийн командын бүрхүүл үүсгэгдэнэ. Үүний дагуу, энэ бүрхүүлээс гарснаар (жишээлбэл, багц файлыг дуусгах) командын сесс дуусна.

Хэрэглэгчийн сесс(хэрэглэгчийн сесс) нь хэрэглэгч нэвтэрсэн үед (нэвтрэх) эхэлдэг бөгөөд хэрэглэгч гарах үед (хэрэглэгчийн сесс) дуусдаг.

Энэ нийтлэлд:

  • Хувьсагчдыг тодорхойлох
  • Тушаалын мөрийн хувьсагчид (сарьсан багваахай файлын дуудлагын параметрүүд)
  • IF болзолт оператор
  • Функцүүд
  • Буцах утгыг ашиглах (гаралтын кодыг боловсруулж байна)

Хувьсагчдыг тодорхойлох

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

SET мэдэгдэл нь үйлдлийн системийн параметрүүдийг удирдах чадварын өргөтгөл юм. Энэ нь хувьсагчийг хувийн тэмдгийн хооронд ашиглах үед түүний нэрээр утга нь солигдох хувьсагчийг тодорхойлдог. Тиймээс, хэрэв өгөгдсөн бол (компьютерийн дууны карт ашигладаг олон тоглоомд шаардлагатай хувьсагч):

ТОСЛОГЧ=A220 I5 D1 P330

Дараа нь багц файлд дараах бүтцийг ашиглах үед:

ЭХО %BLASTER%

Дэлгэц дээр "A220 I5 D1 P330" гарч ирнэ. SET хэллэгийг ашиглан тодорхойлсон хувьсагчдыг орчны хувьсагч гэж нэрлэдэг бөгөөд DOS-г дахин эхлүүлэх хүртэл (санах ойд гараар өөрчлөхгүй бол) гүйцэтгэсний дараа харагдах болно. Өөрөөр хэлбэл, үүнийг нэг багц файл эсвэл програмаас нөгөөд зааж өгсний дараа ашиглаж болно. Хамгийн алдартай нь PATH хувьсагч бөгөөд файлуудыг хурдан хайж олох замуудын багц юм. Энэ нь autoexec.bat файлд тавигдсан.

Тушаалын мөрийн хувьсагчид
(bat файлыг дуудах параметрүүд)

%<цифра 0-9>

Аливаа хэлний нэгэн адил багц файлын хэлэнд хүлээн авсан хувьсагчдыг bat файлын параметр болгон ашиглах боломжтой.

Нийтдээ 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 хувьсагчийн утгыг агуулна. Гэсэн хэдий ч энэ үйлдэл нь эргэлт буцалтгүй, өөрөөр хэлбэл хувьсагчдыг буцааж шилжүүлэх боломжгүй юм.

IF болзолт оператор

Аз болоход орчин үеийн Windows 2000 болон түүнээс хойшхи хувилбаруудын cmd.exe командын орчуулагч нь салбарласан бүтэц дэх командын блокуудыг дэмжиж, шошготой IF-уудын хэрэгцээг арилгадаг. Тушаалын блокуудыг хаалтанд оруулсан болно. Энэ нь иймэрхүү харагдаж байна (C/C++ доголын хэв маягийг дуурайлган):

нөхцөл бол (

"Тэгвэл" салбарын Rem командууд

Rem...

) өөр (

"Өөр" салбарын Rem командууд

Rem...

Тодорхой хэрэглээний жишээ:

@echo унтраалттай

BUILDMODE=%1 тохируулна

хэрэв "%BUILDMODE%" == "" (

Echo FAIL: Аргумент шаардлагатай ^(--debug, --release^)

Гарах /b 1

rem Боловсруулалтыг хялбарчлахын тулд аргументаас бүх зураасыг арилга

BUILDMODE=%BUILDMODE:-=% тохируулах

хэрэв "%BUILDMODE%" == "дибаг" (

CCFLAGS=/Od /MDd /Z7-г тохируулна уу

) өөр (

CCFLAGS=/O2 /MD-г тохируулна уу

Миний бодлоор үүнтэй хамт амьдрах бүрэн боломжтой. Гэхдээ урьдын адил амьдрал санагдсан шиг тийм ч энгийн зүйл биш юм. Нэг асуудал байна. then болон else блокуудад ашигласан хувьсагчдыг блокуудыг гүйцэтгэх явцад биш харин гүйцэтгэл эхлэхээс өмнө өргөтгөдөг. Өгөгдсөн жишээнд энэ нь ямар ч асуудал үүсгэхгүй, харин дараах тохиолдолд энэ нь:

хэрэв "%BUILDMODE%" == "дибаг" (

Echo INFO: Дибаг хийх орчны горимыг тохируулж байна

OPTFLAGS=/Od тохируулна уу

CCFLAGS=%OPTFLAGS% /MDd /Z7-г тохируулна уу

) өөр (

Echo INFO: Орчноос гарах горимыг тохируулж байна

OPTFLAGS=/O2 тохируулна уу

CCFLAGS=%OPTFLAGS% /MD гэж тохируулна уу

Хамгийн гол нь хоёр блок дээр OPTFLAGS хувьсагчийг солих нь тухайн блокийг гүйцэтгэх явцад өөрчлөгдөхөөс өмнө хийгдэнэ. Үүний дагуу, хэрэв блок эхэлсэн бол CCFLAGS нь үүнийг гүйцэтгэх үед OPTFLAGS-д байсан утгаар дүүрнэ.

Энэ асуудлыг хойшлуулсан хувьсагчийн өргөтгөлийг ашиглан шийддэг. !…!-д агуулагдах хувьсагчид! %...% -ийн оронд тэдгээрийн утга нь зөвхөн шууд ашиглах мөчид л илчлэгдэх болно. Энэ горим нь анхдагчаар идэвхгүй байна. Та cmd.exe руу залгахдаа /V:ON шилжүүлэгч эсвэл дараах тушаалыг ашиглан үүнийг идэвхжүүлж болно.

Бат файлын текстэнд өөрөө. Хоёр дахь арга нь надад илүү тохиромжтой юм шиг санагдаж байна - хэн нэгнээс скриптийг тодорхой параметрээр ажиллуулахыг шаардах нь тийм ч таатай биш юм.

Үүний зэрэгцээ өмнөх "буруу" жишээг дараах байдлаар засаж болно.

setlocal идэвхжүүлсэн хойшлуулсан өргөтгөл

хэрэв "%BUILDMODE%" == "дибаг" (

Echo INFO: Дибаг хийх горимын орчинг тохируулж байна

OPTFLAGS=/Od тохируулна уу

CCFLAGS=!OPTFLAGS тохируул! /MDd /Z7

) өөр (

Echo INFO: Суллах горимын орчинг тохируулж байна

OPTFLAGS=/O2 тохируулна уу

CCFLAGS=!OPTFLAGS тохируул! /Ад

Одоо энэ бол бараг бүрэн хэмжээний if-then-else блок юм. Бараг, учир нь хэрэв цуурай командын аль нэгэнд хаах хаалт тааралдвал ^ тэмдэгтээр түүнээс зугтах хэрэгтэй, эс тэгвээс задлан шинжлэгч төөрөлдөх болно...

Гэхдээ ямар ч тохиолдолд энэ нь галзуу олон тооны шошго, шилжилтээс хамаагүй дээр юм.

Функцүүд

Бат файлд функц үүсгэх боломжтой юу? Тиймээ чи чадна. Түүнээс гадна заримдаа бүр шаардлагатай байдаг. Үнэн, эдгээрийг нөхцөлт функц гэж нэрлэж болно.

Дуудлагын командын тусгай синтакс байдаг бөгөөд энэ нь дуудлага хийсэн газрыг санаж, ижил bat файл дахь тэмдэг рүү очих боломжийг олгодог.

дуудлага: шошго аргументууд

Функцийг дараах тушаалаар буцаана.

гарах /b [заавал биш буцах код]

Энд / b товчлуур маш чухал: үүнгүйгээр та функцээс биш, ерөнхийдөө скриптээс гарах болно.

Дэлгэрэнгүй мэдээллийг тушаалын мөрөнд бичнэ үү:

залгах/?

гарах /?

Сонирхолтой нь, энэхүү синтакс бүхий дуудлагын команд нь %0-%9 хувьсагчийн аргументуудад автоматаар шинэ хүрээ үүсгэх рекурсив дуудлагыг дэмждэг. Заримдаа энэ нь ашигтай байж болох юм. Командын хэл дээрх рекурсив хүчин зүйлийн тооцооллын сонгодог жишээ энд байна.

@echo унтраалттай

дуудлага:фактори% 1

цуурай %RESULT%

гарах

rem Факторын утгыг тооцоолох функц

rem Нэвтрэх:

rem % 1 Факториалыг тооцоолохыг хүссэн тоо

rem Гаралт:

rem %RESULT% Хүчин зүйлийн утга

:факториал

хэрэв %1 == 0 (

RESULT=1 гэж тохируулна уу

Гарах /б

хэрэв %1 == 1 (

RESULT=1 гэж тохируулна уу

Гарах /б

/a PARAM=%1 - 1 тохируулна

дуудлага:фактори% PARAM%

тохируулах /a RESULT=%1 * %RESULT%

гарах /б

Ажлын жишээ:

> факториал.бат 10

3628800

Буцах утгыг ашиглах
(програмаас гарах кодыг боловсруулж байна)

Аливаа программ ажлаа дуусгах үед дуусгах кодыг үйлдлийн систем рүү буцаана. Амжилттай дууссаны дараа тэгийг буцаадаг заншилтай, эс тэгвээс алдааны код. Заримдаа, эсвэл ихэнхдээ програм нь "санаатайгаар" тэгээс өөр утгыг буцаадаг бөгөөд ингэснээр түүний үйл ажиллагааны зарим нарийн ширийн зүйлийг багц файлаас "суралцах" боломжтой болно. Жишээлбэл, програм нь дарагдсан товчлуурын кодыг буцаадаг бөгөөд .bat файл нь түүнд үндэслэн янз бүрийн үйлдлүүдийг гүйцэтгэдэг.

Багц файл нь гүйцэтгэсэн програмын гарах кодыг хэрхэн олж мэдэх вэ? Энэ зорилгоор ERRORLEVEL түлхүүр хувьсагчийг өгсөн.

Алдааны түвшин бүхий багц файлын жишээ:

@ECHO OFF

REM prg1.exe програмыг ажиллуул

PRG1.EXE

REM дуусгах кодын шинжилгээ

ХЭРВЭЭ ERRORLEVEL 2-р ТҮВШИНГЭЭР FILENOTFOUND ГЭВЭЛ

ХЭРВЭЭ 1-Р ТҮВШИНГЭЭР ГОТО БИЧИГЧ

ХЭРЭВ АЛДААНЫ ТҮВШИН 0 БОЛ EXITOK ОРНО

ONEXIT ОРНО

:ФАЙЛ ОЛДСОНГҮЙ

ECHO алдаа! Файл олдсонгүй!

ONEXIT ОРНО

:Зохиогчийн алдаа

ECHO бичлэг хийхэд алдаа гарлаа!

ONEXIT ОРНО

:EXITOK

ECHO Хөтөлбөр амжилттай явагдаж дууслаа.

ONEXIT ОРНО

:ONEXIT

Гарах кодын дүн шинжилгээ нь тэгээс эхэлдэггүй, харин хамгийн их боломжит утгаас эхэлдэг гэдгийг анхаарна уу. Баримт нь ийм шалгалт нь "хэрэв алдааны түвшин нь утгаас их эсвэл тэнцүү байвал ..." гэсэн үг юм. Өөрөөр хэлбэл, тэгээс эхлэн шалгавал эхний мөрөнд ямар ч утга үнэн байх бөгөөд энэ нь буруу байна.

Энэ бол ийм төрлийн програмын хамгийн түгээмэл алдаа юм.

Орчны хувьсагчдыг тохируулж, устгаж, хардаг. Параметргүйгээр дуудагдсан тушаал тогтоосонорчны хувьсагч болон тэдгээрийн утгуудын жагсаалтыг харуулна.

Синтакс

тогтоосон [[ [илэрхийлэл]] [ [хувьсагч = ]] шугам]

Сонголтууд

/a Параметр болохыг заана шугамтооцоолсон тоон илэрхийлэл юм. /p Утгыг тохируулна хувьсагчоролтын шугам. variable Утгыг нь тохируулах эсвэл өөрчлөхийг хүсэж буй хувьсагчийн нэрийг заана. string Заасан хувьсагчийн мөрийн утгыг тохируулна. /? Тусламжийг тушаалын мөрөнд харуулна.

Тэмдэглэл

  • Командыг ашиглан тогтоосонсэргээх консол дээр

    Баг тогтоосонБусад параметрүүдийг сэргээх консол дээр ашиглах боломжтой.

  • Тусгай тэмдэгт ашиглах

    Тэмдгүүд<, >, |, &, ^ нь тусгай бүрхүүлийн тэмдэгтүүд бөгөөд та параметрийн тэмдэгтүүдийг ашиглахдаа тэдгээрийн өмнө зугтах тэмдэгт (^) оруулах эсвэл хашилтанд оруулах ёстой. шугам(Жишээлбэл, " агуулгын_мөр & бэлэг тэмдэг" ). Тусгай тэмдэгт агуулсан мөрийг иш татах үед ишлэл нь орчны хувьсагчийн утгын нэг хэсэг гэж тооцогддог.

  • Хүрээлэн буй орчны хувьсагчдыг ашиглах

    Хүрээлэн буй орчны хувьсагчдыг тодорхой багц файл, программуудын ажиллагааг хянах, Windows XP болон MS-DOS дэд системийн ажиллагааг хянахад ашигладаг. Баг тогтоосонИхэнхдээ Autoexec.nt файлд орчны хувьсагчдыг тохируулахад ашигладаг.

  • Одоогийн орчны тохиргоог харуулах

    Хэзээ баг тогтоосонпараметргүйгээр дуудсан тохиолдолд одоогийн тохиргоонууд дэлгэц дээр гарч ирнэ. Ихэвчлэн эдгээр тохиргоонд COMSPEC болон PATH хувьсагчууд багтдаг бөгөөд эдгээр нь дискэн дээрх программуудын байршлыг тогтооход ашиглагддаг. Windows-д ашигладаг өөр хоёр орчны хувьсагч нь PROMPT болон DIRCMD юм.

  • Параметрүүдийг ашиглах

    Хувьсагч болон мөрийн утгыг зааж өгөх үед хувьсагчийн утгыг тухайн орчинд нэмж, мөрийг тухайн хувьсагчтай буулгана. Хэрэв хувьсагч аль хэдийн байгаа бол шинэ утга нь хуучин утгыг орлоно.

    Хэрэв багт байгаа бол тогтоосонЗөвхөн хувьсагчийн нэр болон тэнцүү тэмдгийг зааж өгсөн бол (утгагүй) орчны хувьсагчд ямар ч утга оноогдохгүй бөгөөд энэ нь орчны хувьсагчийг устгахтай тэнцэх болно.

  • Хэрэглээ

    Дараах хүснэгтэд параметрийг дэмждэг операторуудыг харуулав , тэргүүлэх ач холбогдол буурах дарааллаар.

    Логик операторууд (&& ||) эсвэл үлдэгдэл оператор (%) ашиглах үед тэмдэгт мөрийн илэрхийллийг хашилтанд оруулна. Илэрхийлэл дэх аливаа тоон бус мөрүүдийг боловсруулахын өмнө утгыг тоо болгон хувиргадаг орчны хувьсагчийн нэрс гэж үзнэ. Хэрэв одоогийн орчинд тодорхойлогдоогүй орчны хувьсагчийн нэрийг зааж өгсөн бол түүнд тэг утгыг оноодог бөгөөд энэ нь утгыг авахын тулд % ашиглахгүйгээр орчны хувьсагчийн утгууд дээр арифметик үйлдлүүдийг хийх боломжийг олгодог.

    Командыг гүйцэтгэх үед багц /aкомандын скриптийн гаднах командын мөрөөс илэрхийллийн эцсийн утгыг хэвлэнэ.

    Аравтын тоонуудын хувьд 0х, наймтын тоонуудын хувьд 0 гэсэн угтвартай тооноос бусад тоон утгууд нь аравтын бутархай тоонууд юм. Тиймээс 0x12 нь 18 ба 022-той ижил байна. Наймант дүрслэл нь анхаарал халамж шаарддаг. Жишээлбэл, 8 ба 9 нь найман оронтой тоо биш учраас 08 ба 09 нь хүчингүй.

  • Хэрэглээ

    Командын мөрийг идэвхжүүлэх шаардлагагүй үед хэрэглэнэ.

  • Орчны хувьсагчийг сааталтайгаар өргөтгөх дэмжлэг

    Орчны хувьсагчийг сааталтайгаар өргөтгөх дэмжлэгийг нэмсэн. Энэ дэмжлэг нь анхдагчаар идэвхгүй болсон тул та тушаалыг ашиглан идэвхжүүлж эсвэл идэвхгүй болгож болно cmd / v.

  • Тушаалын өргөтгөлүүдтэй ажиллах

    Тушаалын өргөтгөлүүдийг идэвхжүүлсэн (анхдагч) ба тушаал ажиллаж байна тогтоосонутгагүй бол одоогийн орчны бүх хувьсагчийг харуулна. Хэрэв тушаал биелэгдсэн бол тогтоосонутгатай бол тухайн утгад тохирох хувьсагчдыг харуулна.

  • Командыг ашиглан тогтоосонбагц файлуудад

    Багц файл үүсгэхдээ командыг ашиглана уу тогтоосонхувьсагч үүсгэж, тэдгээрийг тоон хувьсагч болгон ашиглах %0 өмнө %9 . Та мөн хувьсагчийг ашиглаж болно %0 өмнө %9 командын оролт болгон тогтоосон.

  • Командын хувьсагчдад хандах тогтоосонбагц програмуудаас

    Багц програмаас хувьсагч руу хандах үед хувьсагчийн нэр нь хувийн (%) тэмдгээр хүрээлэгдсэн байх ёстой. Жишээлбэл, хэрэв багц програм дээр BAUD хувьсагч үүсгэсэн бол солих параметрийг нэрийг ашиглан түүнтэй холбож болно. %бауд%тушаалын мөрөнд.

Жишээ

TEST^1 нэртэй орчны хувьсагчийг тохируулахын тулд дараах тушаалыг оруулна уу:

testVar=test^^1 тохируулна

TEST&1 нэртэй орчны хувьсагчийг тохируулахын тулд дараах тушаалыг оруулна уу:

testVar=test^&1 тохируулна

Командын хувьсагчийн утга тогтоосонтэнцүү тэмдгийн (=) дараах бүх зүйлийг тодорхойлно. Орохдоо:

testVar = "тест^1" тохируулах

Үр дүн нь дараах байдалтай байх болно.

testVar="тест^1"

INCLUDE орчны хувьсагчийг C:\Inc тэмдэгт мөртэй (C диск дээрх Inc лавлах) холбохын тулд та дараах тушаалыг ашиглаж болно.

set include=c:\inc

C:\Inc мөрийг багц файлд INCLUDE нэрийг хувийн тэмдэгтээр (%) хавсаргаж ашиглаж болно. Жишээлбэл, багц файлд INCLUDE орчны хувьсагчаар заасан лавлахын агуулгыг хэвлэхийн тулд та дараах тушаалыг ашиглаж болно.

Командыг гүйцэтгэх үед мөр % оруулах% C:\Inc тэмдэгт мөрөөр солигдох болно.

Та мөн тушаалыг ашиглаж болно тогтоосон PATH орчны хувьсагчд шинэ лавлах нэмдэг багц программд. Жишээлбэл:

@echo унтраалттай
rem ADDPATH.BAT шинэ лавлах нэмнэ
rem-ийг замын орчны хувьсагч руу шилжүүлнэ.
зам тавих=%1;%зам%
тогтоосон

Тушаалын өргөтгөлүүдийг идэвхжүүлсэн (анхдагч) ба тушаал ажиллаж байна тогтоосонутгатай бол тухайн утгад тохирох орчны бүх хувьсагчийг харуулна. Жишээлбэл, командын мөрөнд оруулахдаа: тогтоосон х, үр дүн нь дараах байдалтай байна.

Зам=C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Гэр бүл 6 Загвар 8 Алхам 1, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0801
ProgramFiles=C:\Program Files
PROMPT=$P$G

Set командтай ажиллах зарим техник, онцлогуудыг Арифметик өгөгдөл боловсруулах хэсгээс олж болно.

Асуулт, хэлэлцүүлэг, санал хүсэлт, санал гэх мэтийн хувьд та энэ сайтын форум хэсгийг ашиглаж болно (бүртгүүлэх шаардлагатай).