Cmd kwa kutumia vigezo. Kuweka herufi sawa ya kiendeshi kwa kiendeshi kinachoweza kutolewa. Uendeshaji na vigeu kama na nambari

Kutangaza vijiti vyako mwenyewe ni sehemu muhimu ya karibu lugha yoyote ya programu, kwa hivyo katika lugha ya vbscript hutangazwa kwa kutumia neno kuu. dim, na katika jscript inatumika neno kuu var.

Vigezo mstari wa amri Windows ni tofauti kidogo; huwezi kutangaza kikundi cha anuwai za cmd, au kugawa maadili kwa anuwai kadhaa mara moja kwenye mstari wa amri. Hebu tuangalie mistari inayofuata kanuni:

mwangwi % Var3% mwangwi % VAR3% mwangwi % vAr3%

Jambo moja la kuzingatia ni kurekodi

kuweka var1 =100
kuweka var1 = 100

hii sio kitu sawa, yaani, katika kesi ya kwanza tunaunda kutofautiana kwa cmd "var1", na kwa pili - "var1". Hali ni sawa na kugawa maadili, kwa hivyo makini na nafasi !!!

Tunaona kwamba tunaweza kuonyesha thamani ya kutofautiana kwa kutumia chaguo la kukokotoa Mwangwi, tunaiambatanisha katika alama ya "%" kwa kuweka- tunaandika tu jina lake, inafaa kuzingatia kwamba vigezo vyote vinapewa aina ya kamba.

Ukikimbia amri ya cmd set, ambayo huorodhesha anuwai zote na maadili yao ndani kikao cha sasa, utaona kwamba walioundwa hivi karibuni pia watakuwepo huko Vigezo vya cmd Na. Tutaweza kuzifikia katika kipindi chote.

Ili kufuta vigezo kwenye mstari wa amri Mstari wa Windows kutoka kwa yaliyomo, unahitaji tu kugawa dhamana tupu:

itachapisha tu mstari %Var3%, na amri

KATIKA katika mfano huu Tuliepuka & na ^ herufi, na hivyo kupeana misemo:

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

Inafaa kumbuka kuwa ikiwa tutajaribu kuonyesha maadili ya anuwai hizi kwa kutumia kazi za cmd kuweka, basi hakutakuwa na matatizo, lakini ikiwa tunatumia kazi ya echo, tutapata matokeo tofauti kabisa kuliko tulivyotarajia. Kwa hivyo, unapojaribu kutekeleza amri ifuatayo:

Sasa wakati wa kutekeleza nambari:

mwangwi %var4% mwangwi %var5%

kila kitu kitaenda sawa.

Ni wazi kwamba vigezo vya cmd vilivyoundwa kwenye dirisha la mstari wa amri ya sasa hazipatikani kwa taratibu nyingine, lakini inawezekana kuweka vikwazo vikubwa zaidi.

Nini cha kuuliza eneo la ndani kujulikana, kuzuia hutumiwa SETLOCAL...ENDLOCAL. Vigezo vyote vya mstari wa amri ya Windows cmd vilivyotangazwa katikati ya kizuizi hiki havitaonekana nje yake. Fungua kihariri (mimi hutumia mhariri Notepad++, kwa kuwa inaangazia msimbo mara moja), na uandike mistari ifuatayo ya nambari ndani yake:

Tunaona kwamba kwanza tulitangaza var1 na kuipa thamani 0, kisha tukatangaza tena kutofautisha kwa jina moja, lakini kwenye kizuizi. SETLOCAL...ENDLOCAL. Hati hutoa thamani ya var1 ya ndani na ya kimataifa. Nilitumia herufi za Kilatini haswa ili jambo likitokea, usipate quacks.

Katika makala hii:

  • Kufafanua Vigezo
  • Vigezo vya mstari wa amri (vigezo vya simu ya faili ya bat)
  • IF Opereta wa Masharti
  • Kazi
  • Kutumia maadili ya kurudi (kuchakata nambari ya kutoka)

Kufafanua Vigezo

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

Taarifa ya SET ni kiendelezi cha uwezo wa mfumo wa uendeshaji kudhibiti vigezo. Inabainisha kigezo ambacho thamani yake inabadilishwa kwa jina lake wakati wowote jina hilo linapotumiwa kati ya alama za asilimia. Kwa hivyo, ikiwa imewekwa (tofauti ambayo michezo mingi inayotumia kadi ya sauti kompyuta):

WEKA BLASTER=A220 I5 D1 P330

basi wakati wa kutumia ujenzi ufuatao kwenye faili ya batch:

ECHO %BLASTER%

"A220 I5 D1 P330" itaonyeshwa kwenye skrini. Vigezo vinavyofafanuliwa kwa kutumia taarifa ya SET huitwa vigezo vya mazingira na huonekana baada ya utekelezaji hadi DOS iwashwe upya (isipokuwa ikiwa imebadilishwa kwa kumbukumbu). Hiyo ni, inaweza kutumika kutoka kwa moja faili ya batch au programu baada ya kazi katika nyingine. Maarufu zaidi ni kutofautisha kwa PATH, ambayo ni seti ya njia za utafutaji wa haraka mafaili. Imewekwa kwenye faili ya autoexec.bat.

Vigezo vya Mstari wa Amri
(vigezo vya kupiga faili ya bat)

%<цифра 0-9>

Kama ilivyo kwa lugha yoyote, katika lugha ya faili ya kundi inawezekana kutumia vigeu vilivyopokelewa kama vigezo vya faili ya bat.

Kunaweza kuwa na jumla ya vigeu 10 vinavyojitegemea vilivyopo kwa wakati mmoja. Kwa kuandika programu ngumu hii ni ndogo sana ingawa kwa kazi ya kawaida Mara nyingi 3-4 ni ya kutosha. Thamani ya kutofautiana ni sawa na thamani ya parameter inayofanana kutoka kwa mstari wa amri. Tofauti ya %0 itakuwa na jina la faili ya .bat na, ikiwa uliibainisha, njia ya kuiendea. Hiyo ni, ikiwa uliendesha faili ya abc.bat na vigezo vifuatavyo:

abc.bat a bc def

basi kigezo %0 kitakuwa na thamani abc.bat , %1 kitakuwa na thamani a , %2 kitakuwa na bc , na %3 kitakuwa na def . Sifa hii hutumiwa sana kuunda faili za kundi nyingi wakati wa kushughulika na utendakazi unaojirudia.

Ili kupata vigezo zaidi ya 10 kutoka kwa mstari wa amri, unaweza kutumia amri ya SHIFT.

Amri ya SHIFT inakuwezesha kutumia vigezo vya mstari wa amri zaidi ya 10 Hata hivyo, vigezo vya awali vinavyolingana vinapotea. Kwa maneno mengine, amri ya SHIFT hubadilisha maadili yote ya kutofautisha hatua moja kwenda kushoto. Hiyo ni, kutofautisha %0 kutakuwa na thamani iliyomo hapo awali katika kigezo %1, na kigeuzo %1 kitakuwa na thamani ya badiliko %2 kabla ya mabadiliko. Hata hivyo, operesheni hii haiwezi kutenduliwa, ambayo ni, haiwezekani kugeuza vigeu nyuma.

IF Opereta wa Masharti

Kwa bahati nzuri, mkalimani wa amri cmd.exe katika Windows 2000 ya kisasa na baadaye inasaidia vizuizi vya amri katika ujenzi wa matawi, kuondoa hitaji la kutumia IF zilizo na lebo. Vitalu vya amri vimefungwa kwenye mabano. Inaonekana kama hii (kuiga mtindo wa uingizaji wa C/C++):

ikiwa hali (

Amri za Rem za tawi la 'basi'

Rem...

) mwingine (

Amri za Rem za tawi la 'nyingine'

Rem...

Mfano mahususi hutumia:

@echo imezimwa

weka BUILDMODE=%1

ikiwa "%BUILDMODE%" == "" (

Echo FAIL: Hoja inahitajika ^(--debug, --release^)

Toka /b 1

rem Ondoa viambato vyote kwenye hoja ili kurahisisha uchakataji

weka BUILDMODE=%BUILDMODE:-=%

ikiwa "%BUILDMODE%" == "tatua" (

Weka CCFLAGS=/Od /MDd /Z7

) mwingine (

Weka CCFLAGS=/O2 /MD

Kwa maoni yangu, hii inawezekana kabisa kuishi nayo. Lakini, kama kawaida, maisha sio rahisi kama inavyoonekana. Kuna tatizo moja. Vigezo vinavyotumika wakati huo na vingine vinapanuliwa kabla ya vizuizi kuanza kutekelezwa, na sio wakati wa utekelezaji. Katika mfano hapo juu hii haisababishi shida yoyote, lakini ifuatayo itakuwa:

ikiwa "%BUILDMODE%" == "tatua" (

Echo INFO: Kuweka hali ya mazingira ya utatuzi

Weka OTFLAGS=/Od

Weka CCFLAGS=%OPTFLAGS% /MDd /Z7

) mwingine (

Echo INFO: Kuweka hali ya kutolewa kwa mazingira

Weka OTFLAGS=/O2

Weka CCFLAGS=%OPTFLAGS% /MD

Kukamata ni kwamba katika vizuizi vyote viwili, uingizwaji wa tofauti ya OTFLAGS itatokea kabla ya kubadilishwa wakati wa utekelezaji wa kizuizi hicho. Kwa hivyo, CCFLAGS itajazwa na thamani ambayo OTFLAGS ilikuwa nayo wakati wa utekelezaji wa hii ikiwa kizuizi kilianza.

Tatizo hili linatatuliwa kwa kutumia upanuzi wa kutofautiana uliochelewa. Vigezo vilivyomo ndani!…! badala ya %...% , maana zao zitafichuliwa tu wakati wa matumizi ya moja kwa moja. Hali hii imezimwa kwa chaguo-msingi. Unaweza kuiwezesha kwa kutumia /V:ON swichi wakati wa kupiga cmd.exe, au kwa kutumia amri:

katika maandishi ya faili ya bat yenyewe. Njia ya pili inaonekana kuwa rahisi zaidi kwangu - sio nzuri sana kuhitaji mtu kuendesha hati yako na kigezo fulani.

Kwa kusema hivyo, mfano "mbaya" uliopita unaweza kusahihishwa kama hii:

upanuzi wa setlocal enabledelayedex

ikiwa "%BUILDMODE%" == "tatua" (

Echo INFO: Kuweka mazingira ya hali ya utatuzi

Weka OTFLAGS=/Od

Weka CCFLAGS=!OPTFLAGS! /MDd /Z7

) mwingine (

Echo INFO: Kuweka mazingira ya hali ya kutolewa

Weka OTFLAGS=/O2

Weka CCFLAGS=!OPTFLAGS! /MD

Sasa hii ni karibu kizuizi kamili ikiwa-basi-mwingine. Karibu, kwa sababu ikiwa utakutana na mabano ya kufunga katika moja ya amri za mwangwi, unahitaji kuikwepa na herufi ^, vinginevyo mchanganuzi atachanganyikiwa...

Lakini kwa hali yoyote, hii ni bora zaidi kuliko idadi ya mwendawazimu ya vitambulisho na mabadiliko.

Kazi

Inawezekana kuunda kazi katika faili ya bat? Ndio unaweza. Aidha, wakati mwingine ni muhimu hata. Kweli, hizi zinaweza kuitwa kazi kwa masharti.

Kuna syntax maalum ya amri ya simu, ambayo hukuruhusu kwenda kwa alama kwenye faili moja ya popo, ukikumbuka mahali ambapo simu hii ilipigwa:

piga: hoja za lebo

Kazi inarudishwa na amri:

toka /b [msimbo wa hiari wa kurejesha]

Kitufe cha /b ni muhimu sana hapa: bila hiyo, hutatoka sio kazi, lakini hati kwa ujumla.

Kwa maelezo, chapa kwenye mstari wa amri:

wito/?

Utgång /?

Inafurahisha, amri ya simu na syntax hii inasaidia simu za kujirudia Na uundaji wa moja kwa moja fremu mpya ya hoja zinazobadilika %0-%9. Wakati mwingine hii inaweza kuwa na manufaa. Hapa kuna mfano wa kawaida wa hesabu ya hali ya kujirudia katika lugha ya amri:

@echo imezimwa

piga simu:kipengele %1

mwangwi %RESULT%

Utgång

rem Kazi ya kukokotoa thamani halisi

rem Ingia:

rem %1 Nambari ambayo ungependa kuihesabia kipengele

rem Pato:

rem %RESULT% Thamani ya kitengo

:kiwanda

ikiwa %1 == 0 (

Weka RESULT=1

Toka /b

ikiwa %1 == 1 (

Weka RESULT=1

Toka /b

weka /a PARAM=%1 - 1

call:factorial %PARAM%

seti /a RESULT=%1 * %RESULT%

toka /b

Mfano wa kazi:

> factorial.bat 10

3628800

Kutumia Maadili ya Kurudisha
(inachakata msimbo wa kuondoka wa programu)

Wakati programu yoyote inakamilisha kazi yake, inarudi msimbo wake wa kukomesha kwenye mfumo wa uendeshaji. Ni desturi kurudisha sifuri baada ya kukamilika kwa mafanikio, vinginevyo msimbo wa makosa. Wakati mwingine, au tuseme mara nyingi, programu "kwa makusudi" inarudi thamani isiyo ya sifuri ili baadhi ya maelezo ya uendeshaji wake yanaweza "kujifunza" katika faili ya kundi. Kwa mfano, programu inarudi msimbo wa ufunguo uliosisitizwa, na faili ya .bat hufanya vitendo mbalimbali kulingana na hilo.

Faili ya batch inawezaje kujua nambari ya kutoka ya programu iliyotekelezwa? Tofauti muhimu ya ERRORLEVEL imetolewa kwa madhumuni haya.

Mfano wa faili ya batch iliyo na viwango vya makosa:

@ECHO IMEZIMWA

REM Endesha programu prg1.exe

PRG1.EXE

Uchambuzi wa Msimbo wa Kukamilisha REM

IWAPO HITILAFU 2 GOTO FILENOTAKUTWA

KAMA KOSA 1 GOTO WRITEERROR

IKIWA HITILAFU 0 GOTO EXITOK

NENDA ONEXIT

:FAILI HALIJAPATIKANA

Hitilafu ya ECHO! Faili halijapatikana!

NENDA ONEXIT

:MWANDISHI

Hitilafu ya kurekodi ECHO!

NENDA ONEXIT

:EXITOK

ECHO Programu ilikamilishwa kwa mafanikio.

NENDA ONEXIT

:ONEXIT

Tafadhali kumbuka kuwa uchambuzi wa msimbo wa kuondoka hauanza kutoka sifuri, lakini kutoka kwa thamani ya juu iwezekanavyo. Ukweli ni kwamba hundi kama hiyo inamaanisha: "ikiwa kiwango cha makosa ni kikubwa kuliko au sawa na thamani, basi ...". Hiyo ni, ikiwa tunaangalia kuanzia sifuri, thamani yoyote itakuwa kweli kwenye mstari wa kwanza, ambayo si sahihi.

Hili ndilo kosa la kawaida katika aina hii ya programu.

Ndani ya faili za amri, unaweza kufanya kazi na kinachojulikana anuwai ya mazingira (au anuwai ya mazingira), ambayo kila moja imehifadhiwa ndani. kumbukumbu ya ufikiaji bila mpangilio, ina jina lake la kipekee, na thamani yake ni kamba. Vigezo vya kawaida vya mazingira huanzishwa kiotomatiki wakati wa mchakato wa kuwasha mfumo wa uendeshaji. Vigezo vile ni, kwa mfano, WINDIR, ambayo huamua eneo Saraka ya Windows, TEMP, ambayo inabainisha njia ya saraka ya hifadhi faili za muda Windows au PATH, ambayo huhifadhi njia ya mfumo (njia ya utaftaji), ambayo ni, orodha ya saraka ambayo mfumo unapaswa kutafuta utekelezwaji au faili. kugawana(Kwa mfano, maktaba zenye nguvu) Pia, katika faili za batch kutumia SET amri Unaweza kutangaza anuwai za mazingira yako mwenyewe.

Kupata thamani ya kutofautiana

Ili kupata thamani ya fulani kutofautiana kwa mazingira Unahitaji kuambatanisha jina la utaftaji huu katika alama %. Kwa mfano:

@ECHO ZIMA CLS REM Unda kigeuzo MyVar SET MyVar=Hujambo REM Badilisha kigeu SET MyVar=%MyVar%! Thamani ya kutofautisha ya ECHO MyVar: %MyVar% REM Inafuta kigeu cha MyVar SET MyVar= Thamani tofauti ya ECHO WinDir: %WinDir%

Unapoendesha faili ya kundi kama hilo, mstari utaonyeshwa kwenye skrini

Thamani ya kutofautisha ya MyVar: Hujambo! Thamani ya kutofautisha ya WinDir: C:\WINDOWS

Kubadilisha Vigezo kama Kamba

Kuna udanganyifu unaweza kufanya na anuwai za mazingira kwenye faili za batch. Kwanza, operesheni ya kuunganisha (gluing) inaweza kufanywa juu yao. Ili kufanya hivyo, unahitaji tu kuandika maadili ya vigezo vilivyounganishwa karibu na kila mmoja katika amri ya SET. Kwa mfano,

WEKA A=SETI Moja B=SETI Mbili C=%A%%B%

Baada ya kutekeleza amri hizi kwenye faili, thamani ya kutofautiana kwa C itakuwa kamba "Mbili". Haupaswi kutumia ishara + kwa upatanisho, kwani itafasiriwa tu kama ishara. Kwa mfano, baada ya kuendesha faili na maudhui yafuatayo

WEKA A=SETI Moja B=SETI Mbili C=A+B ECHO Inabadilika C=%C% SET D=%A%+%B% ECHO Tofauti D=%D%

Mistari miwili itaonyeshwa kwenye skrini:

Kigeugeu C=A+B Kibadilishi D=Moja+Mbili

Pili, unaweza kutoa kamba ndogo kutoka kwa utofauti wa mazingira kwa kutumia ujenzi %variable_name:~n1,n2%, ambapo nambari n1 huamua kukabiliana (idadi ya wahusika kurukwa) kutoka mwanzo (ikiwa n1 ni chanya) au kutoka mwisho (ikiwa n1 ni hasi) ya utofauti wa mazingira unaolingana, na nambari n2 ni nambari ya herufi zitakazogawiwa (ikiwa n2 ni chanya) au nambari wahusika wa mwisho katika kigezo ambacho hakitajumuishwa kwenye safu ndogo iliyochaguliwa (ikiwa n2 ni hasi). Ikiwa chaguo moja tu hasi -n limebainishwa, herufi n za mwisho zitatolewa. Kwa mfano, ikiwa tofauti %DATE% huhifadhi kamba "09/21/2007" (uwakilishi wa mfano wa tarehe ya sasa katika mipangilio fulani ya kikanda), kisha baada ya kutekeleza amri zifuatazo.

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

vigezo vipya vitakuwa na maadili yafuatayo: %dd1%=21, %dd2%=21, %mm%=09, %yyyy%=2007.

Tatu, unaweza kufanya utaratibu wa uingizwaji wa kamba ndogo kwa kutumia ujenzi %variable_name:s1=s2%(hii itarudisha kamba na kila tukio la kamba ndogo s1 katika utofauti wa mazingira unaolingana na kubadilishwa na s2 ). Kwa mfano, baada ya kutekeleza amri

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

variable b itahifadhi kamba "199456" . Ikiwa parameta ya s2 haijainishwa, basi kamba ndogo ya s1 itaondolewa kwenye kamba ya pato, i.e. baada ya kutekeleza amri

WEKA a=123456 WEKA b=%a:23=%

variable b itahifadhi kamba "1456" .

Uendeshaji na vigeu kama na nambari

Wakati usindikaji wa amri ulioimarishwa umewezeshwa (hali ya msingi katika Windows XP), inawezekana kutibu maadili ya kutofautisha ya mazingira kama nambari na kufanya mahesabu ya hesabu juu yao. Ili kufanya hivyo, tumia amri ya SET na kubadili /A. Huu hapa ni mfano wa faili ya kundi add.bat inayoongeza nambari mbili zilizotolewa kama vigezo vya mstari wa amri na kuonyesha jumla inayotokana kwenye skrini:

@ECHO OFF REM Tofauti M itahifadhi jumla ya SET /A M=%1+%2 ECHO Jumla ya %1 na %2 ni sawa na %M% REM Futa kigezo cha M SET M=

Mabadiliko ya ndani vigezo

Mabadiliko yoyote unayofanya kwa vigezo vya mazingira katika faili ya amri kwa kutumia amri ya SET yanaendelea baada ya faili kuondoka, lakini yanafaa tu ndani ya dirisha la sasa la amri. Inawezekana pia kubinafsisha mabadiliko ya anuwai ya mazingira ndani ya faili ya batch, ambayo ni, kurejesha kiotomati maadili ya anuwai zote kama ilivyokuwa kabla ya faili kuzinduliwa. Amri mbili zinatumika kwa hili: SETLOCAL na ENDLOCAL. Amri ya SETLOCAL huamua mwanzo wa eneo mitambo ya ndani vigezo vya mazingira. Kwa maneno mengine, mabadiliko ya mazingira yaliyofanywa baada ya kuendesha SETLOCAL yatakuwa ya kawaida kwa faili ya batch ya sasa. Kila amri ya SETLOCAL lazima iwe na amri inayolingana ENDLOCAL ili kurejesha maadili ya awali ya mazingira. Mabadiliko ya mazingira yaliyofanywa baada ya amri ENDLOCAL kutekelezwa hayapo tena kwenye faili ya bechi ya sasa; maadili yao ya awali hayatarejeshwa baada ya kukamilika kwa utekelezaji wa faili hii.

Vigezo vya mazingira vinavyotumiwa katika faili za batch (amri) hufanya iwezekane kuzuia kubainisha njia kabisa kwa saraka. Kwa mfano, ikiwa hatujui barua mapema diski ya mfumo, tunaweza kutumia kibadilishaji kila wakati %systemdrive%, ambayo inarudi barua ya gari ambayo OS imewekwa. Pia, vigezo hutumiwa kuboresha msimbo - parameter inayorudiwa mara kwa mara (kwa mfano, ufunguo wa usajili) inaweza kupewa tofauti fupi na kutumika. Makala hii inajadili kwa kina mbinu mbalimbali kufanya kazi na vigezo, pamoja na njia za kubadilisha na kuunda vigezo vipya. Sasa hebu tuzungumze juu ya kila kitu kwa utaratibu.

Uainishaji wa vigezo vya mazingira

Muhtasari

Timu Gamba la Windows(cmd.exe) ni sawa chombo chenye nguvu kufanya kazi na mfumo. Faili za kundi zinaweza kubadilisha idadi sawa ya kazi kiotomatiki, ndiyo sababu hutumiwa mara nyingi ufungaji wa moja kwa moja Windows. Matumizi ya ustadi wa vigeu kwenye faili za batch hukuruhusu kutatua masuala mbalimbali. Kufanya kazi na shell ya amri inakuwa yenye ufanisi zaidi na wakati huo huo msimbo wa faili za kundi hurahisishwa. Unaweza kupata mifano mingine ya kutumia vigezo kwenye kurasa za tovuti au jukwaa. Mifano zote zinazotumiwa katika makala hii zinachukuliwa kutoka kwa maandiko ya washiriki, ambayo shukrani nyingi kwao.

Istilahi

Amri shell- hii ni tofauti programu, ambayo hutoa mawasiliano ya moja kwa moja kati ya mtumiaji na mfumo wa uendeshaji. Maandishi kiolesura cha mtumiaji mstari wa amri hutoa mazingira ambayo maombi na huduma na kiolesura cha maandishi.

cmd.exe- mkalimani wa amri hiyo ganda la amri Windows OS hutumia kutafsiri amri iliyoingizwa katika umbizo ambalo mfumo unaelewa.

Kikao cha timu inaweza kuanzishwa ama kwa uzinduzi cmd.exe, na kwa kuendesha faili ya kundi. Kwa maneno mengine, shell ya sasa ya amri imeundwa. Ipasavyo, kutoka kwa ganda hili (kwa mfano, kumaliza faili ya batch) humaliza kikao cha amri.

Kipindi cha mtumiaji(kipindi cha mtumiaji) huanza mtumiaji anapoingia (ingia) na kuisha mtumiaji anapojizima (ondoka).

Timu ya     WEKA Inatumika kutazama na kubadilisha anuwai za mazingira kwenye safu ya amri ya Windows. Vigezo vya mazingira ni vigeu ambavyo maadili yake yanayokubalika yanabainisha mazingira ambamo programu ya sasa- njia faili za mfumo, maelezo ya maunzi, saraka za watumiaji, n.k. Thamani za mabadiliko ya mazingira hutolewa wakati wa mchakato Windows boot, usajili wa mtumiaji katika mfumo, wakati wa kutekeleza michakato ya mtu binafsi au kwa kutumia amri WEKA. Kuangalia thamani iliyochukuliwa na tofauti fulani, unaweza kutumia amri:

Tofauti ya SET
WEKA NJIA- kuonyesha thamani ya kutofautiana NJIA
Ili kuunda tofauti mpya au kubadilisha thamani ya iliyopo, tumia amri:

SET variable=string

kutofautiana- Jina la mabadiliko ya mazingira.
mstari- Mfuatano wa herufi uliopewa kigezo kilichobainishwa.

WEKA Jina Langu=Vasya- kuweka thamani ya kutofautiana Jina langu

SET path=C:\progs;%path%- kubadilisha thamani ya kutofautiana NJIA kwa kuongeza mwanzo wa mstari C:\prog

Thamani iliyokubaliwa na kutofautisha inapatikana kwa usindikaji katika faili za amri kwa kutumia jina lake lililofungwa kwa ishara za asilimia - % . Kwa mfano, amri ya kuonyesha maandishi kwenye onyesho la ECHO katika fomu:

Tarehe ya ECHO- itaonyesha neno "tarehe" na amri
ECHO %date% itaonyesha thamani ya kutofautisha tarehe, i.e. tarehe ya sasa katika muundo wa mfumo wa uendeshaji.

Timu WEKA bila vigezo hutumika kuonyesha maadili ya sasa ya vigezo vya mazingira.

ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Usr\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=TEST7
ComSpec=C:\windows\system32\cmd.exe
FP_NO_HOST_CHECK=HAPANA
HOMEDRIVE=C:
HOMEPATH=\Users\Usr
LOCALAPPDATA=C:\Users\Usr\AppData\Local
LOGONSERVER=\\TEST7
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Njia=C:\windows\system32;C:\windows;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS; .VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Familia 15 Model 3 Hatua ya 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\
UMMA=C:\Users\Public
SystemDrive=C:
SystemRoot=C:\windows
TEMP=C:\Users\Usr\AppData\Local\Temp
TMP=C:\Users\Usr\AppData\Local\Temp
USERDOMAIN=test7
USERNAME=Usr
USERPROFILE=C:\Users\Usr
windir=C:\madirisha

Kwa kuongezea anuwai zilizoonyeshwa kwenye orodha wakati wa kupiga amri ya SET, kuna wengine ambao maadili yao hubadilika kwa nguvu:

%CD%- inachukua thamani saraka ya sasa.
%TAREHE%- inachukua thamani ya tarehe ya sasa.
%TIME%- inachukua thamani ya wakati wa sasa.
%RANDOM%- maana nambari ya nasibu kati ya 0 na 32767.
%ERRORLEVEL%- sasa ERRORLEVEL thamani, kigezo maalum ambacho hutumika kama kiashiria cha matokeo ya utekelezaji wa programu.
%CMDEXTVERSION% Thamani ya toleo la uchakataji wa amri iliyopanuliwa ya CMD.EXE.
%CMDCMDLINE%- inapanua kwa mstari wa amri wa awali ambao uliita shell.

Ikiwa unataja sehemu tu ya jina wakati wa kupiga amri ya SET, orodha ya vigezo ambavyo majina yao huanza na kamba maalum itaonyeshwa. Kwa mfano:

WEKA U- itaonyesha maadili ya anuwai zote ambazo majina yanaanza na "U".

Amri ya SET inasaidia swichi mbili za ziada:

SET / usemi

SET /P variable=

Swichi ya /A inabainisha kuwa mfuatano ulio upande wa kulia wa ishara ya usawa ni usemi wa nambari ambao thamani yake inatathminiwa. Injini ya kujieleza ni rahisi sana na inasaidia shughuli zifuatazo, zilizoorodheshwa katika mpangilio wa chini wa kipaumbele:

Unapotumia waendeshaji wowote wenye mantiki au binary, lazima uambatanishe mfuatano wa usemi katika alama za nukuu. Mistari yoyote isiyo ya nambari katika usemi huchukuliwa kama majina ya mazingira ambayo maadili yake hubadilishwa kuwa fomu ya nambari kabla ya matumizi. Ikiwa kigezo chenye jina lililobainishwa hakijafafanuliwa katika mfumo, thamani isiyofaa inabadilishwa badala yake. Hii inakuwezesha kutekeleza shughuli za hesabu na maadili tofauti ya mazingira, bila kulazimika kuingiza % ishara ili kupata maadili. Ikiwa SET /A inaitwa kutoka kwa safu ya amri badala ya faili ya batch, inachapisha thamani ya mwisho ya usemi. Jina la utofauti wa mazingira lazima lionekane upande wa kushoto wa opereta yoyote ya kazi. Maadili ya nambari huchukuliwa kama desimali isipokuwa hutanguliwa na kiambishi awali:

0x- kwa nambari za hexadecimal
0 - Kwa nambari za octal.

Mfano wa kutumia viambishi awali:

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

Katika faili hii ya batch, thamani ya kutofautisha ni REZ inakokotolewa kwa kuongeza nambari 10 inayowakilishwa katika heksadesimali (0xA) na nambari 10 inayowakilishwa katika oktali (012).

Swichi ya /P hukuruhusu kuweka thamani ya kibadilishaji kwa mfuatano wa ingizo ulioingizwa na mtumiaji. Huonyesha kidokezo maalum cha promptString kabla ya kusoma mfuatano ulioingizwa. Kidokezo cha PromptString kinaweza kuwa tupu. Ufunguo huu hukuruhusu kupanga mazungumzo na mtumiaji katika faili ya batch:

@ECHO IMEZIMWA
WEKA /P NAME=Ingiza jina la mtumiaji:
WEKA /P pass=Ingiza nenosiri:
Jina la mtumiaji la ECHO - %NAME% , Nenosiri - %PASS%

Katika faili za kundi, mara nyingi unahitaji kufanya kazi na sehemu ya thamani iliyochukuliwa na kutofautisha, ambayo unatumia maadili mbadala:

variable:string1=string2- inachukua nafasi katika thamani iliyopokea ya kutofautiana mstari 1 juu mstari wa 2

Inayofuata faili ya batch hutumia kubadilisha herufi na herufi ya deshi katika thamani ya kutofautisha inayolingana na tarehe ya sasa:

@ECHO IMEZIMWA
weka tm=%DATE%
Tarehe ya ECHO1 = %tm%
WEKA tm=%DATE:.=-%
Tarehe ya ECHO2 = %tm%

Ili kuonyesha sehemu ya thamani iliyochukuliwa na kutofautisha, ujenzi ufuatao hutumiwa:

tofauti:~x,y- Wapi x- idadi ya wahusika walioruka tangu mwanzo wa mstari, na y- idadi ya wahusika kutumika kama thamani ya kutofautiana.

Mfano ufuatao unatumia onyesho la wakati wa sasa bila sekunde na sekunde za sehemu (herufi 5 pekee za thamani ya kawaida Tofauti ya TIME):

@ECHO IMEZIMWA
weka tm=%TIME%
ECHO Time1 = %tm%
WEKA tm=%TIME:~0.5%
ECHO Time2 = %tm%

Ikiwa thamani y(urefu) haijainishwa, basi thamani ya kutofautiana iliyobaki hadi mwisho wa mstari hutumiwa. Ikiwa thamani y ni hasi, kisha sehemu ya kamba ya thamani ya kutofautiana kutoka mwisho inatumiwa. Mfano uliotangulia unaweza kurekebishwa ili kubainisha kuwa thamani ya muda iliyopokelewa imeondolewa vibambo 6 kutoka mwisho:

@ECHO IMEZIMWA
weka tm=%TIME%
ECHO Time1 = %tm%
WEKA tm=%TIME:~0.-6%
ECHO Time2 = %tm%

Inawezekana kutumia idadi ya mapungufu haijainishwa, na nambari hasi hutumiwa, basi thamani iliyopokelewa itakuwa sehemu ya kutofautisha kutoka mwisho wa mstari:

%NJIA:~-10%- itatoa herufi 10 za mwisho za utofauti wa PATH

Thamani tupu inaweza kuachwa, kuhifadhi umbizo la uingizwaji:

%NJIA:~0.-2% sawa %NJIA:~,-2%

Kutumia vigezo vya mazingira Katika faili za kundi kuna kizuizi fulani kinachohusishwa na ukweli kwamba thamani iliyopewa inabaki bila kubadilika wakati inarekebishwa ndani ya kikundi cha amri zilizoainishwa na mabano, kwa mfano katika amri. KAMA au KWA. Kukwepa kizuizi hiki uzinduzi unatumika processor ya amri na /V: ON paramu na badala ya ishara za asilimia, kupata iliyopokelewa kutofautiana kwa thamani, zinatumika alama za mshangao. Kwa kuongeza, inawezekana kutumia uzinduzi wa kawaida processor ya amri, lakini na uanzishaji wa ndani hali hii amri:

Tofauti katika matokeo ya kutumia maadili tofauti inaonyeshwa wazi na faili ifuatayo ya batch:


@ECHO IMEZIMWA
weka VAR=kabla
ikiwa "%VAR%" == "kabla" (
weka VAR=baada ya
kama "!VAR!" == "baada ya" @echo Kwa asilimia sign=%VAR% , Na alama ya swali=!VAR!

Timu weka VAR=baada ya kutekelezwa ndani ya utaratibu mdogo uliotenganishwa na mabano na, ikiwa amri imeondolewa Upanuzi wa Kuwezesha Kuchelewa au kutotumia kupata thamani ya kutofautisha VAR alama za mshangao, thamani yake itabaki kuwa ya zamani (kile kilichowekwa kabla ya kuingia kwenye subroutine). Tatizo sawa hutokea wakati thamani ya kutofautiana inabadilishwa ndani ya kitanzi cha amri. KWA. Kwa mfano, kupata orodha ya faili kwenye saraka ya sasa, faili ya batch kama hii haitafanya kazi:

weka ORODHA=
kwa %%i katika (*) weka LIST=%LIST% %%i
mwangwi %LIST%

Thamani inayobadilika ORODHA haitabadilishwa ndani ya kitanzi. Ili hii ifanyike, faili ya batch inahitaji kurekebishwa kama ifuatavyo:

Upanuzi wa Selocal WezeshaDelayedExpansion
weka ORODHA=
kwa %%i katika (*) weka LIST=!ORODHA! %%i
mwangwi %LIST%

Sasa, thamani ya kutofautiana ORODHA ndani ya kitanzi KWA itabadilika, ikichukua kwa mpangilio maadili ya majina ya faili yaliyotengwa na nafasi ( weka ORODHA=!ORODHA! %%i)