Muutujatele cmd-s määratakse käsu väärtus. Sama draivitähe määramine irdkettale. Otsige rakendust töötavaid arvuteid

Käsufailide sees saate töötada niinimetatud keskkonnamuutujatega (või keskkonnamuutujad), millest igaüks on salvestatud muutmälu, sellel on oma kordumatu nimi ja selle väärtus on string. Standardsed keskkonnamuutujad lähtestatakse operatsioonisüsteemi käivitamisel automaatselt. Sellised muutujad on näiteks WINDIR, mis määrab asukoha Windowsi kataloog, TEMP, mis määrab salvestuskataloogi tee ajutised failid Windows või PATH, mis salvestab süsteemitee (otsingutee), st kataloogide loendi, millest süsteem peaks otsima käivitatavaid faile või faile jagamine(Näiteks, dünaamilised raamatukogud). Samuti saate pakkfailides deklareerida oma keskkonnamuutujaid, kasutades käsku SET.

Muutuja väärtuse saamine

Et saada teatud väärtust keskkonna muutuja Peate lisama selle muutuja nime % sümbolites. Näiteks:

@ECHO OFF CLS REM Loo muutuja MyVar SET MyVar=Tere REM Muutuja SET MyVar=%MyVar%! ECHO MyVar muutuja väärtus: %MyVar% REM Muutuja MyVar kustutamine SET MyVar= ECHO WinDir muutuja väärtus: %WinDir%

Selle käivitamisel partiifail rida kuvatakse ekraanil

MyVar muutuja väärtus: Tere! WinDir muutuja väärtus: C:\WINDOWS

Muutujate teisendamine stringideks

Pakkfailides saate keskkonnamuutujatega teha mõningaid manipuleerimisi. Esiteks saab nendega läbi viia liitmise (liimimise). Selleks peate lihtsalt käsku SET kirjutama ühendatud muutujate väärtused üksteise kõrvale. Näiteks,

SET A = üks SET B = kaks SET C = %A%%B%

Pärast nende käskude täitmist failis on muutuja C väärtuseks string "Double". Te ei tohiks liitmiseks kasutada märki +, kuna seda tõlgendatakse lihtsalt sümbolina. Näiteks pärast järgmise sisuga faili käivitamist

SET A=üks SET B=kaks SET C=A+B ECHO muutuja C=%C% SET D=%A%+%B% ECHO muutuja D=%D%

Ekraanil kuvatakse kaks rida:

Muutuja C=A+B Muutuja D=üks+kaks

Teiseks saate konstruktsiooni abil keskkonnamuutujast alamstringe ekstraheerida %muutuja_nimi:~n1,n2%, kus arv n1 määrab nihke (vahele jäetavate märkide arvu) vastava keskkonnamuutuja algusest (kui n1 on positiivne) või lõpust (kui n1 on negatiivne) ja arv n2 on vastava keskkonnamuutuja arv. eraldatavad märgid (kui n2 on positiivne) või arv viimased tegelased muutujas, mida valitud alamstringi ei kaasata (kui n2 on negatiivne). Kui on määratud ainult üks negatiivne suvand -n, ekstraheeritakse viimased n märki. Näiteks kui muutuja %DATE% salvestab stringi "21/09/2007" (praeguse kuupäeva sümboolne esitus teatud piirkondlikes seadetes), siis pärast järgmiste käskude täitmist

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

uutel muutujatel on järgmised väärtused: %dd1%=21, %dd2%=21, %mm%=09, %yyyy%=2007.

Kolmandaks saate konstruktsiooni kasutades läbi viia alamstringi asendamise protseduuri %muutuja_nimi:s1=s2%(see tagastab stringi, kus iga alamstringi s1 esinemine vastavas keskkonnamuutujas asendatakse s2-ga). Näiteks pärast käskude täitmist

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

muutuja b salvestab stringi "199456" . Kui parameetrit s2 ei määrata, siis eemaldatakse väljundstringist alamstring s1, st. pärast käsu täitmist

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

muutuja b salvestab stringi "1456" .

Tehted muutujatega nagu numbritega

Kui täiustatud käskude töötlemine on lubatud (Windows XP vaikerežiim), on võimalik käsitleda keskkonnamuutujate väärtusi arvudena ja teha nendega aritmeetilisi arvutusi. Selleks kasutage lülitiga /A käsku SET. Toome näite partiifail add.bat, lisades kaks parameetritena antud numbrit käsurida ja saadud summa kuvamine ekraanil:

@ECHO OFF REM Muutuja M salvestab summa SET /A M=%1+%2 ECHO %1 ja %2 summa võrdub %M% REM Kustutage muutuja M SET M=

Kohalikud muutused muutujad

Kõik muudatused, mida teete käsufailis keskkonnamuutujates käsuga SET, jäävad ka pärast failist väljumist, kuid kehtivad ainult praeguses käsuaknas. Samuti on võimalik lokaliseerida pakettfailis keskkonnamuutujate muudatusi, st taastada automaatselt kõigi muutujate väärtused, nagu need olid enne faili käivitamist. Selleks kasutatakse kahte käsku: SETLOCAL ja ENDLOCAL. Käsk SETLOCAL määrab ala alguse kohalikud paigaldused keskkonnamuutujad. Teisisõnu, pärast SETLOCALi käivitamist tehtud keskkonnamuudatused on praeguses pakkfailis kohalikud. Igal käsul SETLOCAL peab olema vastav käsk ENDLOCAL, et taastada varasemad keskkonnamuutuja väärtused. Pärast käsu ENDLOCAL täitmist tehtud keskkonnamuudatused ei ole enam praeguses pakkfailis kohalikud; nende varasemaid väärtusi ei taastata pärast selle faili täitmise lõpetamist.

Mõnikord on vaja vormida kuupäeva ja kellaaja muutuja V cmd/bat skriptid aknad nii, nagu me seda vajame, mitte nii, nagu operatsioonisüsteem seda meile annab.

Näiteks nende andmete lisamiseks logifaili, sündmuse kellaaja või kuupäeva salvestamiseks looge fail nimega, mis peaks sisaldama kuupäeva või kellaaja andmeid (päev, kuu, aasta, tund, minutid, sekundid, millisekundid). ) Kunagi ei tea, millised on meie ülesanded... Kasutame oma kujutlusvõimet :)

Järgmises näites näeme muutujate jaotust vastavalt meile vajalikele mustritele.

h- tund 2 numbrit (st tund antakse sisse järgmine vorm - 01, 02, ..., 09, ... , 12, ... 24)

m - minutit 2 tähemärki

s - sekundit 2 märki

ms - millisekundid 2 numbrit, mingil põhjusel vahemikus 0 kuni 99

dd - 2. päeva märgid

mm - kuu 2 tähemärki

yyyy – aasta 4 numbrit

Näide muutujate kasutamisest %DATE% Ja %TIME% skriptides cmd / nahkhiir Windows:

@kaja väljas
seatud h=%TIME:~0,2%
seatud m = % AEG: ~ 3,2%
määra s=%TIME:~6,2%
määra ms=%TIME:~9,2%
seadistusaeg=%h%:%m%:%s%:%ms%
set dd=%DATE:~0,2%
seatud mm=%KUUPÄEV:~3,2%
sea ​​yyyy=%DATE:~6,4%
sea ​​curdate=%dd%-%mm%-%yyyy%
määra curdatetime=%curdate% %curtime%

echo Praegune aeg on %curdatetime%

Mõnes versioonis Windowsi vorming väljastamise kuupäev ja kellaaeg on erinevad, seega see skript saame töötada täpselt nii, nagu me seda vajame.

Teoreetiliselt võite osasid muutujatest võtta sarnaselt, mõte on selles, et vorming on siin järgmine:

Esimene number pärast: ~ on märgi number, millest alustame väärtuse võtmist, teine ​​number näitab, mitu märki lüüa.

Seega selgub, et saame oma vajadusteks võtta mis tahes meile saadaoleva Windowsi keskkonnamuutuja mis tahes osa.

Tean järgmisi muutujaid, mille väärtused saame:

Nimi
Kirjeldus
KÕIK KASUTAJAPROFIIL Tagastab profiili "Kõik kasutajad" paigutuse.
APLIKATSIOONI ANDMED Tagastab rakenduse andmete vaikeasukoha.
CD Näitab teed praegune kaust. Argumentideta identne CD käsuga.
CMDCMDLINE Täpne käsk, mida kasutatakse praeguse cmd.exe käivitamiseks.
CMDEXTVERSION praeguse käsuprotsessori laienduse versioon.
CommonProgramFiles "Common Files" kataloogi asukoht (tavaliselt %ProgramFiles%\Common Files)
ARVUTI NIMI arvuti nimi
COMSPEC Shelli käivitatava faili tee
KUUPÄEV Tagastab praeguse kuupäeva. Kasutab sama vormingut kui kuupäev /t käsk. Loodud käsu Cmd.exe abil.
ERRORLEVEL Tagastab viimati kasutatud käsu veakoodi. Tähendab, ei võrdne nulliga, näitab tavaliselt, et on viga.
KODURIVE Tagastab kohaliku draivi nime tööjaam on seotud kasutaja kodukataloogiga. Määratakse põhikataloogi asukoha alusel. Kasutaja kodukataloog on määratud lisandmoodulis " Kohalikud kasutajad ja rühmad."
KODURAJA Tagastab täis tee kasutaja kodukataloogi. Määratakse põhikataloogi asukoha alusel. Kasutaja kodukataloog on määratud lisandmoodulis Kohalikud kasutajad ja rühmad.
KODU JAGAMINE Tagastab võrgutee kasutaja jagatud kodukataloogi. Määratakse põhikataloogi asukoha alusel. Kasutaja kodukataloog on määratud lisandmoodulis Kohalikud kasutajad ja rühmad.
LOGONSERVER praeguse kasutaja autoriseerimiseks kasutatud domeenikontrolleri nimi
NUMBER_OF_PROCESSORS protsessorite arv süsteemis
OS operatsioonisüsteemi nimi. Windows XP ja Windows 2000 kuvatakse kui Windows_NT.
PATH Määrab otsingutee käivitatavad failid.
PATHEXT Tagastab faililaiendite loendi, mida operatsioonisüsteem peab käivitatavaks.
PROCESSOR_ARCHITECTURE protsessori arhitektuur
PROCESSOR_IDENTIFIER protsessori kirjeldus
PROCESSOR_LEVEL protsessori mudeli number
PROCESSOR_REVISION protsessori läbivaatamine
PROGRAMMI FAILID viis Programmi kaust Failid
KIIRE Tagastab praeguse tõlgi käsurea valikud. Loodud käsu Cmd.exe abil.
JUHUSLIK juhuslik kümnendarv vahemikus 0 kuni 32767. Loob Cmd.exe
SESSIONNAME Seansi tüüp. Vaikeväärtus on "Console"
SÜSTEEMIJUHT ketas, millel see asub Juurkaust Windows
SÜSTEEMJUUR Windowsi juurkausta tee
TEMP või TMP Tagastab ajutised vaikekaustad, mida kasutavad sisselogitud kasutajatele juurdepääsetavad rakendused. Mõned rakendused nõuavad muutujat TEMP, teised aga TMP muutujat. Võimalik, et TEMP ja TMP võivad osutada erinevatele kataloogidele, kuid tavaliselt on need samad.
AEG Tagastab praeguse kellaaja. Kasutab sama vormingut kui käsk time /t. Loodud käsu Cmd.exe abil.
USERDOMAIN domeeni nimi, kuhu praegune kasutaja kuulub
KASUTAJANIMI praegune kasutajanimi
KASUTAJAPROFIIL praeguse kasutaja profiili tee
TUUL kataloog, kuhu Windows on installitud

0.00 (1 )

Üldine lähenemine.

Käsufailid on tekstifailid pikendusega nahkhiir või cmd, mille read tähistavad käivitatavate failide käske või nimesid. Pakkfaili käivitamisel võtab juhtimise üle operatsioonisüsteemi käsuprotsessor (sageli nimetatakse seda käsutõlk), mis loeb ja tõlgendab järjestikku pakkfaili ridu. Windows 9X puhul on see tehtud command.com, WinNT/2K/XP jaoks - cmd.exe. Pakettfaili read võivad sisaldada käsuprotsessori enda käske (FOR, GOTO, IF jne) või käivitatavate moodulite nimesid (net.exe, regedit.exe, win.com jne). WinNT/2K/XP operatsioonisüsteemides saate lühike teave vastavalt käsurida kasutades käskude koostisele:

või konkreetse käsuga:

HELP käsu nimi

Abiteksti kuvamiseks mitte ekraanil, vaid failis saate kasutada väljundi ümbersuunamine . Kui kasutate käsurida, standardseade Sisendseade on klaviatuur ja väljundseade on ekraan, kuid neid seadmeid saab ümbersuunamismärkide abil ümber kaardistada

< - sisendi ümbersuunamine

> - väljundi ümbersuunamine (või > > - ümbersuunamine olemasolevasse faili, kui väljundandmed lisatakse faili lõppu).

Käsu andmevoo väljastamiseksABIfailis help.txt on käsurida järgmine:

ABI > help.txt

Käsu GOTO abi kuvamiseks failis goto.txt:

ABI MINNA > goto.txt

Keskkonnamuutujate kasutamine.

Pakettfailides saate ja sageli peaksite seda kasutama keskkonnamuutujad - muutujad, mille väärtused iseloomustavad keskkonda, kus käsk või pakkfail täidetakse. Keskkonnamuutujate väärtused genereeritakse OS-i alglaadimisel ja kasutaja registreerumisel süsteemis ning neid saab määrata ka käsugaSET, mille formaat on:

SET [muutuja=[string]]

muutuv Keskkonnamuutuja nimi.

rida Määratud muutujale määratud märgistring.

Näiteks käsurida

SET mynane=Vasya

lisab muutuja myname, mis võtab väärtuse Vasya.

Muutuja väärtuse saate programmides ja pakkfailides, kasutades selle nime, mis on ümbritsetud protsendimärkidega ( %) . Näiteks käsk

kuvab sõna aeg ja käsu

kuvab ajamuutuja väärtuse, mis võtab praeguse aja väärtuse.

Ja käsurida

SET PATH=C:myprog;%path%

lisab otsinguteele käivitatavad programmid, mida kirjeldab PATH muutuja väärtus, kataloog C:myprog

Käsu SET täitmine ilma parameetriteta kuvatakse ekraanil muutujate praegused väärtused kujul:

NUMBER_OF_PROCESSORS=1 – protsessorite arv

OS=Windows_NT – OS-i tüüp

Path=E:WINDOWSsystem32;E:WINDOWS;E:Program FilesFar – käivitatavate failide otsingutee.

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH - täitmisfailide laiendused.

PROCESSOR_ARCHITECTURE=x86 – protsessori arhitektuur.

PROCESSOR_IDENTIFIER=x86 Family 6 Model 8 Stepping 1, AuthenticAMD – protsessori identifikaator.

PROCESSOR_LEVEL=6 – protsessori tase (mudeli number).

PROCESSOR_REVISION=0801 – protsessori versioon.

ProgramFiles=E:Program Files – tee kausta "Program Files".

PROMPT=$P$G – käsurea käsurea vorming $P – praeguse kataloogi tee $G – ">" märk.

SystemDrive=E: - süsteemidraivi täht.

SystemRoot=E:WINDOWS – Windows OS-i kataloog.

Käsk SET ei tagasta mõne muutuja väärtusi. Need on muutujad, mille väärtused muutuvad dünaamiliselt:

%CD% – võtab praeguse kataloogistringi väärtuse.

%DATE% – aktsepteerib väärtust tänane kuupäev.

%TIME% – Aktsepteerib praeguse ajaväärtuse.

%RANDOM% – aktsepteerib juhusliku kümnendarvu väärtust vahemikus 1–32767.

%ERRORLEVEL% – aktsepteerib ülesande väljumiskoodi ERRORLEVEL praegust väärtust

%CMDEXTVERSION% – võtab laiendatud käsutöötluse jaoks käsu CMD.EXE käsuprotsessori versiooni väärtuse.

%CMDCMDLINE% – võtab kesta kutsunud rea väärtuse.

Muutuja väärtuse kuvamiseks saate kasutada käsurida:

ECHO %muutuv%

Sisestage partiifaili parameetrid.

Käsurea parameetreid on võimalik edastada käsufailile ja kasutada nende väärtusi käsufailis endas olevates lausetes.

BAT-fail< параметр1 > , < параметр2 >, ... < параметрN >

Pakettfailis endas on esimene parameeter muutujana saadaval %1 , teine ​​- %2 ja nii edasi. Pakettfaili enda nimi on saadaval muutujana %0 . Näiteks loome partiifaili, mille ülesandeks on sisestatud parameetrite väärtuste kuvamine ekraanil. Tavaliselt on teksti kuvamiseks kasutatav käsk

ECHO< текст >

Kui aga tekst asendatakse %1-ga, tagastatakse esimene parameeter, %2-ga - teine ​​jne.

Looge järgmise sisuga fail parm.bat:

echo Esimene parameeter=%1

kaja Teine parameeter=%2

kaja Kolmas parameeter = %3

ja käivitage see järgmise käsuga:

parm.bat ESIMENE sekund "kaks sõna"

pärast selle käivitamist saate aru, kuidas see töötab ja et tühikutega parameetrid tuleb sisestada topeltjutumärgid. Selleks, et töödeldud käsuprotsessor ridu ekraanil ei kuvata, võite kasutada käskuKAJA VÄLJAS, asetades selle pakifaili esimesele reale. Kui soovite muuta pakettfailis rea, mida kest ignoreerib, asetage see rea algusesseR.E.M.< пробел > . Nii saate paigutada kommentaare, mis on sageli kasulikud suurtes partiifailides:

rem ECHO OFF lülitab käsufailiridade sisu ekraanil kuvamise režiimi välja

REM kuvab ainult nende täitmise tulemust.

echo Esimene parameeter=%1

kaja Teine parameeter=%2

kaja Kolmas parameeter = %3

Proovige ECHO OFF asendada @ECHO OFF -ga – tulemus räägib enda eest. Väljundrežiimi välja lülitavat rida enam ekraanil ei kuvata.

Üleminekud ja sildid.

Pakkfailides saate kasutada tingimuslikke hüppekäske, mis muudavad nende toimimise loogikat sõltuvalt teatud tingimuste täitmisest. Tingimuslike harude kasutamise illustreerimiseks loome partiifaili, mille eesmärk on määrata kettale etteantud draivitäht eemaldatav kandja, mida hakatakse kasutama välkmäluseadmetena. Tingimused on järgmised – mälupulka on 2, millest üks peaks olema Exploreris nähtav draivina X: ja teine ​​draivina Y:, olenemata sellest, millisesse USB-porti need on ühendatud. Me eeldame seda päris rattad saab ühendada kui F: või G: Me tuvastame kettad kindla nimega faili olemasolu järgi (parem on selline fail juurkataloogi peidetud ja nimetada see millekski ebatavaliseks):

Flashd1.let - esimesel kettal

Flashd2.let - teisel

Need. Pakettfaili eesmärk on kontrollida faili olemasolu eemaldatavad kettad F: Ja G: failid Flashd1.let või Flashd2.let ja olenevalt sellest, milline on olemas, määrake draivitäht X: või Y:

Kettalt faili otsimiseks kasutage käskuKUI OLEMAS:

IF EXIST failinime käsk

Lihtsaim viis seda käsuna kasutada onSUBST, mis vastab draivi nimele ja kataloogile.

SUBST X: C: - loob virtuaalse ketta X:, mille sisuks saab draivi C juurkataloog:

Looge partiifail setXY.bat järgmiste ridadega:

Pärast sellise faili käivitamist on teil kettad X: ja Y: Kui aga käivitate sellise faili uuesti, kuvab SUBST käsk veateate - kettad X: ja Y: on ju juba olemas.

Kui virtuaalsed kettad X: ja Y: on juba loodud, on soovitatav SUBST-i täitmisest mööda minna (või kustutada need enne ühendamist parameetriga -d kasutades SUBST-i). Muutke partiifaili kasutadesMINEMA- juhtimise ülekandmine pakkfaili reale sildi järgi.

GOTO silt

Silt peab asuma eraldi real ja algama kooloniga. Teeme pakettfailis muudatused, et me ei saaks veateateid:

REM, kui X-i pole olemas - siis minge SETX-sildile

KUI POLE OLEMAS X: MINGE SETX

REM, kui X on olemas: - jätkame Y olemasolu kontrollimisega:

KUI OLEMAS ON G:flash1.let SUBST X: G:

KUI OLEMAS F:flash1.let SUBST X: F:

REM, kui Y: on olemas – lõpetage partiifail.

KUI OLEMAS OLEMAS Y: MINGE VÄLJU

KUI OLEMAS G:flash2.let SUBST Y: G:

KUI OLEMAS F:flash2.let SUBST Y: F:

REM-väljund partiifailist

Veateade SUBST on kadunud. Käskude täitmisel ilmnenud vigade märke saab jälgida käsufailis endas muutujat analüüsidesERRORLEVEL, mille väärtus kujuneb enamiku programmide täitmisel. ERRORLEVEL on 0, kui programm on lõpule viidud ilma vigadeta ja 1, kui ilmnes viga. Võib olla ka teisi väärtusi, kui need on käivitavas programmis ette nähtud.

Pakkfaili saate kasutada ka partiifaili real käsuna. Veelgi enam, kutsuva pakkfaili ülekandmiseks ja tagasipöördumiseks kasutatakse käskuHELISTAMA. Loome järgmise sisuga käsufaili test.bat:

ECHO Call 1.bat

ECHO tagasitulek.

Ja käsku sisaldav fail 1.batPAUS,pakkfaili täitmise peatamine kuni mis tahes klahvi vajutamiseni.

Test.bat käivitamisel kuvatakse ekraanil teade

Helista 1.bat

ja juhtimine antakse 1.batile pausikäsuga. Pärast klahvi vajutamist klaviatuuril antakse juhtimine käsureale "ECHO Return". ja see kuvatakse ekraanil

Kui eemaldate failist test.bat CALL, siis failist 1.bat tagastamist ei teostata. Muide, kui viite juhtimise üle pakkfaili, saate selle korraldada silmusena. Proovige lisada faili test.bat lõppu järgmine rida:

Pakettfaili tsüklist saate välja murda, vajutades CTRL-Break kombinatsiooni. Pakkfailis oleva protseduuri kutsumiseks on võimalik kasutada käsku CALL. Sel juhul nime argumendina ei kasutata väline fail ja silt:
....
helista: proc1
....
:proc1
....
väljuda
....

Failide loomine.

Windowsis pole faili loomiseks spetsiaalset käsku, kuid saate ilma selleta hõlpsalt hakkama mitmel viisil:

Konsoolist faili kopeerimine

COPY CON myfile.txt

Selle käsu täitmisel kirjutatakse klaviatuuri (CON-seadme) andmed faili myfile.txt. Vajutage F6 või CTRL-Z kombinatsioonid lõpetab väljundi.

Väljundi ümbersuunamine

ECHO 1 > minu fail.txt

Selle käsu käivitamine loob faili myfile.txt, mis sisaldab märki "1"

Sisend- ja väljundi ümbersuunamise kombinatsioon:

COPY CON > myfile.txt< xyz

Selle käsu täitmisel, nagu ka esimesel juhul, kasutatakse konsoolist faili kopeerimist, kuid klaviatuurilt sisestamise asemel kasutatakse sisendit olematust seadmest xyz. Süsteem kuvab teate, et sellist seadet ei ole olemas, kuid tühi fail myfile.txt luuakse edukalt.
Väga lihtne võimalus on kopeerida fiktiivselt seadmelt nimega null viilima.
kopeeri null minu fail.txt

Kui teil on sageli vaja luua tühje faile, saate koostada oma pakifaili (näiteks - newfile.bat või, mis veelgi parem, - nf.bat) ja nime loodud fail edastage see käivitamisel parameetrina.

Faili sisu:

Asetage see partiifail sisse süsteemi kataloog(C:windowssystem32 või mõni muu PATH otsinguteedest leitud).

Käsurida:

uus fail.bat minu fail.txt

Või

nf.bat myfile.txt

Või
nf minu fail.txt

Siin on teie meeskond nf loomiseks tühi fail käsureal.

Sama draivitähe määramine irdkettale.

Väljakutse on eemaldatav USB Draiv (välkmälu) oli alati ligipääsetav sama tähe all, olenemata sellest, millises arvutis seda kasutati või kuidas see oli ühendatud. Selle lahendamiseks kasutame juba eespool mainitud käsku SUBST. Valime irdketta jaoks soovitud tähe, näiteks - X. Muutujana %~d0 on saadaval ketta nimi, millelt pakifail käivitati. Looge järgmise sisuga partiifail:
@kaja väljas
subst X: %~d0
mida tähendab virtuaalse ketta X: loomine, millega seostatakse füüsiline ketas, kust pakkfail käivitati.
Täiendavat teavet muutuja %0 asendusväärtuste kohta saab järgmisest partiifailist:

@kaja väljas
KAJA FAILIDE TÖÖTLEMINE – %0
ECHO Pakettfaili loomise/muutmise kuupäev/kellaaeg – %~t0
ECHO partiifaili tee - "%~f0"
ECHO käsufaili ketas - %~d0
ECHO partiifailide kataloog - "%~p0"
ECHO Pakettfaili nimi – %~n0
ECHO Pakettfaili laiend – %~x0
ECHO Lühinimi ja laiend - %~s0
ECHO partiifaili atribuudid - %~a0
ECHO partiifaili suurus – %~z0

Kuupäevade ja kellaaegade põhjal arhiivide loomine põlvkondade kaupa.

Lahendame järgmise probleemi – peame looma kataloogis C:Program FilesFAR asuvate failide arhiivi. Nimi arhiivifail peaks koosnema praegusest kellaajast (tunnid.minutid.sekundid – HH.MM.SS.rar) ja see tuleks paigutada uus kataloog, mille nimi peab koosnema praegusest kuupäevast (päev.kuu.aasta – PP.KK.AAAA). Arhiveerimiseks kasutame RAR arhiveerijat. Käivitage arhiivi loomise vorming:

RAR a -r< путь и имя архива > < Путь и имя архивируемых данных >

a- arhiivi loomise käsk.
-r- võti, mis määrab alamkataloogide arhiveerimise (kuna lähtekaustas on alamkataloogid).

Seega peate probleemi lahendamiseks looma RAR-i jaoks õigesti nimed ja teed. Selleks kasutame järgmisi tegureid:

  • Pakettfailides pääsete juurde praegusele kuupäevale ja kellaajale – muutujatele %DATE% ja %TIME%
  • Pakettfailides saate luua ajutisi muutujaid, kasutades käsku SET.
  • Ajutiste muutujate väärtuse saab moodustada %DATE% ja %TIME% alusel, jättes vahele ja/või asendades nende osad sama SET-käsuga.

    Standardsete piirkondlike seadetega muutujast %DATE% saadud kuupäev näeb välja järgmine:
    Esmaspäev, 21.01.2005- nädalapäev (2 tähemärki) - tühik - kuupäev (10 tähemärki)
    Näiteks loome MD käsuga kataloogi< имя каталога >.
    Loome mällu ajutise muutuja VDATE ja omistame sellele keskkonnamuutuja DATE väärtuse ilma esimese 3 tähemärgita - 20.01.2005:

    Määra VDATE=%kuupäev:~3%

    Looge draivile C: kataloog, mille nimi = muutuja VDATE praegune kuupäev:

    MD C:\%VDATE%
    Pärast selle käsu täitmist luuakse draivile C kataloog nimega 01/20/2005:

    Muutujast %TIME% saadud aeg:
    14:30:59.93 - Tunnid, minutid, sekundid, sajandiksekundid.
    Sajadikud on arhiivifaili nimes ehk ebavajalikud. Looge ajutine muutuja VTIME ja määrake sellele praegune kellaaeg ilma viimase 3 tähemärgita
    määra VTIME=%time:~0,-3%
    Nüüd VTIME = 14:30:59, kuid failinimes ei saa kasutada märki ":", seega asendame selle punktiga.
    määra VTIME=%VTIME::=.%
    Muutuja VTIME võtab failinime jaoks väärtuse 14.30.59.

    Käivitame arhiivi:

    Nüüd saate luua partiifaili sisuga:

    Määra VDATE=%kuupäev:~3%
    md c:\%VDATE%
    määra VTIME=%time:~0,-3%
    määra VTIME=%VTIME::=.%
    rar a -r C:\%VDATE%\%VTIME%.rar "C:Program filesfar*.*"

    Sellist pakkfaili saab käivitada automaatse laadimise kaudu või skripti osana, kui kasutaja logib domeeni sisse, või kasutades planeerijat teatud ajahetkel ning teil on alati saadaval kriitiliste andmete ajajärjekorras arhiivid.

    Arhiivide loomine kasutajaprofiili muutujate abil.

    See pakkfail loob Win2K/XP kasutajate kausta "Minu dokumendid" sisu arhiivid, paigutades need kataloogidesse
    C:ARHIVMinu dokumendidKasutajanimiKuupäevKell

    Kasutatakse muutujaid USERPROFILE, USERNAME, WINDIR, nii et see pakettfail ei tööta WIN9X-is. (Kuigi soovi korral saate sisestada faili autoexec.bat käske nende muutujate väärtuste määramiseks ja kasutada seda ühe kasutaja versioonis praktiliselt ilma muudatusteta). Pakettfaili sisu on kommenteeritud ja see ei tohiks põhjustada suuri raskusi, kui mõistate eelmist näidet:

    @kaja väljas
    rem Määrab muutuja FROM – kust saada andmeid arhiveerimiseks
    set FROM=%USERPROFILE%My Documents
    rem Määrab muutuja TO – kuhu paigutada arhiivid
    seadke TO=C:arhivMy documents\%USERNAME%
    rem Loome hoolduskataloogi
    md "%TO%"
    rem Moodustame alamkataloogi nime praegusest kuupäevast
    rem praegune kuupäev Win2K vaikeseadetega – esmaspäev 25.04.2005
    rem praegune kuupäev WinXP vaikeseadetega - 25.04.2005
    rem Praegusest kuupäevast moodustame alamkataloogi nime - 04/25
    rem Vaikimisi on Windir WinXP jaoks C:WINDOWS ja Win2K jaoks C:WINNT
    KUI /I %Windir% == C:WINNT GOTO Win2K
    set vdate=%DATE:~0.-5%
    GOTO SetFileName
    : Win2K
    set vdate=%DATE:~3.-5%
    rem Loome praeguse aja järgi arhiivifaili nime - 12:00:00.99
    rem jätame sajandiksekunditest kõrvale ja asendame sümboli: sümboliga. Tulemus - 12.00.00
    :SetFileName
    sea ​​vtime=%TIME:~0,-3%
    määra vtime=%vtime::=.%
    rem Loo arhiivifaili jaoks alamkataloog
    md "%TO%\%VDATE%"
    rem Arhiveerimise käsk. Alamkaustadega arhiveerimiseks on vaja lülitit -r
    rem valik ARJ arhiivi jaoks: arj a -r "%TO%\%VDATE%\%VTIME%.arj" "%FROM%*.*"
    rem Kasutamisel RAR arhiveerija:
    rar a -r "%TO%\%VDATE%\%VTIME%.rar" "%FROM%*.*"

    Käskude täitmine vastavalt ajakavale.

    WIN2K/XP-s on käsurea utiliitAT,mis võimaldab teil käivitada käsku või pakkfaili määratud aeg kohalikul või kaugarvuti. Käsu AT kasutamiseks peab teenus Task Scheduler töötama (tavaliselt käivitub see vaikimisi süsteemi installimise ajal).

    AT [\arvutinimi] [ [kood] | /KUSUTA ]

    [\arvutinimi] ajal

    [ /IGA:päev[,...] | /JÄRGMINE:päev[,...]] "käsk"

    \arvutinimi Kaugarvuti nimi. Kui see parameeter välja jäetakse,

    kasutatakse kohalikku arvutit.

    kood Ajastatud ülesande järjekorranumber. Näidatakse, kui peate klahvi abil juba ajastatud toimingu tühistama /kustuta.

    /kustuta Tühista ajastatud ülesanne. Kui ülesande kood on välja jäetud,

    kõik määratud ülesanded

    arvuti.

    /jah Kõigi tühistamise korral tühistage kinnitustaotlus

    planeeritud ülesanded.

    aega Aeg käivitada käsk.

    /interaktiivne kasutajaga suhtlemise lubamine,

    arvutiga töötamine, kui ülesanne algab. Ilma selle võtmeta käivitatud ülesanded on arvutikasutajale nähtamatud.

    /iga päev[,...]Ülesanne käivitatakse määratud nädalapäevadel või

    kuu. Kui kuupäev jäetakse välja, kasutatakse jooksvat päeva

    /järgmine päev[,...]Ülesanne käivitatakse järgmisel määratud nädalapäeval

    (näiteks järgmisel neljapäeval). Kui kuupäev jäetakse vahele,

    Kasutatakse jooksvat kuupäeva.

    "meeskond" Käsu- või pakkfaili nimi.

    Kasutamise näited:

    "Äratuskella" analoog - hüpikaknad tekstiga, mis meenutab praegust või määratud kasutajale vajaduse kohta midagi ette võtta. Kasutajale sõnumi saatmiseks kasutame utiliitiNET.EXE

    KELL 13:50 net.exe saada * Kohvi aeg

    Kell 17:50 net.exe saadab kasutajale kojumineku aja

    AT \SERVER 13:45 net.exe saatmine Peate serveri taaskäivitama

    Vaadake ajastatud ülesannete loendit:

    Juba ajastatud ülesannete kustutamine:

    KELL 3 /KUSTUTA- ülesande number 3 kustutamine

    AT /KUSTUTA /JAH- kõigi ülesannete kustutamine

    "Juhtpaneel" - "Ajastatud ülesanded" võimaldavad teil meeskonna loodud ülesandeid vaadata, muuta ja kustutada ATülesandeid.

    Süsteemiteenuste peatamine ja käivitamine.

    Win2K/XP teenuste peatamiseks ja käivitamiseks käsurealt kasutage käsku NET.EXE

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

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

    Võimalik on kasutada nii lühi- kui täisnime (“Dnscache” on lühinimi, “DNS-klient” on teenuse täisnimi). Tühikuid sisaldavad teenuste nimed on jutumärkides. Näide teenuse "DNS-klient" taaskäivitamise kohta

    võrgupeatus "DNS-klient"

    võrgu käivitamine "DNS-klient"

    Sama, kasutades lühikest nime:

    netopeatus Dnscache

    net start Dnscache

    Teenuse täisnime saab kopeerida jaotisest "Teenused" -< Имя службы >- "Atribuudid" - "Kuvanimi"

    Teenuste haldamiseks on palju mugavam kasutada utiliiti PsService.exe utiliitidest PsTools. Utiliit ei vaja installimist ja töötab mis tahes Windows OS-is. Lisaks teenuse käivitamisele ja peatamisele võimaldab teil otsida arvutites konkreetset teenust kohalik võrk, küsige teenuse olekut ja konfiguratsiooni, muutke käivitustüüpi, peatage teenus, jätkake, taaskäivitage.

    Töötamiseks süsteemiteenused Windows XP-s saate utiliiti kasutada sc.exe, mis võimaldab teil mitte ainult teenust peatada / käivitada, vaid ka küsida selle olekut, käivitus- ja tööparameetreid, muuta konfiguratsiooni ning töötada mitte ainult süsteemiteenuste, vaid ka draiveritega. Kui teil on õigusi, saate teenuseid hallata mitte ainult kohalikus masinas, vaid ka kaugmasinas. Näited:
    sc.exe peatab DNS-vahemälu- peatage DNSCache teenus kohalikus arvutis.
    sc\192.168.0.1 päring DNSCache- küsige DNSCache teenuse olekut arvutis IP-aadressiga 192.168.0.1
    sc\COMP käivitage DNSCache käivitage COMP-arvutis DNSCache teenus
    Utiliidiga töötamiseks saate abi, sisestades:
    sc/?

    Kuvatakse muutuja ERRORLEVEL väärtus.

    See lihtne partiifail kuvab väärtuse muutuja ERRORLEVEL kindlal käsureal. Esmalt kontrollib see vähemalt ühe sisendparameetri olemasolu ja kui seda ei anta, väljastatakse veateade ja väljumine toimub. Kui on määratud vähemalt üks parameeter, siis sisendparameetrid loetakse käsureaks ja need käivitatakse ning väärtus ERRORLEVEL tagastatakse käsu ECHO abil. Faili sisu (ma nimetasin seda echoEL.bat):

    @kaja väljas
    kui "% 1" NEQ "" GOTO PARMOK
    ECHO Peate määrama käsurea, et määratleda ERRORLEVEL
    väljuda
    :PARMOK
    %1 %2 %3 %4 %5 %6 %7 %8
    ECHO % 1 % 2 % 3 % 4 % 5 % 6 % 7 % 8 ERRORLEVEL=%ERRORLEVEL%

    Käivitamise näited:
    echoEL.bat NETOKSAT
    - käivitatakse käsk NET SHARE (andke jagatud võrguressursside loend) ja väljastatakse kood ERRORLEVEL
    echoEL.bat NET SHARE X"="C:
    - käivitatakse käsk NET SHARE X:=C: (loo jagatud võrguressurss nimega X ja draivi C juurkataloogi tee:) Pange tähele, et sümbol = on jutumärkides.
    Eespool loetletud valikud määravad õige käsurea. Aga proovi panna vale parameeter NET.EXE-le või olematu käsk ja sa näed, mis väärtuse ERRORLEVEL võtab. JA PALUN TÄHELEPANU, et käsurida tegelikult TÄITB ja näiteks valik “echoEL.bat format A:” alustab draivi A: disketi vormindamist.

    Dialoog kasutajaga

    Kasutajaga dialoogi pidamiseks võite kasutada käsku:
    SET /P< имя переменной >=< текст >
    täitmisel kuvatakse ekraan tekstisõnum < текст >ja vastuseteksti oodatakse. Näide – küsime parooli ja määrame selle väärtuse muutujale "pset":

    Set /p pset="Sisesta parool - "
    echo Parool on - %pset%

    Puudus seda meetodit on võimatu pakettfaili täitmist jätkata kasutaja vastuse puudumisel, nii et väga sageli kasutatakse komplekti asemel neid kolmanda osapoole programmid. Üks nendest - VALIK.COM Laadi alla (1,7 kb).
    VALIK annab kasutajale tekstisõnumi ja ootab, kuni kasutaja valib ühe antud vastusevalikutest (klahvivajutused klaviatuuril). Valikutulemuste põhjal moodustatakse muutuja ERRORLEVEL, mille väärtus võrdub valiku järjekorranumbriga. Vaikimisi on kaks võimalust - Y või N. Kui vastus on Y - siis ERRORLEVEL=1, kui N - siis ERRORLEVEL=2. Saate kasutada rohkem kui 2 valikuvõimalust ja on võimalik määrata vaikevalik, kui kasutaja on aadressil kindel aeg Ma ei vajutanud ühtegi klahvi. Käsurea vorming:

    CHOICE valikud] c,nn]
    /C[:]valikud – määratleb kehtivad valikud. Kui pole määratud - YN
    /N – valikuvalikuid ei kuvata.
    /S - väiketäht ja suured tähed on erinevad.
    /T[:]c,nn – vaikevalik on "c" pärast "nn" sekundit
    tekst – tekstistringi väljund päringuna

    Loome partiifaili, mis demonstreerib valiku CHOICE kasutamist. See reageerib klahvide "1", "2", 3 ja "0" vajutamisele. Kui vajutate "0", siis see lõpetatakse ja kui vajutate ülejäänud, saadetakse kasutajale teade. Kui midagi pole 10 sekundi jooksul vajutades lõpetatakse.

    @ECHO VÄLJAS
    :VALIK
    VALIK /C:1230 /T:0.10 Teie valik
    KUI %ERRORLEVEL% EQU 4 MINGE VÄLJU
    echo Sinu valik=%ERRORLEVEL%
    MINNA VALIK
    :VÄLJU

    Nüüd saate CHOICE abil luua pakkfaile, mille loogika saab kasutaja ise määratleda.

    Viivitused partiifailides

    Kunagi, tagasi DOS-is, kasutati käsufailis ootamise korraldamiseks mugavat SLEEP-käsku, kuid siis läks see mingil põhjusel tavalisest installist välja. Windows komplekt lisaressursside komplektis. Saate selle lihtsalt kopeerida sealt system32 kataloogi ja kasutada seda oma pakkfailides.

    : SLEEP N – kus N on viivitusega sekundite arv.

    Kui ressursikomplekti pole käepärast, saate kasutada eelnevalt käsitletud CHOISE käsku ilma tekstiväljundita ja automaatse vastuse genereerimisega nn sekundiga (1-99):

    Choice.com /T:y,10 /N – viivitus 10 sekundit

    Universaalsem meetod põhineb loopback-liidese pingimisel vajaliku arvu pakettidega. Ping for loopback liides (hostinimi on localhost või IP-aadress 127.0.0.1) täidetakse ilma tõeline ülekanne andmed, s.t. peaaegu kohe ja pingi vaheline intervall on 1 sekund. Kui määrate pingimiste arvu lüliti "-n" abil, saate n-sekundilise viivituse:

    Ping 127.0.0.1 -n 30 > null - annab 30-sekundilise viivituse

    Otsige rakendust töötavaid arvuteid

    Selle skripti juurutamiseks kasutage paketis olevaid utiliite PSTools(Lühike kirjeldus). Loome partiifaili, mis otsib kohalikust võrgust arvutid, kus töötab programm, mille nimi (nime algusosa) on käivitamisel parameetrina määratud, näiteks mäng . Kui tuvastatakse, saadetakse teade arvutile ADMINCOMP ja tuvastatud rakendus on sunnitud lõpetama. Otsimiseks kasutame utiliiti Pslist.exe ja analüüsime selle tagastuskoodi. Muutuja ERRORLEVEL väärtus, mis on võrdne nulliga, tähendab, et utiliit on tuvastanud kaugarvutis protsessi, mis vastab otsingutingimustele. Määrame partiifaili käivitamisel parameetriks otsitava protsessi nime. Anname oma partiifailile nime psl.bat. Parameetriga töötamine näeb välja selline:
    psl.bat mäng
    Esmalt peame kontrollima, kas parameeter on käivitamisel käsureal määratud ja kui see pole määratud, väljastame kasutajale teate ja lõpetame täitmise. Kui parameeter on määratud, läheme sildile "PARMOK":
    @kaja väljas
    kui "% 1" NEQ "" GOTO PARMOK
    ECHO Otsimiseks peate määrama protsessi nime
    väljuda
    :PARMOK
    Nüüd peame tagama PSlisti käsureale arvuti IP-aadresside järjepideva genereerimise. Lihtsaim viis seda teha on määrata aadressi konstantse komponendi väärtusele (näiteks 192.168.0.) ja arvutatud väärtusele ajutine keskkonnamuutuja (kehtib ainult käsufaili täitmise ajal). madala järgu osa (näiteks vahemikus 1-254). Näiteks eeldame, et peame skannima arvuteid aadressivahemikus:
    192.168.0.1 - 192.168.0.30:
    määra IPTMP=192.168.0. - aadressi vanem osa
    komplekt /A IPLAST=1 - madal osa. Lüliti /A tähendab arvutatud arvavaldist
    set IPFULL=%IPTMP%%IPLAST% – täieliku IP-aadressi väärtus.
    PSlisti käsurida näeb välja selline:
    pslist\%IPFULL%%1
    Nüüd jääb üle vaid käivitada PSlist tsükliliselt, lisades igas tsüklis aadressi madalama järgu osale ühe, kuni selle väärtus jõuab 30-ni, ja analüüsida pärast täitmist väärtust ERRORLEVEL. Tulemuse analüüsimiseks teostame ülemineku käsuga:
    MINU REZULT%ERRORLEVEL%
    pakkudes protsessi tuvastamisel üleminekut märgisele REZULT0 ja REZULT1-le
    2013-08-25 14:35:35: Artiklid: Infoturve: Tarkvara. Kas sulle meeldis see?
  • Selles artiklis:

    • Muutujate määratlemine
    • Käsurea muutujad (bat-faili kutsumise parameetrid)
    • IF tingimuslik operaator
    • Funktsioonid
    • Tagastusväärtuste kasutamine (väljumiskoodi töötlemine)

    Muutujate määratlemine

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

    SET-lause on operatsioonisüsteemi parameetritega manipuleerimise võime laiendus. See määrab muutuja, mille väärtus asendatakse selle nimega, kui seda nime kasutatakse protsendimärkide vahel. Seega, kui see on antud (muutuja, mida paljud arvuti helikaarti kasutavad mängud nõuavad):

    SET BLASTER=A220 I5 D1 P330

    siis, kui kasutate partiifailis järgmist konstruktsiooni:

    ECHO %BLASTER%

    Ekraanile kuvatakse "A220 I5 D1 P330". SET-lause abil defineeritud muutujaid nimetatakse keskkonnamuutujateks ja need on pärast täitmist nähtavad kuni DOS-i taaskäivitamiseni (kui neid pole mälus käsitsi muudetud). See tähendab, et seda saab kasutada ühest partiifailist või -programmist pärast seda, kui see on määratletud teises. Kõige kuulsam on muutuja PATH, mis on teede kogum kiire otsing failid. See on määratud failis autoexec.bat.

    Käsurea muutujad
    (parameetrid nahkhiirefaili kutsumiseks)

    %<цифра 0-9>

    Nagu igas keeles, on ka pakkfaili keeles võimalik kasutada batfaili parameetritena saadud muutujaid.

    Kokku võib olla 10 samaaegselt olemasolevat sõltumatut muutujat. Kirjutamiseks keerulised programmid see on siiski üsna väike regulaarne töö Sageli piisab 3-4-st. Muutuja väärtus on võrdne käsurealt vastava parameetri väärtusega. Muutuja %0 sisaldab .bat-faili nime ja kui olete selle määranud, siis selle asukohta. See tähendab, et kui käivitasite faili abc.bat järgmiste parameetritega:

    abc.bat a bc def

    siis sisaldab muutuja %0 väärtust abc.bat , %1 väärtust a , %2 bc ja %3 def . Seda omadust kasutatakse laialdaselt mitmekülgsete pakkfailide loomiseks korduvate toimingute puhul.

    Kui soovite käsurealt saada rohkem kui 10 muutujat, võite kasutada käsku SHIFT.

    SHIFT-käsk võimaldab kasutada rohkem kui 10 käsureaparameetrit. Vastavad varasemad parameetrid lähevad aga kaotsi. Teisisõnu, käsk SHIFT nihutab kõiki muutujate väärtusi ühe sammu võrra vasakule. See tähendab, et muutuja %0 sisaldab väärtust, mis varem sisaldus muutujas %1, ja muutuja %1 sisaldab muutuja %2 väärtust enne nihet. Kuid, seda operatsiooni on pöördumatu, st muutujaid on võimatu tagasi nihutada.

    IF tingimuslik operaator

    Õnneks käsu tõlk cmd.exe kaasaegses Windows 2000 ja uuemates versioonides toetab hargnevates konstruktsioonides käsuplokke, välistades vajaduse kasutada siltidega IF-e. Käsuplokid on sulgudes. See näeb välja selline (imiteerib C/C++ treppimisstiili):

    kui tingimus (

    Rem 'siis' haru käsud

    Rem...

    ) muidu (

    Rem Haru „muu” käsud

    Rem...

    Konkreetne näide kasutab:

    @kaja väljas

    määra BUILDMODE=%1

    kui "%BUILDMODE%" == "" (

    Echo FAIL: argument on nõutav ^(--debug, --release^)

    Välju /b 1

    rem Töötlemise lihtsustamiseks eemalda argumendist kõik sidekriipsud

    määra BUILDMODE=%BUILDMODE:-=%

    if "%BUILDMODE%" == "silumine" (

    Määra CCFLAGS=/Od /MDd /Z7

    ) muidu (

    Määrake CCFLAGS=/O2 /MD

    Minu arvates on sellega täiesti võimalik elada. Kuid nagu alati, pole elu nii lihtne, kui tundub. On üks probleem. Muutujaid, mida kasutatakse siis ja muudes plokkides, laiendatakse enne plokkide käivitamist, mitte täitmise ajal. Ülaltoodud näites ei põhjusta see probleeme, kuid järgmises:

    if "%BUILDMODE%" == "silumine" (

    Echo INFO: silumiskeskkonna režiimi seadistamine

    Määrake OPTFLAGS=/Od

    Määra CCFLAGS=%OPTFLAGS% /MDd /Z7

    ) muidu (

    Echo INFO: keskkonna vabastamise režiimi seadistamine

    Määra OPTFLAGS=/O2

    Määra CCFLAGS=%OPTFLAGS% /MD

    Konks on selles, et mõlemas plokis toimub OPTFLAGS muutuja asendamine enne, kui seda ploki täitmise ajal muudetakse. Vastavalt sellele täidetakse CCFLAGS väärtusega, mis oli OPTFLAGS-il selle ploki käivitamise ajal.

    See probleem lahendatakse muutuja viivitusega laiendamise abil. Muutujad, mis sisalduvad !…! %...% asemel selguvad nende tähendused alles otsese kasutamise hetkel. See režiim on vaikimisi keelatud. Saate selle lubada, kasutades cmd.exe kutsumisel lülitit /V:ON või käsku:

    nahkhiirefaili enda tekstis. Teine meetod tundub mulle mugavam - pole eriti lahe nõuda, et keegi käivitaks teie skripti teatud parameetriga.

    Seda öeldes saaks eelmise "vale" näite parandada järgmiselt:

    setlocal enableddelayedexpansion

    if "%BUILDMODE%" == "silumine" (

    Echo INFO: silumisrežiimi keskkonna seadistamine

    Määrake OPTFLAGS=/Od

    Määra CCFLAGS=!OPTFLAGS! /MDd /Z7

    ) muidu (

    Echo INFO: vabastusrežiimi keskkonna seadistamine

    Määra OPTFLAGS=/O2

    Määra CCFLAGS=!OPTFLAGS! /MD

    Nüüd on see peaaegu täisväärtuslik kui-siis-muu plokk. Peaaegu, sest kui kohtate mõnes kajakäskluses sulgevat sulgu, peate selle vältima märgiga ^, muidu läheb parser segadusse...

    Kuid igal juhul on see palju parem kui meeletu hulk silte ja üleminekuid.

    Funktsioonid

    Kas bat-failis on võimalik funktsiooni luua? Jah, sa saad. Pealegi on see mõnikord isegi vajalik. Tõsi, neid võib tinglikult funktsioonideks nimetada.

    Kõnekäsklusel on spetsiaalne süntaks, mis võimaldab minna samas nahkhiirefailis olevale märgile, jättes meelde koha, kust see kõne tehti:

    call:label argumendid

    Funktsioon tagastatakse käsuga:

    välju /b [valikuline tagastuskood]

    Klahv /b on siin väga oluline: ilma selleta väljute mitte funktsioonist, vaid skriptist üldiselt.

    Üksikasjade vaatamiseks tippige käsureale:

    helistama/?

    väljuda /?

    Huvitaval kombel toetab selle süntaksiga kõnekäsk rekursiivseid kõnesid muutujaargumentide %0–%9 jaoks uue kaadri automaatse loomisega. Mõnikord võib see olla kasulik. Siin on klassikaline näide rekursiivsest faktoriaalarvutusest käsukeeles:

    @kaja väljas

    call:factorial %1

    kaja % RESULT%

    väljuda

    rem Funktsioon faktoriaalväärtuse arvutamiseks

    rem sisselogimine:

    rem %1 Arv, mille jaoks soovite faktoriaali arvutada

    rem Väljund:

    rem %RESULT% Faktoriaalne väärtus

    :faktoriaalne

    kui % 1 == 0 (

    Määra TULEMUS=1

    Välju /b

    kui % 1 == 1 (

    Määra TULEMUS=1

    Välju /b

    määra /a PARAM=%1–1

    call:factorial %PARAM%

    määra /a TULEMUS=% 1 * % TULEMUS%

    välju /b

    Töö näide:

    > faktoriaal.bat 10

    3628800

    Tagastusväärtuste kasutamine
    (töötleb programmi väljumiskoodi)

    Kui mis tahes programm oma töö lõpetab, tagastab see operatsioonisüsteemile oma lõpetamiskoodi. Eduka lõpetamise korral on tavaks tagastada null, vastasel juhul veakood. Mõnikord, õigemini sageli, tagastab programm "tahtlikult" nullist erineva väärtuse, nii et selle toimimise mõningaid üksikasju saab partiifailis "õppida". Näiteks tagastab programm vajutatud klahvi koodi ja .bat fail teeb selle põhjal erinevaid toiminguid.

    Kuidas saab partiifail tuvastada käivitatud programmi väljumiskoodi? Selleks on ette nähtud võtmemuutuja ERRORLEVEL.

    Veatasemetega pakkfaili näide:

    @ECHO VÄLJAS

    REM Käivitage programm prg1.exe

    PRG1.EXE

    REM-i lõpukoodi analüüs

    KUI VÕTATASE 2 MINGE FAILIT EI LEITUD

    KUI VERATASE 1, MINGE WRITEERROR

    KUI VERATASE 0, MINGE VÄLJU

    MINGE ONEEXIT

    :FAILI EI LEITUD

    ECHO viga! Faili ei leitud!

    MINGE ONEEXIT

    :WRITEERROR

    ECHO salvestusviga!

    MINGE ONEEXIT

    :EXITOK

    ECHO Programm viidi edukalt lõpule.

    MINGE ONEEXIT

    :ONEEXIT

    Pange tähele, et väljumiskoodi analüüs ei alga nullist, vaid maksimaalsest võimalikust väärtusest. Fakt on see, et selline kontroll tähendab: "kui veatase on väärtusest suurem või sellega võrdne, siis ...". See tähendab, et kui kontrollime nullist alustades, on esimesel real kõik väärtused tõesed, mis on vale.

    See on seda tüüpi programmide kõige levinum viga.

    Enda muutujate deklareerimine on peaaegu iga programmeerimiskeele lahutamatu osa, seega vbscripti keeles deklareeritakse need märksõnaga hämar, ja jscriptis kasutatakse seda märksõna var.

    Käsumuutujad Windowsi stringid esindavad veidi erinevat märki, siin ei saa te cmd-muutujate rühma deklareerida ega käsureal mitmele muutujale kohe väärtusi määrata. Heidame pilgu peale järgmised read kood:

    kaja % Var3% kaja % VAR3% kaja % vAr3%

    Üks punkt, mida tasub kaaluda, on salvestus

    seadke var1 =100
    seadke var1 = 100

    see pole sama asi, see tähendab, et esimesel juhul loome cmd muutuja "var1" ja teisel juhul - "var1". Sarnane on olukord väärtuste määramisega, seega pange tähele ruumi!!!

    Näeme, et funktsiooni abil saame kuvada muutuja väärtuse Kaja, lisame selle sümboli "%" alla seatud– paneme lihtsalt kirja selle nime, samuti tasub arvestada, et kõikidele muutujatele omistatakse stringitüüp.

    Kui jooksed cmd käsk komplekt, mis loetleb kõik muutujad ja nende väärtused praegune seanss, näete, et äsja loodud cmd muutujad ja . Meil on neile juurdepääs kogu seansi jooksul.

    Windowsi käsureal olevate muutujate sisu kustutamiseks peate lihtsalt määrama tühja väärtuse:

    prindib lihtsalt rea %Var3% ja käsu

    Selles näites vältisime tähemärke & ja ^, määrates sellega fraasid:

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

    Väärib märkimist, et kui proovime kuvada nende muutujate väärtusi kasutades cmd funktsioonid seatud, siis probleeme ei teki, aga kui kasutame kajafunktsiooni, saame hoopis teistsuguse tulemuse, kui ootasime. Niisiis, kui proovite käivitada järgmist käsku:

    Nüüd, kui koodi käivitate:

    kaja %var4% kaja %var5%

    kõik läheb hästi.

    On selge, et praeguses käsurea aknas loodud cmd muutujad ei ole teistele protsessidele kättesaadavad, kuid on võimalik seada veelgi suuremaid piiranguid.

    Mida küsida kohalik ala nähtavus, plokki kasutatakse SETLOCAL...ENDLOCAL. Kõik selle ploki keskel deklareeritud Windowsi käsurea cmd muutujad ei ole väljaspool seda nähtavad. Avage redaktor (ma kasutan redaktorit Notepad++, kuna see tõstab koodi kohe esile) ja kirjutage sellesse järgmised koodiread:

    Näeme, et kõigepealt deklareerisime var1 ja määrasime sellele väärtuse 0, seejärel deklareerisime uuesti sama nimega muutuja, kuid plokis SETLOCAL...ENDLOCAL. Skript väljastab nii kohaliku kui ka globaalse var1 väärtuse. Kasutasin spetsiaalselt ladina tähti, et kui midagi peaks juhtuma, ei tekiks vuttimist.