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:
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äljastamiseks
ABIfailis 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äsku
KAJA 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äsku
KUI 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:
Standardsete piirkondlike seadetega muutujast %DATE% saadud kuupäev näeb välja järgmine: Määra VDATE=%kuupäev:~3% Looge draivile C: kataloog, mille nimi = muutuja VDATE praegune kuupäev: MD C:\%VDATE% Muutujast %TIME% saadud aeg: Käivitame arhiivi: Nüüd saate luua partiifaili sisuga: Määra VDATE=%kuupäev:~3% 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.
See pakkfail loob Win2K/XP kasutajate kausta "Minu dokumendid" sisu arhiivid, paigutades need kataloogidesse |
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.