Ndani ya faili za amri, unaweza kufanya kazi na kinachojulikana anuwai za mazingira (au vigezo vya 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 mfumo wa uendeshaji unapoanza. 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) Unaweza pia kutangaza anuwai za mazingira yako katika faili za batch kwa kutumia amri ya SET.
Kupata thamani ya kutofautiana
Ili kupata thamani 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 kubadilika ya ECHO MyVar: %MyVar% REM Inafuta kigeu cha MyVar SET MyVar= Thamani tofauti ya ECHO WinDir: %WinDir%
Wakati wa kuendesha hii faili ya batch 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. Hebu tutoe mfano faili ya batch add.bat, na kuongeza nambari mbili zilizotolewa kama vigezo mstari wa amri, na kuonyesha kiasi kinachosababisha 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 kwa 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.
Wakati mwingine ni muhimu kuunda kutofautiana kwa tarehe V cmd/bat maandishi madirisha jinsi tunavyohitaji, na sio jinsi mfumo wa uendeshaji unavyotupa.
Kwa mfano, ili kuongeza data hii kwenye faili ya kumbukumbu, kurekodi wakati au tarehe ya tukio, tengeneza faili yenye jina ambalo linapaswa kuwa na data ya tarehe au wakati (siku, mwezi, mwaka, saa, dakika, sekunde, milliseconds. ) Huwezi kujua, kazi zetu ni zipi... Hebu tumia mawazo yetu :)
Katika mfano ufuatao tunaona mgawanyiko wa vigeu kulingana na ruwaza tunazohitaji.
h- saa tarakimu 2 (yaani, saa itatolewa fomu ifuatayo - 01, 02, ..., 09, ... , 12, ... 24)
m - dakika 2 wahusika
s - sekunde 2 ishara
ms - milisekunde tarakimu 2, kwa sababu fulani kutoka 0 hadi 99
dd - siku 2 ishara
mm - mwezi 2 wahusika
yyy - mwaka 4 tarakimu
Mfano wa kutumia vigezo %TAREHE% Na %TIME% katika maandishi cmd / popo Windows:
@echo imezimwa
weka h=%TIME:~0.2%
weka m=%TIME:~3.2%
weka s=%TIME:~6.2%
weka ms=%TIME:~9.2%
weka curtime=%h%:%m%:%s%:%ms%
weka dd=%DATE:~0.2%
weka mm=%DATE:~3.2%
weka yyy=%DATE:~6.4%
weka curdate=%dd%-%mm%-%yyyy%
weka curdatetime=%curdate% %curtime%
echo Wakati wa sasa ni %curdatetime%
Katika baadhi ya matoleo Umbizo la Windows kutoa tarehe na wakati ni tofauti, hivyo hati hii inaweza kufanya kazi kama tunavyohitaji.
Kwa nadharia, unaweza kuchukua sehemu za anuwai yoyote kwa njia sawa, uhakika ni kwamba umbizo hapa ni kama hii:
Nambari ya kwanza baada ya: ~ ni nambari ya herufi ambayo tunaanza kuchukua thamani, nambari ya pili ni nambari ngapi za kunasa.
Kwa hivyo, inageuka kuwa tunaweza kuchukua kwa mahitaji yetu sehemu yoyote ya anuwai ya mazingira ya Windows inayopatikana kwetu.
Ninajua anuwai zifuatazo ambazo tunaweza kupata maadili:
ALLUSERSPROFILE | Hurejesha uwekaji wa wasifu wa "Watumiaji Wote". |
APPDATA | Hurejesha eneo chaguomsingi la data ya programu. |
CD | Inaonyesha njia folda ya sasa. Sawa na amri ya CD bila hoja. |
CMDCMDLINE | Amri halisi iliyotumiwa kuanza cmd.exe ya sasa. |
CMDEXTVERSION | toleo la Viendelezi vya Kichakataji Amri ya sasa. |
CommonProgramFiles | Mahali pa saraka ya "Faili za Kawaida" (kawaida %ProgramFiles%\Common Files) |
COMPUTERNAME | jina la kompyuta |
COMSPEC | njia ya ganda inayoweza kutekelezwa |
TAREHE | Hurejesha tarehe ya sasa. Hutumia umbizo sawa na tarehe /t amri. Imeundwa na amri ya Cmd.exe. |
KOSA | Hurejesha msimbo wa makosa ya amri ya mwisho iliyotumiwa. Maana, hapana sawa na sifuri, kwa kawaida huonyesha kuwa kuna hitilafu. |
HOMDRIVE | Hurejesha jina la hifadhi ya ndani kituo cha kazi inayohusishwa na saraka ya nyumbani ya mtumiaji. Weka kulingana na eneo la saraka kuu. Saraka ya nyumbani ya mtumiaji imeainishwa kwenye snap-in " Watumiaji wa ndani na vikundi." |
NJIA YA NYUMBANI | Inarudi njia kamili kwa saraka ya nyumbani ya mtumiaji. Weka kulingana na eneo la saraka kuu. Saraka ya nyumbani ya mtumiaji imebainishwa katika Watumiaji wa Ndani na Vikundi snap-in. |
SHIRIKI NYUMBANI | Hurejesha njia ya mtandao kwenye saraka ya nyumbani iliyoshirikiwa ya mtumiaji. Weka kulingana na eneo la saraka kuu. Saraka ya nyumbani ya mtumiaji imebainishwa katika Watumiaji wa Ndani na Vikundi snap-in. |
LOGONSERVER | jina la kidhibiti cha kikoa kinachotumiwa kuidhinisha mtumiaji wa sasa |
Wachakataji NUMBER_OF_ | idadi ya wasindikaji katika mfumo |
Mfumo wa Uendeshaji | jina la mfumo wa uendeshaji. Windows XP na Windows 2000 zinaonekana kama Windows_NT. |
NJIA | Inabainisha njia ya utafutaji faili zinazoweza kutekelezwa. |
PATHEXT | Hurejesha orodha ya viendelezi vya faili ambavyo vinachukuliwa kuwa vinaweza kutekelezwa na mfumo wa uendeshaji. |
PROCESSOR_ARCHITECTURE | usanifu wa processor |
PROCESSOR_IDENTIFIER | maelezo ya processor |
PROCESSOR_LEVEL | nambari ya mfano wa processor |
PROCESSOR_REVISION | marekebisho ya processor |
PROGRAMFILES | njia ya Folda ya programu Mafaili |
HARAKA | Hurejesha chaguo za mstari wa amri kwa mkalimani wa sasa. Imeundwa na amri ya Cmd.exe. |
NAFASI | nambari ya desimali nasibu kutoka 0 hadi 32767. Imetolewa na Cmd.exe |
SESSIONNAME | Aina ya kikao. Thamani chaguo-msingi ni "Console" |
SYSTEMDRIVE | diski ambayo iko Folda ya mizizi Windows |
SYSTEMROOT | Njia ya folda ya mizizi ya Windows |
TEMP au TMP | Hurejesha folda chaguo-msingi za muda zinazotumiwa na programu zinazoweza kufikiwa na watumiaji walioingia. Programu zingine zinahitaji utofauti wa TEMP, zingine zinahitaji utofauti wa TMP. Inawezekana TEMP na TMP zinaweza kuelekeza kwenye saraka tofauti, lakini kawaida huwa sawa. |
WAKATI | Hurejesha wakati wa sasa. Hutumia umbizo sawa na amri ya saa /t. Imeundwa na amri ya Cmd.exe. |
USERDOMAIN | jina la kikoa ambacho mtumiaji wa sasa anamiliki |
USERNAME | jina la mtumiaji la sasa |
WASIFU WA MTUMIAJI | njia ya wasifu wa mtumiaji wa sasa |
WINDIR | saraka ambapo Windows imewekwa |
0.00 (1 )
Mbinu ya jumla.
Faili za amri ni faili za maandishi na ugani popo au cmd, ambao mistari yao inawakilisha amri au majina ya faili zinazoweza kutekelezwa. Unapoendesha faili ya kundi, udhibiti unachukuliwa na processor ya amri ya mfumo wa uendeshaji (mara nyingi huitwa mkalimani wa amri), ambayo husoma kwa mtiririko na kutafsiri mistari katika faili ya kundi. Kwa Windows9X hii imefanywa amri.com, kwa WinNT/2K/XP - cmd.exe. Mistari ya faili ya kundi inaweza kuwa na amri kutoka kwa kichakataji cha amri yenyewe (KWA, GOTO, IF, nk) au majina ya moduli zinazoweza kutekelezwa (net.exe, regedit.exe, win.com, nk). Kwenye mifumo ya uendeshaji ya WinNT/2K/XP unaweza kupata habari fupi kulingana na muundo wa amri kwa kutumia mstari wa amri:
au kwa amri maalum:
MSAADA jina la amri
Ili kuonyesha maandishi ya usaidizi sio kwenye skrini, lakini kwenye faili, unaweza kutumia uelekezaji upya wa pato . Wakati wa kutumia mstari wa amri, kifaa cha kawaida Kifaa cha kuingiza ni kibodi na kifaa cha kutoa ni onyesho, hata hivyo vifaa hivi vinaweza kuwekwa ramani kwa kutumia vibambo vya kuelekeza kwingine.
< - uelekezaji kwingine
> - uelekezaji wa pato (au > > - kuelekeza upya kwa faili iliyopo, wakati data ya pato imeongezwa hadi mwisho wa faili.)
Ili kutoa mtiririko wa data ya amri
MSAADAkatika faili ya help.txt mstari wa amri utakuwa kama ifuatavyo:MSAADA > help.txt
Ili kuonyesha usaidizi kwa amri ya GOTO katika faili ya goto.txt:
SAIDIA GOTO > goto.txt
Kutumia vigezo vya mazingira.
Katika faili za kundi unaweza, na mara nyingi unapaswa kutumia vigezo vya mazingira - vigeuzo ambavyo maadili yake yanaainisha mazingira ambamo amri au faili ya bechi inatekelezwa. Thamani za anuwai za mazingira hutolewa wakati buti za OS na mtumiaji anajiandikisha kwenye mfumo, na pia inaweza kuwekwa kwa kutumia amri.WEKA, muundo ambao ni:
WEKA [kigeu=[string]]
kutofautiana Jina la mabadiliko ya mazingira.
mstari Mfuatano wa herufi uliopewa kigezo kilichobainishwa.
Kwa mfano, mstari wa amri
WEKA mynane=Vasya
itaongeza myname kutofautisha ambayo inachukua Vasya thamani.
Unaweza kupata thamani ya kutofautisha katika programu na faili za kundi kwa kutumia jina lake lililozungukwa na ishara za asilimia ( %) . Kwa mfano amri
itaonyesha muda wa neno, na amri
itaonyesha thamani ya tofauti ya wakati, ambayo inachukua thamani ya wakati wa sasa.
Na mstari wa amri
WEKA NJIA=C:myprog;%path%
itaongeza kwenye njia ya utafutaji programu zinazoweza kutekelezwa, iliyofafanuliwa na thamani ya tofauti ya PATH, saraka C:myprog
Utekelezaji wa amri ya SET bila vigezo husababisha maadili ya sasa ya vigezo kuonyeshwa kwenye skrini, kwa fomu:
NUMBER_OF_PROCESSORS=1 - idadi ya vichakataji
OS=Windows_NT - Aina ya Uendeshaji
Njia=E:WINDOWSsystem32;E:WINDOWS;E:Program FilesFar - njia ya kutafuta faili zinazotekelezeka.
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH - viendelezi kwa faili zinazoweza kutekelezwa.
PROCESSOR_ARCHITECTURE=x86 - usanifu wa kichakataji.
PROCESSOR_IDENTIFIER=x86 Familia 6 Model 8 Hatua ya 1, AuthenticAMD - kitambulisho cha kichakataji.
PROCESSOR_LEVEL=6 - kiwango cha processor (nambari ya mfano).
PROCESSOR_REVISION=0801 - toleo la kichakataji.
ProgramFiles=E:Faili za Programu - njia ya folda ya "Faili za Programu".
PROMPT=$P$G - umbizo la kidokezo cha mstari wa amri $P - njia ya saraka ya sasa ya $G - ">" ishara.
SystemDrive=E: - barua ya kiendeshi cha mfumo.
SystemRoot=E:WINDOWS - saraka ya Mfumo wa Uendeshaji wa Windows.
Thamani za vigeu vingine hazirudishwi na amri ya SET. Hizi ni anuwai ambazo maadili yake hubadilika kwa nguvu:
%CD% - Inachukua thamani ya mfuatano wa saraka ya sasa.
%DATE% - Hukubali thamani tarehe ya sasa.
%TIME% - Inakubali thamani ya sasa ya wakati.
%RANDOM% - Hukubali thamani ya nambari ya desimali nasibu katika masafa 1 -32767.
%ERRORLEVEL% - Inakubali thamani ya sasa ya msimbo wa kuondoka wa kazi ERRORLEVEL
%CMDEXTVERSION% - Inachukua thamani ya toleo la kichakataji amri la CMD.EXE kwa usindikaji wa amri uliopanuliwa.
%CMDCMDLINE% - Inachukua thamani ya mstari ulioita shell.
Kuangalia thamani ya kutofautisha, unaweza kutumia mstari wa amri:
ECHO %variable%
Ingiza vigezo vya faili ya batch.
Inawezekana kupitisha vigezo vya mstari wa amri kwa faili ya amri na kutumia maadili yao katika taarifa katika faili ya amri yenyewe.
Faili ya BAT< параметр1 > , < параметр2 >, ... < параметрN >
Katika faili ya batch yenyewe, parameta ya kwanza itapatikana kama kutofautisha %1 , pili - %2 Nakadhalika. Jina la faili ya batch yenyewe linapatikana kama tofauti %0 . Kwa mfano, wacha tuunda faili ya batch ambayo kazi yake itakuwa kuonyesha maadili ya vigezo vilivyoingia kwenye skrini. Kwa kawaida amri inayotumika kuonyesha maandishi ni
ECHO< текст >
Hata hivyo, ikiwa maandishi yanabadilishwa na% 1, basi parameter ya kwanza itarejeshwa, na% 2 - ya pili, nk.
Unda faili ya parm.bat na maudhui yafuatayo:
mwangwi Kigezo cha kwanza=%1
mwangwi Kigezo cha pili=%2
echo Kigezo cha tatu = %3
na uiendeshe kwa amri ifuatayo:
parm.bat sekunde ya KWANZA "maneno mawili"
baada ya kuitekeleza, utaelewa jinsi inavyofanya kazi na kwamba vigezo vilivyo na nafasi lazima viingizwe ndani nukuu mara mbili. Ili kusindika processor ya amri mistari haikuonyeshwa kwenye skrini, unaweza kutumia amri
ECHO IMEZIMWA, kuiweka kwenye mstari wa kwanza wa faili ya batch. Ili kufanya mstari katika faili ya batch iliyopuuzwa na shell, kuiweka mwanzoni mwa mstariR.E.M.< пробел > . Kwa njia hii unaweza kuweka maoni, ambayo mara nyingi ni muhimu katika faili kubwa za batch:rem ECHO OFF huzima hali ya kuonyesha yaliyomo kwenye mistari ya faili ya amri kwenye skrini
REM itaonyesha tu matokeo ya utekelezaji wao.
mwangwi Kigezo cha kwanza=%1
mwangwi Kigezo cha pili=%2
echo Kigezo cha tatu = %3
Jaribu kubadilisha ECHO OFF na @ECHO OFF - matokeo yatajieleza yenyewe. Mstari unaozima hali ya pato hauonyeshwa tena kwenye skrini.
Mpito na lebo.
Katika faili za kundi, unaweza kutumia amri za kuruka za masharti zinazobadilisha mantiki ya uendeshaji wao kulingana na utimilifu wa hali fulani. Ili kuonyesha matumizi ya matawi ya masharti, wacha tuunde faili ya batch ambayo kusudi lake litakuwa kugawa barua ya kiendeshi iliyoamuliwa mapema kwa vyombo vya habari vinavyoweza kutolewa, ambayo itatumika kama anatoa flash. Masharti ni kama ifuatavyo - kuna anatoa 2 za flash, moja ambayo inapaswa kuonekana katika Explorer kama gari X: na ya pili kama gari Y:, bila kujali ni bandari gani ya USB ambayo imeunganishwa. Tutachukulia hivyo magurudumu halisi inaweza kuunganishwa kama F: au G: Tutatambua diski kwa uwepo wa faili iliyo na jina fulani (ni bora kufanya faili kama hiyo iliyofichwa kwenye saraka ya mizizi na kuiita kitu kisicho cha kawaida):
Flashd1.let - kwenye diski ya kwanza
Flashd2.let - kwa pili
Wale. Madhumuni ya faili ya batch ni kuangalia uwepo wa diski zinazoweza kutolewa F: Na G: mafaili Flashd1.ruhusu au Flashd2.ruhusu na, kulingana na ni nani aliyepo, toa barua ya gari X: au Y:
Ili kutafuta faili kwenye diski, tumia amri
IKIWA IPO:IKIWA ILIPO amri ya jina la faili
Njia rahisi zaidi ya kuitumia kama amri niSUBST, ambayo inalingana na jina la kiendeshi na saraka.
X SUBST: C: - huunda diski halisi X:, yaliyomo ambayo yatakuwa saraka ya mizizi ya gari C:
Unda kundi la faili setXY.bat na mistari ifuatayo:
Baada ya kutekeleza faili kama hiyo, utakuwa na anatoa X: na Y: Lakini ikiwa utafanya faili kama hiyo tena, amri ya SUBST itaonyesha ujumbe wa makosa - baada ya yote, anatoa X: na Y: tayari zipo.
Inashauriwa kukwepa utekelezaji wa SUBST ikiwa diski pepe X: na Y: tayari zimeundwa (au kuzifuta kwa kutumia SUBST na kigezo cha -d kabla ya kupachika). Badilisha faili ya batch ukitumiaENDA KWA- kuhamisha udhibiti kwa mstari wa faili ya batch kwa lebo.
Lebo ya GOTO
Lebo lazima iwe kwenye mstari tofauti na kuanza na koloni. Wacha tufanye mabadiliko kwenye faili yetu ya batch ili tusipate ujumbe wa makosa:
REM ikiwa X haipo - basi nenda kwenye lebo ya SETX
KAMA HAIPO X: GOTO SETX
REM ikiwa X ipo: - wacha tuendelee kuangalia uwepo wa Y:
IKIWA G:flashd1.acha SUBST X: G:
IKIWA F:flashd1.acha SUBST X: F:
REM ikiwa Y: ipo - kamilisha faili ya batch.
IKIWA Y: NENDA KUONDOKA
IKIWA G:flashd2.acha Y: G:
IKIWA F:flashd2.acha Y: F:
REM ondoka kutoka kwa faili ya batch
Ujumbe wa hitilafu SUBST umetoweka. Ishara za makosa wakati wa kutekeleza amri zinaweza kufuatiliwa katika faili ya amri yenyewe kwa kuchambua kutofautianaKOSA, thamani ambayo huundwa wakati wa utekelezaji wa programu nyingi. ERRORLEVEL ni 0 ikiwa programu imekamilika bila makosa na 1 ikiwa hitilafu ilitokea. Kunaweza kuwa na maadili mengine ikiwa yametolewa katika programu ya utekelezaji.
Unaweza pia kutumia faili ya batch kama amri kwenye mstari kwenye faili ya batch. Kwa kuongeza, kuhamisha na kurudi kwenye hatua ya utekelezaji wa faili ya kundi la kupiga simu, amri hutumiwaWITO. Wacha tuunde faili ya amri test.bat na yaliyomo yafuatayo:
ECHO Piga simu 1.bat
Kurudi kwa ECHO.
Na faili ya 1.bat iliyo na amriPUSIA,kusimamisha utekelezaji wa faili ya batch hadi kitufe chochote kibonyezwe.
Wakati wa kutekeleza test.bat, ujumbe utaonyeshwa kwenye skrini
Piga simu 1.bat
na udhibiti utapewa 1.bat kwa amri ya kusitisha. Baada ya kubonyeza kitufe kwenye kibodi, udhibiti utapewa kwa mstari wa amri "ECHO Return." na itaonyeshwa kwenye skrini
Ukiondoa CALL kutoka test.bat, basi urejeshaji kutoka kwa faili 1.bat hautafanywa. Kwa njia, kwa kuhamisha udhibiti kwenye faili ya kundi, unaweza kuipanga kwa kitanzi. Jaribu kuongeza laini ifuatayo hadi mwisho wa faili ya test.bat:
Unaweza kujiondoa kwenye kitanzi cha faili ya batch kwa kubonyeza mchanganyiko wa CTRL-Break. Inawezekana kutumia amri ya CALL kuita utaratibu ndani ya faili ya batch. Katika kesi hii, jina halitumiwi kama hoja faili ya nje, na lebo:
....
piga simu: proc1
....
:taratibu 1
....
Utgång
....
Kuunda faili.
Hakuna amri maalum katika Windows kuunda faili, lakini unaweza kufanya bila hiyo kwa njia kadhaa:
Kunakili kutoka kwa koni hadi faili
COPY CON myfile.txt
Wakati amri hii inatekelezwa, data kutoka kwa kibodi (kifaa cha CON) itaandikwa kwa faili myfile.txt. Bonyeza F6 au Mchanganyiko wa CTRL-Z itakamilisha pato.
Uelekezaji wa pato
ECHO 1 > myfile.txt
Kutekeleza amri hii kutaunda faili myfile.txt iliyo na herufi "1"
Mchanganyiko wa uelekezaji wa pembejeo na pato:
COPY CON > myfile.txt< xyz
Wakati wa kutekeleza amri hii, kama ilivyo katika kesi ya kwanza, kunakili kutoka kwa koni hadi faili hutumiwa, lakini badala ya kuingiza kutoka kwa kibodi, ingizo kutoka kwa kifaa kisichopo cha xyz hutumiwa. Mfumo utaonyesha ujumbe unaosema kuwa kifaa kama hicho hakipo, lakini faili tupu myfile.txt itaundwa kwa ufanisi.
Chaguo rahisi sana ni kunakili kutoka kwa kifaa cha uwongo kilicho na jina nul faili.
nakili null myfile.txt
Ikiwa mara nyingi unahitaji kuunda faili tupu, unaweza kuandaa faili yako ya kundi (kwa mfano - newfile.bat au, bora zaidi, - nf.bat), na jina. faili iliyoundwa ipitishe kama kigezo wakati wa kuanza.
Yaliyomo kwenye faili:
Weka faili hii ya batch ndani saraka ya mfumo(C:windowssystem32 au nyingine yoyote inayopatikana kwenye njia za utafutaji za PATH).
Mstari wa amri:
newfile.bat myfile.txt
Au
nf.bat myfile.txt
Au
nf myfile.txt
Hii hapa timu yako nf kwa ajili ya kuunda faili tupu kwenye mstari wa amri.
Inapeana herufi sawa ya kiendeshi kwa kiendeshi kinachoweza kutolewa.
Changamoto ni USB inayoweza kutolewa Hifadhi (flash drive) ilipatikana kila wakati chini ya herufi sawa, bila kujali ni kompyuta gani ilitumiwa au jinsi iliunganishwa. Ili kutatua, tutatumia amri ya SUBST iliyotajwa hapo juu. Hebu tuchague barua inayotakiwa kwa diski inayoondolewa, kwa mfano - X. Jina la diski ambayo faili ya kundi ilizinduliwa inapatikana kama kutofautiana %~d0. Unda faili ya kundi na maudhui yafuatayo: @echo imezimwa
subst X: %~d0
inamaanisha nini kuunda diski halisi X:, ambayo inahusishwa na diski ya kimwili, kutoka ambapo faili ya batch ilizinduliwa.
Maarifa ya ziada juu ya thamani mbadala za %0 ya kutofautisha yanaweza kupatikana kutoka kwa faili ya batch ifuatayo:
@echo imezimwa
UCHAKATO WA FILI ZA ECHO - %0
ECHO Tarehe/wakati ambapo faili ya bechi iliundwa/kurekebishwa - %~t0
Njia ya faili ya Batch ya ECHO - "%~f0"
Diski ya faili ya Amri ya ECHO - %~d0
Saraka ya faili ya Batch ya ECHO - "%~p0"
Jina la faili ya Kundi la ECHO - %~n0
Kiendelezi cha faili ya Bachi ya ECHO - %~x0
ECHO Jina fupi na kiendelezi - %~s0
Sifa za faili za Kundi la ECHO - %~a0
Ukubwa wa faili ya Kundi la ECHO - %~z0
Kuunda vizazi vya kumbukumbu kulingana na tarehe na nyakati.
Wacha tusuluhishe shida ifuatayo - tunahitaji kuunda kumbukumbu ya faili zilizo kwenye saraka ya C:Program FilesFAR. Jina faili ya kumbukumbu inapaswa kujumuisha wakati wa sasa (hours.minutes.seconds - HH.MM.SS.rar), na inapaswa kuwekwa ndani katalogi mpya, ambaye jina lake lazima liwe na tarehe ya sasa (day.month.year - DD.MM.YYYY). Kwa kuhifadhi tutatumia kumbukumbu ya RAR. Fungua umbizo la kuunda kumbukumbu:
RAR a -r< путь и имя архива > < Путь и имя архивируемых данных >
a- amri ya kuunda kumbukumbu.
-r- ufunguo unaoamua uhifadhi wa subdirectories (kwani kuna subdirectories kwenye folda ya chanzo).
Kwa hivyo, ili kutatua shida, unahitaji kuunda kwa usahihi majina na njia za RAR. Kwa hili tutatumia mambo yafuatayo:
Tarehe iliyopatikana kutoka kwa tofauti ya %DATE% na mipangilio ya kawaida ya kikanda inaonekana kama hii: Weka VDATE=%tarehe:~3% Unda saraka kwenye kiendeshi C:, ambaye jina lake = tarehe ya sasa kutoka kwa tofauti ya VDATE: MD C:\%VDATE% Muda uliopatikana kutoka kwa tofauti ya %TIME%: Wacha tuzindue kihifadhi kumbukumbu: Sasa unaweza kuunda faili ya batch na yaliyomo: Weka VDATE=%tarehe:~3% Faili kama hiyo ya kundi inaweza kutekelezwa kupitia upakiaji kiotomatiki, au kama sehemu ya hati, mtumiaji anapoingia kwenye kikoa, au kwa kutumia kipanga ratiba kwa wakati fulani, na utakuwa na kumbukumbu za data muhimu zilizoagizwa kwa wakati kila wakati.
Faili hii ya kundi huunda kumbukumbu za yaliyomo kwenye folda ya "Nyaraka Zangu" ya watumiaji wa Win2K/XP, na kuziweka katika saraka. |
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, ikipewa (kigeu ambacho michezo mingi inayotumia kadi ya sauti ya kompyuta inahitaji):
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 faili ya kundi moja au programu baada ya kutajwa 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 unakutana na mabano ya kufunga katika moja ya amri za echo, unahitaji kuikwepa na ^ tabia, 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 sawa 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 iliyo na syntax hii inasaidia simu zinazojirudia kwa kuunda kiotomatiki fremu mpya kwa 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 kawaida 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.
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 vya Amri Kamba za Windows wakilisha herufi tofauti kidogo, hapa huwezi kutangaza kikundi cha anuwai za cmd, au kugawa maadili mara moja kwa anuwai kadhaa kwenye safu ya 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 vigezo vipya vilivyoundwa vya cmd na . Tutaweza kuzifikia katika kipindi chote.
Ili kufuta vijiti kwenye safu ya amri ya Windows ya yaliyomo, unahitaji tu kugawa dhamana tupu:
itachapisha tu mstari %Var3%, na amri
Katika mfano huu, tulitoroka wahusika & na ^, 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 michakato mingine, 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.