Vigezo katika cmd vimepewa dhamana ya amri. Kuweka herufi sawa ya kiendeshi kwa kiendeshi kinachoweza kutolewa. Tafuta kompyuta zinazoendesha programu

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:

Jina
Maelezo
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 amriMSAADAkatika 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 amriECHO 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 amriIKIWA 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:

  • Katika faili za kundi unaweza kufikia tarehe ya sasa na wakati wa sasa - vigeuzo %DATE% na %TIME%
  • Katika faili za kundi, unaweza kuunda vigezo vya muda kwa kutumia amri ya SET.
  • Thamani ya vigezo vya muda vinaweza kuundwa kulingana na %DATE% na %TIME% kwa kuruka na/au kubadilisha sehemu zao kwa kutumia amri sawa ya SET.

    Tarehe iliyopatikana kutoka kwa tofauti ya %DATE% na mipangilio ya kawaida ya kikanda inaonekana kama hii:
    Jumatatu 01/21/2005- Siku ya juma (herufi 2) - Nafasi - tarehe (herufi 10)
    Kwa mfano, hebu tuunde saraka na amri ya MD< имя каталога >.
    Tunaunda tofauti ya muda ya VDATE kwenye kumbukumbu na kuikabidhi thamani ya utofauti wa mazingira DATE, bila herufi 3 za kwanza - 01/20/2005:

    Weka VDATE=%tarehe:~3%

    Unda saraka kwenye kiendeshi C:, ambaye jina lake = tarehe ya sasa kutoka kwa tofauti ya VDATE:

    MD C:\%VDATE%
    Baada ya kutekeleza amri hii, saraka inayoitwa 01/20/2005 itaundwa kwenye gari C:

    Muda uliopatikana kutoka kwa tofauti ya %TIME%:
    14:30:59.93 - Masaa, dakika, sekunde, hundredths ya sekunde.
    Mamia labda sio lazima katika jina la faili la kumbukumbu. Unda tofauti ya muda ya VTIME na uikabidhi wakati wa sasa bila herufi 3 za mwisho
    weka VTIME=%time:~0,-3%
    Sasa VTIME = 14:30:59, lakini ishara ":" haiwezi kutumika katika jina la faili, kwa hivyo tuibadilishe na nukta.
    weka VTIME=%VTIME::=.%
    Tofauti ya VTIME itachukua thamani 14.30.59 Kwa jina la faili itafanya.

    Wacha tuzindue kihifadhi kumbukumbu:

    Sasa unaweza kuunda faili ya batch na yaliyomo:

    Weka VDATE=%tarehe:~3%
    md c:\%VDATE%
    weka VTIME=%time:~0,-3%
    weka VTIME=%VTIME::=.%
    rar a -r C:\%VDATE%\%VTIME%.rar "C:Program filesfar*.*"

    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.

    Kuunda kumbukumbu kwa kutumia vigezo vya wasifu wa mtumiaji.

    Faili hii ya kundi huunda kumbukumbu za yaliyomo kwenye folda ya "Nyaraka Zangu" ya watumiaji wa Win2K/XP, na kuziweka katika saraka.
    C:ARHIVNyaraka zanguJina la mtumiajiDateTime

    Vigezo USERPROFILE, USERNAME, WINDIR vinatumika, kwa hivyo faili hii ya bechi haitafanya kazi katika WIN9X. (Ingawa, ikiwa ungependa, unaweza kuingiza amri kwenye autoexec.bat ili kuweka maadili ya vigezo hivi na kuitumia katika toleo la mtumiaji mmoja bila mabadiliko yoyote). Yaliyomo kwenye faili ya kundi yametolewa maoni na haipaswi kusababisha ugumu sana ikiwa unaelewa mfano uliopita:

    @echo imezimwa
    rem Inaweka utofauti wa FROM - mahali pa kupata data ya kuhifadhi
    weka FROM=%USERPROFILE%Nyaraka Zangu
    rem Inaweka kigezo TO - mahali pa kuweka kumbukumbu
    weka TO=C:arhivMy documents\%USERNAME%
    rem Hebu tuunde saraka ya matengenezo
    md "%TO%"
    rem Wacha tuunde jina la saraka kutoka tarehe ya sasa
    tarehe ya sasa na mipangilio chaguo-msingi ya Win2K - Mon 04/25/2005
    tarehe ya sasa ya rem na mipangilio chaguo-msingi ya WinXP - 04/25/2005
    rem Kuanzia tarehe ya sasa tutaunda jina la saraka ndogo - 04/25
    rem Kwa chaguo-msingi Windir ya WinXP ni C:WINDOWS, na kwa Win2K - C:WINNT
    IF /I %Windir% == C:WINNT GOTO Win2K
    weka vdate=%DATE:~0.-5%
    GOTO SetFileName
    :Win2K
    weka vdate=%DATE:~3.-5%
    rem Wacha tuunde jina la faili la kumbukumbu kutoka wakati wa sasa - 12:00:00.99
    rem tutatupa mamia ya sekunde na kubadilisha ishara: na ishara. Matokeo - 12.00.00
    :SetFileName
    weka vtime=%TIME:~0,-3%
    weka vtime=%vtime::=.%
    rem Unda saraka ndogo ya faili ya kumbukumbu
    md "%TO%\%VDATE%"
    rem Amri kwa kuhifadhi. Swichi ya -r inahitajika ili kuhifadhi kumbukumbu na folda ndogo
    chaguo la rem kwa kiweka kumbukumbu cha ARJ: arj a -r "%TO%\%VDATE%\%VTIME%.arj" "%FROM%*.*"
    rem Wakati wa kutumia Jalada la RAR:
    rar a -r "%TO%\%VDATE%\%VTIME%.rar" "%FROM%*.*"

    Tekeleza amri kulingana na ratiba.

    Katika WIN2K/XP kuna matumizi ya mstari wa amriKATIKA,hukuruhusu kutekeleza amri au faili ya batch ndani muda maalum kwenye mtaa au kompyuta ya mbali. Ili kutumia amri ya AT, huduma ya Mratibu wa Task lazima iendeshwe (kawaida imeanza na chaguo-msingi wakati wa usakinishaji wa mfumo).

    AT [\computername] [ [code] | /FUTA ]

    KWA wakati [\computername]

    [ /KILA:siku[,...] | /Inayofuata:siku[,...]] "amri"

    \jina la kompyuta Jina la kompyuta ya mbali. Ikiwa parameta hii imeachwa,

    kompyuta ya ndani inatumika.

    kanuni Nambari ya mlolongo wa kazi iliyoratibiwa. Imeonyeshwa ikiwa unahitaji kughairi kazi iliyopangwa tayari kwa kutumia ufunguo / kufuta.

    / kufuta Ghairi kazi iliyoratibiwa. Ikiwa nambari ya kazi imeachwa,

    kazi zote zilizopangwa kwa maalum

    kompyuta.

    /ndio Ghairi ombi la uthibitishaji unapoghairi yote

    kazi zilizopangwa.

    wakati Wakati wa kuanza amri.

    /maingiliano Kuruhusu mwingiliano wa kazi na mtumiaji,

    kufanya kazi kwenye kompyuta wakati kazi inapoanza. Kazi zilizozinduliwa bila ufunguo huu hazionekani kwa mtumiaji wa kompyuta.

    /kila siku[,...] Kazi imezinduliwa kwa siku maalum za wiki au

    mwezi. Ikiwa tarehe imeachwa, siku ya sasa inatumiwa

    /kesho yake[,...] Jukumu litaendelea siku iliyobainishwa ijayo ya juma

    (kwa mfano Alhamisi ijayo). Ikiwa tarehe imeachwa,

    Siku ya sasa ya mwezi hutumiwa.

    "timu" Amri au jina la faili la kundi.

    Mifano ya kutumia:

    Analog ya "saa ya kengele" - madirisha ya pop-up na maandishi yanayokumbusha sasa au kwa mtumiaji maalum kuhusu haja ya kuchukua hatua fulani. Kutuma ujumbe kwa mtumiaji tunatumia matumiziNET.EXE

    SAA 13:50 net.exe tuma * Muda wa kahawa

    SAA 17:50 net.exe tuma Muda wa Mtumiaji kwenda nyumbani

    KATIKA \SERVER 13:45 net.exe tuma Unahitaji kuanzisha upya seva

    Tazama orodha ya kazi zilizopangwa:

    Inafuta kazi zilizopangwa tayari:

    SAA 3 /FUTA- kufuta nambari ya kazi 3

    KWA /FUTA /NDIYO- kufuta kazi zote

    "Jopo la Kudhibiti" - "Kazi Zilizoratibiwa" hukuruhusu kutazama, kubadilisha na kufuta zile zilizoundwa na timu. KATIKA kazi.

    Kusimamisha na kuanzisha huduma za mfumo.

    Ili kuacha na kuanza huduma za Win2K/XP kutoka kwa mstari wa amri, tumia amri ya NET.EXE

    NET.EXE STOP< имя службы >

    NET.EXE ANZA< имя службы >

    Inawezekana kutumia jina fupi na kamili ("Dnscache" ni jina fupi, "mteja wa DNS" ndio jina kamili la huduma). Majina ya huduma yaliyo na nafasi yameambatanishwa katika nukuu mbili. Mfano wa kuanzisha upya huduma ya "Mteja wa DNS".

    wavu wa kuacha "mteja wa DNS"

    mwanzo kabisa "mteja wa DNS"

    Vivyo hivyo, kwa kutumia jina fupi:

    net stop Dnscache

    wavu kuanza Dnscache

    Jina kamili la huduma linaweza kunakiliwa kutoka kwa "Huduma" -< Имя службы >- "Sifa" - "Onyesha jina"

    Ili kudhibiti huduma, ni rahisi zaidi kutumia matumizi ya PsService.exe kutoka kwa huduma za PsTools. Mbali na kuanza na kusimamisha huduma, inakuwezesha kutafuta huduma maalum kwenye kompyuta mtandao wa ndani, piga kura hali na usanidi wa huduma, badilisha aina ya kuanza, sitisha huduma, endelea, anzisha upya.

    Kufanya kazi na huduma za mfumo katika Windows XP unaweza kutumia matumizi sc.exe, ambayo inakuwezesha si tu kuacha / kuanza huduma, lakini pia kupiga kura hali yake, vigezo vya kuanza na uendeshaji, kubadilisha usanidi, na pia kufanya kazi si tu na huduma za mfumo, bali pia na madereva. Ikiwa una haki, unaweza kusimamia huduma sio tu kwenye mashine ya ndani, lakini pia kwenye mashine ya mbali. Mifano:
    sc.exe acha DNSCache- simamisha huduma ya DNSCache kwenye kompyuta ya ndani.
    sc\192.168.0.1 swali DNSCache- chagua hali ya huduma ya DNSCache kwenye kompyuta yenye anwani ya IP 192.168.0.1
    sc\COMP anza DNSCache anzisha huduma ya DNSCache kwenye kompyuta ya COMP
    Unaweza kupata usaidizi wa kufanya kazi na shirika kwa kuingia:
    sc/?

    Inaonyesha thamani ya tofauti ERRORLEVEL.

    Faili hii rahisi ya batch itaonyesha thamani kutofautiana ERRORLEVEL kwenye mstari maalum wa amri. Inaangalia kwanza uwepo wa angalau parameter moja ya pembejeo, na ikiwa hakuna iliyotolewa, ujumbe wa hitilafu hutolewa na kuondoka hutokea. Ikiwa angalau parameter moja imeelezwa, basi vigezo vya pembejeo huchukuliwa kuwa mstari wa amri na hutekelezwa, na thamani ERRORLEVEL inarudishwa kwa kutumia amri ya ECHO. Yaliyomo kwenye faili (niliiita echoEL.bat):

    @echo imezimwa
    ikiwa "%1" NEQ "" GOTO PARMOK
    ECHO Unahitaji kuweka mstari wa amri ili kufafanua ERRORLEVEL
    Utgång
    :PARMOK
    %1 %2 %3 %4 %5 %6 %7 %8
    ECHO %1 %2 %3 %4 %5 %6 %7 %8 ERRORLEVEL=%ERRORLEVEL%

    Mifano ya uzinduzi:
    echoEL.bat SHIRIKI NET
    - amri ya NET SHARE itatekelezwa (toa orodha ya rasilimali za mtandao zilizoshirikiwa) na nambari ya ERRORLEVEL itatolewa.
    echoEL.bat NET SHARE X"="C:
    - amri NET SHARE X:=C: itatekelezwa (tengeneza iliyoshirikiwa rasilimali ya mtandao kwa jina X, na njia ya saraka ya mizizi ya gari C :) Kumbuka kwamba = ishara imefungwa katika quotes mbili.
    Chaguzi zilizoorodheshwa hapo juu zinaweka mstari wa amri sahihi. Lakini jaribu kuweka kigezo kibaya kwa NET.EXE au amri ambayo haipo na utaona ni thamani gani ERRORLEVEL itachukua. NA TAFADHALI KUMBUKA kwamba mstari wa amri INATEKELEZA na, kwa mfano, chaguo "echoEL.bat format A:" itaanza kupangilia diski ya floppy kwenye kiendeshi A:.

    Mazungumzo na mtumiaji

    Ili kufanya mazungumzo na mtumiaji, unaweza kutumia amri:
    WEKA /P< имя переменной >=< текст >
    inapotekelezwa, skrini itaonyeshwa ujumbe wa maandishi < текст >na maandishi ya majibu yanatarajiwa. Mfano - wacha tuombe nenosiri na tupe thamani yake kwa tofauti ya "pset":

    Weka /p pset="Ingiza nenosiri - "
    mwangwi Nenosiri ni - %pset%

    Hasara njia hii ni kutowezekana kwa kuendelea na utekelezaji wa faili ya kundi bila jibu la mtumiaji, kwa hivyo mara nyingi sana badala ya kuweka hutumiwa. programu za mtu wa tatu. Mmoja wao - CHOICE.COM Pakua (1.7kb).
    CHOICE humpa mtumiaji ujumbe wa maandishi na husubiri mtumiaji kuchagua mojawapo ya chaguo za majibu yaliyotolewa (mibonyezo ya vitufe kwenye kibodi). Kulingana na matokeo ya uteuzi, kutofautiana kwa ERRORLEVEL huundwa, thamani ambayo ni sawa na nambari ya ordinal ya uteuzi. Kwa chaguo-msingi kuna chaguzi mbili - Y au N. Ikiwa jibu ni Y - basi ERRORLEVEL=1, ikiwa N - basi ERRORLEVEL=2. Unaweza kutumia zaidi ya chaguo 2 za uteuzi na inawezekana kuweka chaguo-msingi wakati mtumiaji yuko muda fulani Sikubonyeza kitufe hata kimoja. Umbizo la mstari wa amri:

    Chaguzi za CHOICE] c,nn]
    /C[:]chaguo - hufafanua chaguo halali. Ikiwa haijabainishwa - YN
    /N - usionyeshe chaguzi za uteuzi.
    /S - herufi ndogo na herufi kubwa ni tofauti.
    /T[:]c,nn - Chaguo-msingi ni "c" baada ya sekunde "nn".
    maandishi - Pato la kamba ya maandishi kama ombi

    Wacha tuunde faili ya batch inayoonyesha matumizi ya CHOICE. Itajibu kwa kubonyeza vitufe "1", "2", 3" na "0". Unapobonyeza "0", inakamilika, na unapobonyeza iliyobaki, ujumbe hutumwa kwa mtumiaji. Ikiwa hakuna kitu. imeshinikizwa ndani ya sekunde 10, inakamilika.

    @ECHO IMEZIMWA
    :CHAGUO
    CHAGUO /C:1230 /T:0.10 Chaguo lako
    IF %ERRORLEVEL% EQU 4 GOTO ONDOKA
    mwangwi chaguo lako=%ERRORLEVEL%
    GOTO CHAGUO
    :UTGÅNG

    Sasa, kwa kutumia CHOICE unaweza kuunda faili za kundi, mantiki ambayo inaweza kufafanuliwa na mtumiaji.

    Ucheleweshaji wa faili za kundi

    Mara moja, nyuma katika DOS, amri rahisi ya SLEEP ilitumiwa kupanga kusubiri katika faili ya amri, lakini kwa sababu fulani ilihamia kutoka kwa usakinishaji wa kawaida. Seti ya Windows katika Seti ya Nyenzo ya ziada. Unaweza kuinakili tu kutoka hapo hadi kwenye saraka ya system32 na uitumie kwenye faili zako za kundi.

    : LALA N - ambapo N ni idadi ya sekunde za kuchelewa.

    Ikiwa Kifurushi cha Rasilimali hakipo karibu, unaweza kutumia amri ya CHOISE iliyojadiliwa hapo awali bila kutoa maandishi na kutoa jibu kiotomatiki katika sekunde nn (1-99):

    Choice.com /T:y,10 /N - kuchelewa kwa sekunde 10

    Njia ya ulimwengu wote inategemea pinging kiolesura cha loopback na idadi inayotakiwa ya pakiti. Ping kwa kiolesura cha loopback (jina la mwenyeji ni localhost au Anwani ya IP 127.0.0.1) inatekelezwa bila maambukizi ya kweli data, i.e. karibu mara moja, na muda kati ya pings ni sekunde 1. Kwa kubainisha idadi ya pings kwa kutumia swichi ya "-n", unaweza kupata kucheleweshwa kwa sekunde n:

    Ping 127.0.0.1 -n 30 > nul - itatoa kuchelewa kwa sekunde 30

    Tafuta kompyuta zinazoendesha programu

    Ili kutekeleza hati hii, tumia huduma kutoka kwa kifurushi PSTools(maelezo mafupi). Wacha tuunde faili ya kundi ambayo hutafuta mtandao wa ndani kwa kompyuta zinazoendesha programu, jina ambalo (sehemu ya kwanza ya jina) imeainishwa kama kigezo wakati wa kuanza, kwa mfano, mchezo . Ikitambuliwa, ujumbe utatumwa kwa kompyuta ADMINCOMP na programu iliyotambuliwa italazimika kusitishwa. Ili kutafuta, tutatumia matumizi ya Pslist.exe na kuchambua msimbo wake wa kurudi. Thamani ya kigezo cha ERRORLEVEL sawa na sifuri inamaanisha kuwa shirika limegundua mchakato kwenye kompyuta ya mbali ambao unakidhi masharti ya utafutaji. Tutaweka jina la mchakato wa kutafuta kama kigezo wakati wa kuendesha faili ya kundi. Wacha tupe faili yetu ya batch jina psl.bat. Kukimbia na parameta itaonekana kama hii:
    mchezo wa psl.bat
    Kwanza, tunahitaji kuangalia ikiwa parameter imeelezwa kwenye mstari wa amri wakati wa kuanza, na ikiwa haijainishwa, tutatoa ujumbe kwa mtumiaji na utekelezaji kamili. Ikiwa parameta imeainishwa, wacha tuende kwenye lebo ya "PARMOK":
    @echo imezimwa
    ikiwa "%1" NEQ "" GOTO PARMOK
    ECHO Unahitaji kutaja jina la mchakato ili kutafuta
    Utgång
    :PARMOK
    Sasa tunahitaji kuhakikisha kizazi thabiti cha anwani za IP za kompyuta kwa mstari wa amri ya PSlist. Njia rahisi zaidi ya kufanya hivyo ni kwa kugawa mazingira ya muda (halali tu kwa muda wa utekelezaji wa faili ya amri) kwa thamani ya sehemu ya mara kwa mara ya anwani (kwa mfano, 192.168.0.) na thamani iliyohesabiwa ya anwani. sehemu ya mpangilio wa chini (kwa mfano, katika safu 1-254). Kwa mfano, tutafikiri kwamba tunahitaji kuchanganua kompyuta katika safu ya anwani:
    192.168.0.1 - 192.168.0.30:
    kuweka IPTMP=192.168.0. - sehemu kuu ya anwani
    kuweka /A IPLAST=1 - sehemu ya chini. Swichi ya /A inamaanisha usemi uliokokotolewa wa nambari
    weka IPFULL=%IPTMP%%IPLAST% - thamani ya anwani kamili ya IP.
    Mstari wa amri kwa PSlist utaonekana kama hii:
    pslist\%IPFULL%%1
    Sasa kilichobaki ni kuendesha PSlist kwa mzunguko, na kuongeza moja kwa sehemu ya mpangilio wa chini wa anwani katika kila mzunguko hadi thamani yake ifikie 30 na kuchambua thamani ya ERRORLEVEL baada ya utekelezaji. Ili kuchambua matokeo, tutafanya mpito kwa amri:
    GOTO REZULT%ERRORLEVEL%
    kutoa mpito kwa lebo ya REZULT0 mchakato unapotambuliwa na kwa REZULT1
    2013-08-25 14:35:35: Makala: Usalama wa habari: Programu. Uliipenda?
  • 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.