Varijablama u cmd-u dodjeljuje se vrijednost naredbe. Dodjeljivanje istog slova pogona izmjenjivom pogonu. Potražite računala na kojima je pokrenuta aplikacija

Unutar naredbenih datoteka možete raditi s takozvanim varijablama okruženja (ili varijable okoline), od kojih je svaki pohranjen u RAM memorija, ima svoje jedinstveno ime, a vrijednost mu je niz. Standardne varijable okoline automatski se inicijaliziraju kada se operativni sustav pokrene. Takve varijable su npr. WINDIR, koja određuje lokaciju Windows imenik, TEMP, koji navodi stazu do direktorija za pohranu privremene datoteke Windows ili PATH, koji pohranjuje put sustava (staza pretraživanja), odnosno popis direktorija u kojima bi sustav trebao tražiti izvršne datoteke ili datoteke dijeljenje(Na primjer, dinamičke knjižnice). Također možete deklarirati vlastite varijable okruženja u batch datotekama pomoću naredbe SET.

Dobivanje vrijednosti varijable

Da bi se dobila vrijednost određenog varijabla okoline Ime ove varijable trebate ograditi u % simbolima. Na primjer:

@ECHO ISKLJUČENO CLS REM Kreiraj varijablu MyVar SET MyVar=Zdravo REM Promijeni varijablu SET MyVar=%MyVar%! Vrijednost varijable ECHO MyVar: %MyVar% REM Brisanje varijable MyVar SET MyVar= Vrijednost varijable ECHO WinDir: %WinDir%

Prilikom pokretanja ovoga skupna datoteka linija će se prikazati na ekranu

Vrijednost varijable MyVar: Pozdrav! WinDir vrijednost varijable: C:\WINDOWS

Pretvaranje varijabli u nizove

Na neke načine možete manipulirati varijablama okoline u batch datotekama. Prvo, na njima se može izvršiti operacija ulančavanja (lijepljenja). Da biste to učinili, samo trebate napisati vrijednosti povezanih varijabli jednu pored druge u naredbi SET. Na primjer,

SET A=Jedan SET B=Dva SET C=%A%%B%

Nakon izvršavanja ovih naredbi u datoteci, vrijednost varijable C bit će niz "Double". Ne biste trebali koristiti znak + za ulančavanje jer će se on jednostavno protumačiti kao simbol. Na primjer, nakon pokretanja datoteke sa sljedećim sadržajem

SET A=Jedan SET B=Dva SET C=A+B ECHO varijabla C=%C% SET D=%A%+%B% ECHO varijabla D=%D%

Na ekranu će se prikazati dvije linije:

Varijabla C=A+B Varijabla D=Jedan+Dva

Drugo, možete izvući podnizove iz varijable okruženja pomoću konstrukcije %variable_name:~n1,n2%, gdje broj n1 određuje pomak (broj znakova koje treba preskočiti) od početka (ako je n1 pozitivan) ili od kraja (ako je n1 negativan) odgovarajuće varijable okruženja, a broj n2 je broj znakova koji se dodjeljuju (ako je n2 pozitivan) ili broja posljednji likovi u varijabli koja neće biti uključena u odabrani podniz (ako je n2 negativan). Ako je navedena samo jedna negativna opcija -n, izvući će se zadnjih n znakova. Na primjer, ako varijabla %DATE% pohranjuje niz "09/21/2007" (simbolični prikaz trenutnog datuma u određenim regionalnim postavkama), tada nakon izvršavanja sljedećih naredbi

POSTAVITE dd1=%DATUM:~0,2% POSTAVITE dd2=%DATUM:~0,-8% POSTAVITE mm=%DATUM:~-7,2% POSTAVITE yyyy=%DATUM:~-4%

nove varijable će imati sljedeće vrijednosti: %dd1%=21, %dd2%=21, %mm%=09, %gggg%=2007.

Treće, možete izvršiti proceduru zamjene podniza pomoću konstrukcije %variable_name:s1=s2%(ovo će vratiti niz sa svakim pojavljivanjem podniza s1 u odgovarajućoj varijabli okruženja zamijenjenim sa s2). Na primjer, nakon izvršenja naredbi

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

varijabla b će pohraniti niz "199456" . Ako parametar s2 nije naveden, tada će se podniz s1 ukloniti iz izlaznog niza, tj. nakon izvršenja naredbe

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

varijabla b će pohraniti niz "1456" .

Operacije s varijablama kao s brojevima

Kada je omogućena poboljšana obrada naredbi (zadani način rada u sustavu Windows XP), moguće je tretirati vrijednosti varijabli okruženja kao brojeve i izvoditi aritmetičke izračune na njima. Da biste to učinili, koristite naredbu SET s prekidačem /A. Navedimo primjer skupna datoteka add.bat, zbrajanje dvaju brojeva zadanih kao parametri naredbeni redak, i prikazivanje dobivenog iznosa na ekranu:

@ECHO OFF REM Varijabla M će pohraniti zbroj SET /A M=%1+%2 ECHO Zbroj %1 i %2 jednak je %M% REM Izbrišite varijablu M SET M=

Lokalne promjene varijable

Sve promjene koje napravite na varijablama okoline u naredbenoj datoteci pomoću naredbe SET ostaju postojane nakon što datoteka izađe, ali su učinkovite samo unutar trenutnog naredbenog prozora. Također je moguće lokalizirati promjene varijabli okruženja unutar batch datoteke, odnosno automatski vratiti vrijednosti svih varijabli kakve su bile prije pokretanja datoteke. Za to se koriste dvije naredbe: SETLOCAL i ENDLOCAL. Naredba SETLOCAL određuje početak područja lokalne instalacije varijable okoline. Drugim riječima, promjene okruženja napravljene nakon pokretanja SETLOCAL-a bit će lokalne za trenutnu batch datoteku. Svaka naredba SETLOCAL mora imati odgovarajuću naredbu ENDLOCAL za vraćanje prethodnih vrijednosti varijable okruženja. Promjene okruženja napravljene nakon izvršenja naredbe ENDLOCAL više nisu lokalne za trenutnu batch datoteku; njihove prethodne vrijednosti neće biti vraćene nakon završetka izvršavanja ove datoteke.

Ponekad je potrebno formirati varijabla datum-vrijeme V cmd/bat skripte prozori onako kako nam treba, a ne kako nam operativni sustav daje.

Na primjer, za dodavanje ovih podataka u datoteku dnevnika, za snimanje vremena ili datuma događaja, stvorite datoteku s nazivom koji bi trebao sadržavati podatke o datumu ili vremenu (dan, mjesec, godina, sat, minute, sekunde, milisekunde. ) Nikad se ne zna koji su naši zadaci... Upotrijebimo svoju maštu :)

U sljedećem primjeru vidimo raščlambu varijabli prema obrascima koji su nam potrebni.

h- sat 2 znamenke (odnosno, sat će biti upisan sljedeći obrazac - 01, 02, ..., 09, ... , 12, ... 24)

m - minute 2 znaka

s - sekunde 2 znaka

ms - milisekunde 2 znamenke, iz nekog razloga od 0 do 99

dd - znakovi 2. dana

mm - znakovi za mjesec 2

yyyy - godina 4 znamenke

Primjer korištenja varijabli %DATUM% I %VRIJEME% u skriptama cmd / šišmiš Windows:

@echo isključen
postavi h=%TIME:~0.2%
postavljeno m=%VRIJEME:~3,2%
postaviti s=%TIME:~6.2%
postavi ms=%TIME:~9.2%
postavi curtime=%h%:%m%:%s%:%ms%
postavi dd=%DATE:~0.2%
postavi mm=%DATUM:~3,2%
postavi gggg=%DATUM:~6,4%
postavi curdate=%dd%-%mm%-%yyyy%
postavi curdatetime=%curdate% %curdate%

echo Trenutno vrijeme je %curdatetime%

U nekim verzijama Windows format datum i vrijeme izdavanja su drugačiji, dakle ovaj scenarij može raditi točno onako kako nam je potrebno.

U teoriji, možete uzeti dijelove bilo koje varijable na sličan način, poanta je da je format ovdje ovakav:

Prva znamenka nakon: ~ je broj znaka od kojeg počinjemo uzimati vrijednost, druga znamenka je koliko znakova treba uhvatiti.

Dakle, ispada da za naše potrebe možemo uzeti bilo koji dio bilo koje varijable Windows okruženja koja nam je dostupna.

Znam sljedeće varijable čije vrijednosti možemo dobiti:

Ime
Opis
PROFIL SVIH KORISNIKA Vraća položaj profila "Svi korisnici".
PODACI APLIKACIJE Vraća zadanu lokaciju za podatke aplikacije.
CD Označava put trenutna mapa. Identično naredbi CD bez argumenata.
CMDCMDLINE Točna naredba korištena za pokretanje trenutnog cmd.exe.
CMDEXTVERSION verzija trenutnih proširenja procesora naredbi.
CommonProgramFiles Lokacija direktorija "Common Files" (obično %ProgramFiles%\Common Files)
NAZIV RAČUNALA naziv računala
COMSPEC put do izvršne datoteke ljuske
DATUM Vraća trenutni datum. Koristi isti format kao naredba date /t. Stvoreno naredbom Cmd.exe.
ERRORLEVEL Vraća kod pogreške zadnje korištene naredbe. Što znači, ne jednaka nuli, obično označava da postoji greška.
KUĆNI POGON Vraća naziv lokalnog pogona radna stanica povezan s korisničkim matičnim imenikom. Postavite na temelju lokacije glavnog imenika. Korisnikov matični direktorij naveden je u dodatku " Lokalni korisnici i grupe."
HOMEPATH Povratak puni put u korisnički matični imenik. Postavite na temelju lokacije glavnog imenika. Korisnikov matični direktorij naveden je u dodatku Lokalni korisnici i grupe.
HOMESHARE Vraća mrežni put do korisničkog dijeljenog matičnog direktorija. Postavite na temelju lokacije glavnog imenika. Korisnikov matični direktorij naveden je u dodatku Lokalni korisnici i grupe.
LOGONSERVER naziv kontrolera domene koji se koristi za autorizaciju trenutnog korisnika
BROJ_PROCESORA broj procesora u sustavu
OS naziv operativnog sustava. Windows XP i Windows 2000 pojavljuju se kao Windows_NT.
STAZA Određuje put pretraživanja za izvršne datoteke.
PATHEXT Vraća popis ekstenzija datoteka koje operativni sustav smatra izvršnima.
PROCESOR_ARHITEKTURA arhitektura procesora
IDENTIFIKATOR_PROCESORA opis procesora
RAZINA_PROCESORA broj modela procesora
REVIZIJA_PROCESORA revizija procesora
PROGRAMSKE DATOTEKE način da Mapa programa Datoteke
POTAKNUTI Vraća opcije naredbenog retka za trenutni tumač. Stvoreno naredbom Cmd.exe.
SLUČAJNO nasumični decimalni broj od 0 do 32767. Generirano pomoću Cmd.exe
SESSIONNAME Vrsta sesije. Zadana vrijednost je "Konzola"
SYSTEMDRIVE disk na kojem se nalazi Korijenska mapa Windows
SYSTEMROOT Putanja korijenske mape sustava Windows
TEMP ili TMP Vraća zadane privremene mape koje koriste aplikacije koje su dostupne prijavljenim korisnicima. Neke aplikacije zahtijevaju varijablu TEMP, druge zahtijevaju varijablu TMP. Potencijalno TEMP i TMP mogu ukazivati ​​na različite direktorije, ali obično su isti.
VRIJEME Vraća trenutno vrijeme. Koristi isti format kao naredba time /t. Stvoreno naredbom Cmd.exe.
KORISNIČKA DOMENA naziv domene kojoj trenutni korisnik pripada
KORISNIČKO IME trenutno korisničko ime
KORISNIČKI PROFIL put do profila trenutnog korisnika
VJETAR direktorij u kojem je instaliran Windows

0.00 (1 )

Opći pristup.

Naredbene datoteke su tekstualne datoteke s produžetkom šišmiš ili cmd, čije linije predstavljaju naredbe ili nazive izvršnih datoteka. Kada pokrenete batch datoteku, kontrolu preuzima naredbeni procesor operativnog sustava (često se naziva i tumač naredbi), koji sekvencijalno čita i tumači retke u batch datoteci. Za Windows9X to je učinjeno naredba.com, za WinNT/2K/XP - cmd.exe. Linije skupne datoteke mogu sadržavati naredbe iz samog procesora naredbi (FOR, GOTO, IF itd.) ili nazive izvršnih modula (net.exe, regedit.exe, win.com itd.). Na operativnim sustavima WinNT/2K/XP možete dobiti kratka informacija prema sastavu naredbi pomoću naredbenog retka:

ili posebnom naredbom:

POMOĆ Ime naredbe

Za prikaz teksta pomoći ne na zaslonu, već u datoteci, možete koristiti izlazno preusmjeravanje . Kada koristite naredbeni redak, standardni uređaj Ulazni uređaj je tipkovnica, a izlazni uređaj je zaslon, no ti se uređaji mogu ponovno mapirati pomoću znakova za preusmjeravanje

< - preusmjeravanje unosa

> - preusmjeravanje izlaza (ili > > - preusmjeravanje na postojeću datoteku, kada se izlazni podaci dodaju na kraj datoteke.)

Za izlaz toka podataka naredbePOMOZITEu datoteci help.txt naredbeni redak će biti sljedeći:

POMOĆ > pomoć.txt

Za prikaz pomoći za naredbu GOTO u datoteci goto.txt:

POMOĆ GOTO > goto.txt

Korištenje varijabli okruženja.

U batch datotekama možete, i često trebate, koristiti varijable okoline - varijable čije vrijednosti karakteriziraju okruženje u kojem se izvršava naredba ili batch datoteka. Vrijednosti varijabli okoline generiraju se kada se OS podigne i kada se korisnik registrira u sustavu, a mogu se postaviti i pomoću naredbeSET, čiji je format:

SET [varijabla=[string]]

varijabla Naziv varijable okoline.

crta Niz znakova dodijeljen navedenoj varijabli.

Na primjer, naredbeni redak

SET mynane=Vasja

će dodati varijablu myname koja ima vrijednost Vasya.

Možete dobiti vrijednost varijable u programima i skupnim datotekama korištenjem njenog imena okruženog znakovima postotka ( %) . Na primjer naredba

prikazat će riječ vrijeme i naredbu

prikazat će vrijednost vremenske varijable, koja uzima vrijednost trenutnog vremena.

I naredbeni redak

SET PATH=C:myprog;%path%

će dodati na put pretraživanja izvršni programi, opisan vrijednošću varijable PATH, direktorij C:myprog

Izvođenje naredbe SET bez parametara uzrokuje prikaz trenutnih vrijednosti varijabli na ekranu, u obliku:

NUMBER_OF_PROCESSORS=1 - broj procesora

OS=Windows_NT - vrsta OS-a

Path=E:WINDOWSsystem32;E:WINDOWS;E:Program FilesFar - put traženja izvršnih datoteka.

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH - ekstenzije za izvršne datoteke.

PROCESSOR_ARCHITECTURE=x86 - arhitektura procesora.

PROCESSOR_IDENTIFIER=x86 Family 6 Model 8 Korak 1, AuthenticAMD - identifikator procesora.

PROCESSOR_LEVEL=6 - razina procesora (broj modela).

PROCESSOR_REVISION=0801 - verzija procesora.

ProgramFiles=E:Program Files - put do mape "Program Files".

PROMPT=$P$G - format odzivnika naredbenog retka $P - staza za trenutni direktorij $G - znak ">".

SystemDrive=E: - slovo pogona sustava.

SystemRoot=E:WINDOWS - direktorij Windows OS-a.

Vrijednosti nekih varijabli ne vraća naredba SET. Ovo su varijable čije se vrijednosti dinamički mijenjaju:

%CD% - Uzima vrijednost niza trenutnog imenika.

%DATE% - Prihvaća vrijednost trenutni datum.

%TIME% - Prihvaća trenutnu vrijednost vremena.

%RANDOM% - Prihvaća vrijednost slučajnog decimalnog broja u rasponu 1 -32767.

%ERRORLEVEL% - Prihvaća trenutnu vrijednost izlaznog koda zadatka ERRORLEVEL

%CMDEXTVERSION% - Uzima vrijednost verzije procesora naredbi CMD.EXE za proširenu obradu naredbi.

%CMDCMDLINE% - Uzima vrijednost linije koja je pozvala ljusku.

Za pregled vrijednosti varijable možete koristiti naredbeni redak:

ECHO %varijabla%

Ulazni parametri za batch datoteku.

Moguće je proslijediti parametre naredbenog retka u naredbenu datoteku i koristiti njihove vrijednosti u izjavama u samoj naredbenoj datoteci.

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

U samoj batch datoteci, prvi parametar će biti dostupan kao varijabla %1 , drugi - %2 i tako dalje. Sam naziv batch datoteke dostupan je kao varijabla %0 . Na primjer, kreirajmo batch datoteku čiji će zadatak biti prikazati vrijednosti unesenih parametara na ekranu. Obično je naredba koja se koristi za prikaz teksta

JEKA< текст >

Međutim, ako se tekst zamijeni s %1, vraća se prvi parametar, s %2 - drugi, itd.

Napravite datoteku parm.bat sa sljedećim sadržajem:

echo Prvi parametar=%1

echo Drugi parametar=%2

echo Treći parametar = %3

i pokrenite ga sljedećom naredbom:

parm.bat PRVA sekunda “dvije riječi”

nakon što ga izvršite, shvatit ćete kako radi i da parametri s razmacima moraju biti zatvoreni u dvostruki navodnici. Kako bi obrađeni naredbeni procesor linije nisu bile prikazane na ekranu, možete koristiti naredbuJEKA ISKLJUČENA, stavljajući ga u prvi redak batch datoteke. Da bi linija u batch datoteci bila zanemarena od strane ljuske, postavite je na početak retkaR.E.M.< пробел > . Na ovaj način možete postaviti komentare, koji su često korisni u velikim paketnim datotekama:

rem ECHO OFF isključuje način prikaza sadržaja redaka naredbene datoteke na ekranu

REM će samo prikazati rezultat njihovog izvršenja.

echo Prvi parametar=%1

echo Drugi parametar=%2

echo Treći parametar = %3

Pokušajte zamijeniti ECHO OFF sa @ECHO OFF - rezultat govori sam za sebe. Redak koji isključuje izlazni način više se ne prikazuje na ekranu.

Prijelazi i oznake.

U batch datotekama možete koristiti naredbe uvjetnog skoka koje mijenjaju logiku svog rada ovisno o ispunjenju određenih uvjeta. Kako bismo ilustrirali upotrebu uvjetnih grananja, stvorimo paketnu datoteku čija će svrha biti dodijeliti unaprijed određeno slovo pogona prijenosni medij, koji će se koristiti kao flash diskovi. Uvjeti su sljedeći - postoje 2 flash pogona, od kojih bi jedan trebao biti vidljiv u Exploreru kao pogon X:, a drugi kao pogon Y:, bez obzira na koji USB priključak su spojeni. Pretpostavit ćemo da pravi kotači može se povezati kao F: ili G: Identificirat ćemo diskove po prisutnosti datoteke s određenim imenom (bolje je učiniti takvu datoteku skrivenom u korijenskom direktoriju i nazvati je neuobičajeno):

Flashd1.let - na prvom disku

Flashd2.let - na drugom

Oni. Svrha skupne datoteke je provjeriti prisutnost izmjenjivi diskovi F: I G: datoteke Flashd1.let ili Flashd2.let i, ovisno o tome koji je prisutan, dodijelite slovo pogona X: ili Y:

Za traženje datoteke na disku koristite naredbuAKO POSTOJI:

AKO POSTOJI naredba za naziv datoteke

Najlakši način da ga koristite kao naredbu jeSUBST, koji odgovara nazivu pogona i direktoriju.

SUBST X: C: - stvara virtualni disk X:, čiji će sadržaj biti korijenski direktorij pogona C:

Napravite paketnu datoteku setXY.bat sa sljedećim redovima:

Nakon izvršavanja takve datoteke, imat ćete pogone X: i Y: Ali ako ponovno pokrenete takvu datoteku, naredba SUBST prikazat će poruku o pogrešci - nakon svega, pogoni X: i Y: već postoje.

Preporučljivo je zaobići izvršavanje SUBST-a ako su virtualni diskovi X: i Y: već stvoreni (ili ih izbrisati pomoću SUBST-a s parametrom -d prije montiranja). Izmijenite batch datoteku pomoćuIĆI- prijenos kontrole na liniju skupne datoteke prema naljepnici.

Oznaka GOTO

Oznaka mora biti u zasebnom retku i započeti dvotočkom. Izmijenimo našu skupnu datoteku kako ne bismo dobivali poruke o pogrešci:

REM ako X ne postoji - onda idite na oznaku SETX

AKO NE POSTOJI X: GOTO SETX

REM ako X postoji: - prijeđimo na provjeru prisutnosti Y:

AKO POSTOJI G:flashd1.let SUBST X: G:

AKO POSTOJI F:flashd1.let SUBST X: F:

REM ako Y: postoji - dovršite batch datoteku.

AKO POSTOJI Y: IDITE NA IZLAZ

AKO POSTOJI G:flashd2.let SUBST Y: G:

AKO POSTOJI F:flashd2.let SUBST Y: F:

REM izlaz iz batch datoteke

Poruka o pogrešci SUBST je nestala. Znakovi grešaka prilikom izvršavanja naredbi mogu se pratiti u samoj naredbenoj datoteci analizom varijableERRORLEVEL, čija se vrijednost formira tijekom izvođenja većine programa. ERRORLEVEL je 0 ako je program završio bez grešaka i 1 ako je došlo do greške. Mogu postojati i druge vrijednosti ako su navedene u programu koji se izvršava.

Također možete koristiti batch datoteku kao naredbu u retku u batch datoteci. Štoviše, za prijenos i povratak natrag na točku izvršenja pozivne batch datoteke koristi se naredbaPOZIV. Kreirajmo naredbenu datoteku test.bat sa sljedećim sadržajem:

ECHO Poziv 1.bat

ECHO Povratak.

I 1.bat datoteka koja sadrži naredbuPAUZA,obustava izvršenja batch datoteke dok se ne pritisne bilo koja tipka.

Prilikom izvršavanja test.bat, na ekranu će se prikazati poruka

Poziv 1.bat

a upravljanje će dobiti 1.bat s naredbom za pauzu. Nakon pritiska tipke na tipkovnici, kontrola će biti dana naredbenom retku "ECHO Return." i to će biti prikazano na ekranu

Ako uklonite CALL iz test.bat, tada se neće izvršiti povratak iz datoteke 1.bat. Usput, prijenosom kontrole na batch datoteku, možete je organizirati u petlju. Pokušajte dodati sljedeći redak na kraj test.bat datoteke:

Možete izaći iz petlje batch datoteke pritiskom na kombinaciju CTRL-Break. Moguće je koristiti naredbu CALL za pozivanje procedure unutar batch datoteke. U ovom slučaju ime se ne koristi kao argument vanjska datoteka, i oznaka:
....
poziv:proc1
....
:proc1
....
Izlaz
....

Stvaranje datoteka.

U sustavu Windows ne postoji posebna naredba za stvaranje datoteke, ali možete jednostavno učiniti bez nje na nekoliko načina:

Kopiranje iz konzole u datoteku

COPY CON myfile.txt

Kada se ova naredba izvrši, podaci s tipkovnice (CON uređaja) bit će zapisani u datoteku myfile.txt. Pritisnite F6 ili CTRL-Z kombinacije dovršit će izlaz.

Preusmjeravanje izlaza

ECHO 1 > moja datoteka.txt

Pokretanje ove naredbe stvorit će datoteku myfile.txt koja sadrži znak "1"

Kombinacija preusmjeravanja ulaza i izlaza:

COPY CON > moja datoteka.txt< xyz

Prilikom izvođenja ove naredbe, kao i u prvom slučaju, koristi se kopiranje s konzole u datoteku, ali umjesto unosa s tipkovnice koristi se unos s nepostojećeg uređaja xyz. Sustav će prikazati poruku da takav uređaj ne postoji, ali će prazna datoteka myfile.txt biti uspješno kreirana.
Vrlo jednostavna opcija je kopiranje s fiktivnog uređaja s imenom nula podnijeti.
kopiraj null myfile.txt

Ako često trebate stvarati prazne datoteke, možete pripremiti vlastitu skupnu datoteku (na primjer - newfile.bat ili, još bolje, - nf.bat), i nazvati stvorena datoteka proslijedite ga kao parametar pri pokretanju.

Sadržaj datoteke:

Stavite ovu batch datoteku imenik sustava(C:windowssystem32 ili bilo koji drugi pronađen u stazama pretraživanja PATH).

Naredbeni redak:

nova datoteka.bat moja datoteka.txt

Ili

nf.bat moja datoteka.txt

Ili
nf moja datoteka.txt

Evo vašeg tima nf za stvaranje prazna datoteka na naredbenoj liniji.

Dodjeljivanje istog slova pogona izmjenjivom pogonu.

Izazov je da prijenosni USB Disk (flash disk) uvijek je bio dostupan pod istim slovom, bez obzira na kojem se računalu koristio ili kako je bio povezan. Da bismo ga riješili, koristit ćemo naredbu SUBST već spomenutu gore. Odaberimo željeno slovo za prijenosni disk, na primjer - X. Naziv diska s kojeg je pokrenuta batch datoteka dostupan je kao varijabla %~d0. Stvorite paketnu datoteku sa sljedećim sadržajem:
@echo isključen
subst X: %~d0
što znači stvoriti virtualni disk X:, koji je povezan s fizički disk, odakle je pokrenuta batch datoteka.
Dodatni uvid u vrijednosti zamjene za varijablu %0 može se dobiti iz sljedeće batch datoteke:

@echo isključen
OBRADA ODJEKA DATOTEKE - %0
ECHO Datum/vrijeme kreiranja/modifikacije batch datoteke - %~t0
Putanja skupne datoteke ECHO - "%~f0"
ECHO disk s naredbenom datotekom - %~d0
ECHO Direktorij paketne datoteke - "%~p0"
ECHO Naziv paketne datoteke - %~n0
ECHO Batch file ekstenzija - %~x0
ECHO Kratko ime i ekstenzija - %~s0
ECHO Atributi paketne datoteke - %~a0
ECHO Veličina paketne datoteke - %~z0

Stvaranje generacija arhiva na temelju datuma i vremena.

Idemo riješiti sljedeći problem - moramo napraviti arhivu datoteka koja se nalazi u direktoriju C:Program FilesFAR. Ime arhivska datoteka treba se sastojati od trenutnog vremena (sati.minute.sekunde - HH.MM.SS.rar), i treba ga smjestiti u novi katalog, čiji se naziv mora sastojati od tekućeg datuma (dan.mjesec.godina - DD.MM.GGGG). Za arhiviranje ćemo koristiti RAR arhiver. Format pokretanja za izradu arhive:

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

a- naredba za stvaranje arhive.
-r- ključ koji određuje arhiviranje poddirektorija (jer postoje poddirektorije u izvornoj mapi).

Dakle, da biste riješili problem, morate ispravno stvoriti imena i staze za RAR. Za to ćemo koristiti sljedeće faktore:

  • U batch datotekama možete pristupiti trenutnom datumu i trenutnom vremenu - varijablama %DATE% i %TIME%
  • U batch datotekama možete kreirati privremene varijable pomoću naredbe SET.
  • Vrijednost privremenih varijabli može se formirati na temelju %DATE% i %TIME% izostavljanjem i (ili) zamjenom njihovih dijelova pomoću iste naredbe SET.

    Datum dobiven iz varijable %DATE% sa standardnim regionalnim postavkama izgleda ovako:
    Pon 21.01.2005- Dan u tjednu (2 znaka) - Razmak - datum (10 znakova)
    Na primjer, kreirajmo imenik pomoću naredbe MD< имя каталога >.
    Kreiramo privremenu varijablu VDATE u memoriji i dodijelimo joj vrijednost varijable okoline DATE, bez prva 3 znaka - 20.01.2005.:

    Postavi VDATE=%datum:~3%

    Napravite direktorij na disku C:, čije je ime = trenutni datum iz varijable VDATE:

    MD C:\%VDATE%
    Nakon izvršavanja ove naredbe, direktorij pod nazivom 01/20/2005 bit će kreiran na pogonu C:

    Vrijeme dobiveno iz varijable %TIME%:
    14:30:59.93 - Sati, minute, sekunde, stotinke sekunde.
    Stotinke su možda nepotrebne u nazivu arhivske datoteke. Napravite privremenu varijablu VTIME i dodijelite joj trenutno vrijeme bez zadnja 3 znaka
    postavi VTIME=%vrijeme:~0,-3%
    Sada je VTIME = 14:30:59, ali se znak ":" ne može koristiti u nazivu datoteke, pa ćemo ga zamijeniti točkom.
    postavi VTIME=%VTIME::=.%
    Varijabla VTIME će uzeti vrijednost 14.30.59 za naziv datoteke koji će biti dovoljan.

    Pokrenimo arhivar:

    Sada možete stvoriti skupnu datoteku sa sadržajem:

    Postavi VDATE=%datum:~3%
    md c:\%VDATE%
    postavi VTIME=%vrijeme:~0,-3%
    postavi VTIME=%VTIME::=.%
    rar a -r C:\%VDATE%\%VTIME%.rar "C:Programske datoteke daleko*.*"

    Takva skupna datoteka može se izvršiti putem automatskog učitavanja ili kao dio skripte, kada se korisnik prijavi u domenu ili korištenjem planera u određeno vrijeme, a uvijek ćete imati dostupne arhive kritičnih podataka prema vremenu.

    Izrada arhiva pomoću varijabli korisničkog profila.

    Ova paketna datoteka stvara arhive sadržaja mape "Moji dokumenti" korisnika Win2K/XP, smještajući ih u direktorije
    C:ARHIVMoji dokumentiKorisničko imeDatumVrijeme

    Koriste se varijable USERPROFILE, USERNAME, WINDIR, tako da ova batch datoteka neće raditi u WIN9X. (Iako, ako želite, možete umetnuti naredbe u autoexec.bat za postavljanje vrijednosti ovih varijabli i korištenje u verziji za jednog korisnika bez gotovo ikakvih promjena). Sadržaj paketne datoteke je komentiran i ne bi trebao izazvati velike poteškoće ako razumijete prethodni primjer:

    @echo isključen
    rem Postavlja FROM varijablu - odakle uzeti podatke za arhiviranje
    postavite FROM=%USERPROFILE%Moji dokumenti
    rem Postavlja varijablu TO - gdje smjestiti arhive
    postavi TO=C:arhivMoji dokumenti\%USERNAME%
    rem Kreirajmo imenik održavanja
    md "%TO%"
    rem Formirajmo ime poddirektorija od trenutnog datuma
    sačuvaj trenutni datum sa zadanim postavkama za Win2K - pon 25.4.2005
    rem trenutni datum sa zadanim postavkama za WinXP - 25.04.2005
    rem Od sadašnjeg datuma formirat ćemo naziv poddirektorija - 25.04
    rem Standardno Windir za WinXP je C:WINDOWS, a za Win2K - C:WINNT
    IF /I %Windir% == C:WINNT GOTO Win2K
    postavi vdate=%DATE:~0.-5%
    IDITE NA SetFileName
    :Win2K
    postavi vdate=%DATE:~3.-5%
    rem Kreirajmo naziv arhivske datoteke iz trenutnog vremena - 12:00:00.99
    rem ćemo odbaciti stotinke sekunde i zamijeniti simbol: sa simbolom. Rezultat - 12.00.00
    :SetFileName
    postavi vtime=%TIME:~0,-3%
    postavi vtime=%vtime::=.%
    rem Stvorite poddirektorij za arhivsku datoteku
    md "%TO%\%VDATE%"
    rem Naredba za arhiviranje. Prekidač -r potreban je za arhiviranje s podmapama
    rem opcija za ARJ arhiver: arj a -r "%TO%\%VDATE%\%VTIME%.arj" "%FROM%*.*"
    rem Prilikom korištenja RAR arhiver:
    rar a -r "%DO%\%VDATE%\%VTIME%.rar" "%FROM%*.*"

    Izvršite naredbe prema rasporedu.

    U WIN2K/XP postoji uslužni program naredbenog retkaNA,omogućujući vam da izvršite naredbu ili batch datoteku u navedeno vrijeme na lokalnom ili udaljeno računalo. Za korištenje AT naredbe mora biti pokrenut servis Task Scheduler (obično se pokreće prema zadanim postavkama tijekom instalacije sustava).

    AT [\naziv računala] [ [kod] | /DELETE ]

    U vrijeme [\ime računala].

    [ /SVAKI:dan[,...] | /SLJEDEĆI:dan[,...]] "naredba"

    \naziv računala Naziv udaljenog računala. Ako je ovaj parametar izostavljen,

    koristi se lokalno računalo.

    kodirati Redni broj planiranog zadatka. Označava ako trebate otkazati već zakazani zadatak pomoću tipke /izbrisati.

    /izbrisati Otkažite planirani zadatak. Ako je kod zadatka izostavljen,

    sve zadatke predviđene za navedeno

    Računalo.

    /Da Otkažite zahtjev za potvrdu kada otkažete sve

    planirane zadatke.

    vrijeme Vrijeme je za pokretanje naredbe.

    /interaktivan Dopuštanje interakcije zadataka s korisnikom,

    rad na računalu kada započne zadatak. Zadaci pokrenuti bez ovog ključa nevidljivi su korisniku računala.

    /svaki dan[,...] Zadatak se pokreće na navedene dane u tjednu ili

    mjesec. Ako je datum izostavljen, koristi se tekući dan

    /sljedeći dan[,...] Zadatak će se pokrenuti sljedećeg navedenog dana u tjednu

    (na primjer sljedeći četvrtak). Ako je datum izostavljen,

    Koristi se tekući dan u mjesecu.

    "tim" Naziv naredbe ili skupne datoteke.

    Primjeri korištenja:

    Analog "budilice" - skočni prozori s tekstom koji podsjeća na trenutni ili navedenom korisniku o potrebi da se nešto poduzme. Za slanje poruke korisniku koristimo uslužni programNET.EXE

    U 13:50 net.exe pošalji * Vrijeme je za kavu

    U 17:50 net.exe korisniku šalje vrijeme za odlazak kući

    NA \SERVERU 13:45 net.exe poslati Morate ponovno pokrenuti poslužitelj

    Pogledajte popis zakazanih zadataka:

    Brisanje već zakazanih zadataka:

    U 3 /DELETE- brisanje zadatka broj 3

    NA /DELETE /YES- brisanje svih zadataka

    “Upravljačka ploča” - “Planirani zadaci” omogućuju pregled, promjenu i brisanje onih koje je izradio tim NA zadaci.

    Zaustavljanje i pokretanje sistemskih usluga.

    Za zaustavljanje i pokretanje Win2K/XP usluga iz naredbenog retka koristite naredbu NET.EXE

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

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

    Moguće je koristiti i kratko i puno ime (“Dnscache” je kratko ime, “DNS klijent” je puno ime usluge). Nazivi usluga koji sadrže razmake nalaze se u dvostrukim navodnicima. Primjer ponovnog pokretanja usluge “DNS Client”.

    net stop "DNS klijent"

    net start "DNS klijent"

    Isto, koristeći kratki naziv:

    net stop Dnscache

    net start Dnscache

    Puni naziv usluge može se kopirati iz “Usluge” -< Имя службы >- “Svojstva” - “Ime za prikaz”

    Za upravljanje uslugama mnogo je praktičnije koristiti uslužni program PsService.exe iz uslužnog programa PsTools ne zahtijeva instalaciju i radi na bilo kojem OS-u Windows. Osim pokretanja i zaustavljanja usluge, omogućuje vam traženje određene usluge na računalima lokalna mreža, ispitati status i konfiguraciju usluge, promijeniti vrstu pokretanja, pauzirati uslugu, nastaviti, ponovno pokrenuti.

    Za rad usluge sustava u sustavu Windows XP možete koristiti uslužni program sc.exe, koji vam omogućuje ne samo da zaustavite / pokrenete uslugu, već i ispitate njezin status, parametre pokretanja i rada, promijenite konfiguraciju, a također radite ne samo sa uslugama sustava, već i s upravljačkim programima. Ako imate prava, možete upravljati uslugama ne samo na lokalnom računalu, već i na udaljenom računalu. Primjeri:
    sc.exe zaustavi DNSCache- zaustaviti DNSCache uslugu na lokalnom računalu.
    sc\192.168.0.1 upit DNSCache- ispitivanje statusa usluge DNSCache na računalu s IP adresom 192.168.0.1
    sc\COMP pokrenite DNSCache pokrenite DNSCache servis na COMP računalu
    Pomoć pri radu s uslužnim programom možete dobiti unosom:
    sc/?

    Prikaz vrijednosti varijable ERRORLEVEL.

    Ova jednostavna paketna datoteka prikazat će vrijednost varijabla ERRORLEVEL na određenoj naredbenoj liniji. Prvo provjerava prisutnost barem jednog ulaznog parametra, a ako nijedan nije dan, izdaje se poruka o pogrešci i dolazi do izlaza. Ako je naveden barem jedan parametar, tada ulazni parametri smatraju se naredbenim redom i izvršavaju se, a vrijednost ERRORLEVEL se vraća pomoću naredbe ECHO. Sadržaj datoteke (nazvao sam je echoEL.bat):

    @echo isključen
    if "%1" NEQ "" GOTO PARMOK
    ECHO Morate postaviti naredbeni redak za definiranje ERRORLEVEL
    Izlaz
    :PARMOK
    %1 %2 %3 %4 %5 %6 %7 %8
    ECHO %1 %2 %3 %4 %5 %6 %7 %8 ERRORLEVEL=%ERRORLEVEL%

    Primjeri pokretanja:
    echoEL.bat NETO UDIO
    - izvršit će se naredba NET SHARE (dati popis zajedničkih mrežnih resursa) i izdat će se kod ERRORLEVEL
    echoEL.bat NET SHARE X"="C:
    - izvršit će se naredba NET SHARE X:=C: (kreirajte dijeljeni mrežni resurs s imenom X i stazom do korijenskog direktorija pogona C:) Imajte na umu da je simbol = unutar dvostrukih navodnika.
    Gore navedene opcije postavljaju ispravan naredbeni redak. Ali pokušajte postaviti pogrešan parametar na NET.EXE ili nepostojeću naredbu i vidjet ćete koju vrijednost će uzeti ERRORLEVEL. I MOLIMO VAS IMAJTE U OBZIR da se naredbeni redak zapravo IZVRŠAVA i, na primjer, opcija “echoEL.bat format A:” započet će formatiranje diskete u pogonu A:.

    Dijalog s korisnikom

    Za dijalog s korisnikom možete koristiti naredbu:
    SET /P< имя переменной >=< текст >
    kada se izvrši, na zaslonu se prikazuje tekstualna poruka < текст >i očekuje se tekst odgovora. Primjer - zatražimo lozinku i dodijelimo njenu vrijednost varijabli "pset":

    Postavi /p pset="Unesite lozinku - "
    echo Lozinka je - %pset%

    Hendikep ovu metodu je nemogućnost nastavka izvršavanja batch datoteke bez odgovora korisnika, pa se vrlo često umjesto set koriste programi trećih strana. Jedan od njih - IZBOR.COM Preuzmi (1,7kb).
    CHOICE daje korisniku tekstualnu poruku i čeka da korisnik odabere jednu od ponuđenih opcija odgovora (pritiske tipki na tipkovnici). Na temelju rezultata selekcije formira se varijabla ERRORLEVEL čija je vrijednost jednaka rednom broju selekcije. Standardno postoje dvije opcije - Y ili N. Ako je odgovor Y - tada ERRORLEVEL=1, ako je N - tada ERRORLEVEL=2. Možete koristiti više od 2 opcije odabira i moguće je postaviti zadani odabir kada je korisnik na Određeno vrijeme Nisam pritisnuo niti jednu tipku. Format naredbenog retka:

    CHOICE izbori] c,nn]
    /C[:]choices - definira valjane izbore. Ako nije navedeno - YN
    /N - ne prikazuju opcije odabira.
    /S - mala slova i velika slova su različiti.
    /T[:]c,nn - Zadani odabir je "c" nakon "nn" sekundi
    text - izlaz tekstualnog niza kao zahtjeva

    Kreirajmo skupnu datoteku koja demonstrira upotrebu CHOICE. Reagirat će na pritisak tipki "1", "2", 3" i "0". Kada pritisnete "0", završava, a kada pritisnete ostatak, šalje se poruka korisniku. Ako ništa nije pritisnut unutar 10 sekundi, završava.

    @JEKA ISKLJUČENA
    :IZBOR
    IZBOR /C:1230 /T:0.10 Vaša opcija
    IF %ERRORLEVEL% EQU 4 GOTO EXIT
    echo Vaš izbor=%ERRORLEVEL%
    KRENI NA IZBOR
    :IZLAZ

    Sada, koristeći CHOICE možete kreirati batch datoteke, čiju logiku može definirati korisnik.

    Kašnjenja u batch datotekama

    Jednom davno, još u DOS-u, zgodna naredba SLEEP se koristila za organiziranje čekanja u naredbenoj datoteci, ali je onda iz nekog razloga migrirala iz standardne instalacije Set prozora u dodatnom paketu resursa. Možete ga jednostavno kopirati odande u direktorij system32 i koristiti u svojim batch datotekama.

    : SLEEP N - gdje je N broj sekundi za odgodu.

    Ako Resource Kit nije pri ruci, možete upotrijebiti prethodno razmatranu naredbu CHOISE bez izlaza teksta i s automatskim generiranjem odgovora u nn sekundi (1-99):

    Choice.com /T:y,10 /N - odgoda za 10 sekundi

    Univerzalnija metoda temelji se na pinganju povratnog sučelja potrebnim brojem paketa. Ping za sučelje povratne petlje (naziv glavnog računala je localhost ili IP adresa 127.0.0.1) izvršava se bez pravi prijenos podataka, tj. gotovo trenutno, a interval između pingova je 1 sekunda. Određivanjem broja pingova pomoću prekidača "-n" možete dobiti odgodu od n sekundi:

    Ping 127.0.0.1 -n 30 > nul - dat će odgodu od 30 sekundi

    Potražite računala na kojima je pokrenuta aplikacija

    Za implementaciju ove skripte koristite pomoćne programe iz paketa PSTools(Kratki opis). Kreirajmo batch datoteku koja pretražuje lokalnu mrežu za računalima koja pokreću program, čiji je naziv (početni dio imena) naveden kao parametar pri pokretanju, na primjer, game . Ako se otkrije, poruka će biti poslana na računalo ADMINCOMP i otkrivena aplikacija će se prisilno zatvoriti. Za pretraživanje ćemo koristiti pomoćni program Pslist.exe i analizirati njegov povratni kod. Vrijednost varijable ERRORLEVEL jednaka nuli znači da je uslužni program otkrio proces na udaljenom računalu koji zadovoljava uvjete pretraživanja. Postavit ćemo naziv procesa za pretraživanje kao parametar prilikom pokretanja batch datoteke. Imenujmo našu skupnu datoteku psl.šišmiš. Izvođenje s parametrom izgledat će ovako:
    igra psl.bat
    Prvo trebamo provjeriti je li parametar naveden u naredbenoj liniji pri pokretanju, a ako nije naveden, izdat ćemo poruku korisniku i završiti izvršenje. Ako je parametar naveden, idemo na oznaku "PARMOK":
    @echo isključen
    if "%1" NEQ "" GOTO PARMOK
    ECHO Morate navesti naziv procesa za pretraživanje
    Izlaz
    :PARMOK
    Sada moramo osigurati dosljedno generiranje IP adresa računala za PSlist naredbeni redak. Najlakši način da to učinite je dodjeljivanjem privremene varijable okruženja (koja vrijedi samo za vrijeme trajanja naredbene datoteke) vrijednosti konstantne komponente adrese (na primjer, 192.168.0.) i izračunate vrijednosti dio niskog reda (na primjer, u rasponu 1-254). Na primjer, pretpostavit ćemo da trebamo skenirati računala u rasponu adresa:
    192.168.0.1 - 192.168.0.30:
    postavite IPTMP=192.168.0. - viši dio adrese
    set /A IPLAST=1 - niski dio. Prekidač /A znači izračunati numerički izraz
    postavite IPFULL=%IPTMP%%IPLAST% - vrijednost pune IP adrese.
    Naredbeni redak za PSlist izgledat će ovako:
    pslist\%IPFULL%%1
    Sada sve što preostaje je ciklički pokrenuti PSlist, dodajući jedan nižem dijelu adrese u svakom ciklusu dok njegova vrijednost ne dosegne 30 i analizirati vrijednost ERRORLEVEL nakon izvođenja. Za analizu rezultata izvršit ćemo prijelaz naredbom:
    GOTO REZULT%ERRORLEVEL%
    pružajući prijelaz na oznaku REZULT0 kada se detektira proces i na REZULT1
    2013-08-25 14:35:35: Članci: Informacijska sigurnost: Softver. Je li ti se svidjelo?
  • U ovom članku:

    • Definiranje varijabli
    • Varijable naredbenog retka (parametri poziva bat datoteke)
    • IF uvjetni operator
    • Funkcije
    • Korištenje povratnih vrijednosti (obrada izlaznog koda)

    Definiranje varijabli

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

    Naredba SET je proširenje sposobnosti operacijskog sustava da manipulira parametrima. Određuje varijablu čija je vrijednost zamijenjena njezinim imenom kad god se to ime koristi između znakova postotka. Dakle, ako je dana (varijabla koju zahtijevaju mnoge igre koje koriste zvučnu karticu računala):

    SET BLASTER=A220 I5 D1 P330

    tada kada koristite sljedeću konstrukciju u batch datoteci:

    ECHO %BLASTER%

    Na ekranu će se prikazati "A220 I5 D1 P330". Varijable definirane pomoću naredbe SET nazivaju se varijablama okruženja i vidljive su nakon izvođenja sve dok se DOS ponovno ne pokrene (osim ako se ručno ne promijeni u memoriji). To jest, može se koristiti iz jedne skupne datoteke ili programa nakon što je specificiran u drugoj. Najpoznatija je varijabla PATH, koja je skup putanja za brza pretraga datoteke. Postavlja se u datoteci autoexec.bat.

    Varijable naredbenog retka
    (parametri za pozivanje bat datoteke)

    %<цифра 0-9>

    Kao iu svakom drugom jeziku, u jeziku batch datoteke moguće je koristiti varijable primljene kao parametre bat datoteke.

    Može postojati ukupno 10 istovremeno postojećih nezavisnih varijabli. Za pisanje složeni programi ovo je ipak prilično malo za redovnog radaČesto je dovoljno 3-4. Vrijednost varijable jednaka je vrijednosti odgovarajućeg parametra iz naredbenog retka. Varijabla %0 sadržavat će naziv .bat datoteke i, ako ste ga naveli, put do nje. To jest, ako ste pokrenuli datoteku abc.bat sa sljedećim parametrima:

    abc.bat a bc def

    tada će varijabla %0 sadržavati vrijednost abc.bat , %1 će sadržavati vrijednost a , %2 će sadržavati bc , a %3 će sadržavati def . Ovo se svojstvo naširoko koristi za stvaranje raznovrsnih skupnih datoteka kada se radi o operacijama koje se ponavljaju.

    Da biste dobili više od 10 varijabli iz naredbenog retka, možete koristiti naredbu SHIFT.

    Naredba SHIFT omogućuje korištenje više od 10 parametara naredbenog retka. Međutim, odgovarajući raniji parametri su izgubljeni. Drugim riječima, naredba SHIFT pomiče sve vrijednosti varijabli jedan korak ulijevo. To jest, varijabla %0 sadržavat će vrijednost prethodno sadržanu u varijabli %1, a varijabla %1 će sadržavati vrijednost varijable %2 prije pomaka. Međutim, ovu operaciju je ireverzibilna, odnosno nemoguće je pomaknuti varijable unatrag.

    IF uvjetni operator

    srećom, tumač naredbi cmd.exe u modernim Windowsima 2000 i novijim podržava blokove naredbi u konstrukcijama grananja, eliminirajući potrebu za korištenjem IF-ova s ​​oznakama. Blokovi naredbi su u zagradama. Izgleda ovako (imitirajući stil uvlačenja C/C++):

    ako uvjet (

    Rem naredbe grane 'then'

    Rem...

    ) inače (

    Rem naredbe grane 'else'

    Rem...

    Konkretan primjer koristi:

    @echo isključen

    postavite BUILDMODE=%1

    if "%BUILDMODE%" == "" (

    Echo FAIL: potreban je argument ^(--debug, --release^)

    Izlaz /b 1

    rem Uklonite sve crtice iz argumenta radi pojednostavljenja obrade

    postavi BUILDMODE=%BUILDMODE:-=%

    if "%BUILDMODE%" == "debug" (

    Postavite CCFLAGS=/Od /MDd /Z7

    ) inače (

    Postavite CCFLAGS=/O2 /MD

    Po mom mišljenju, s tim je sasvim moguće živjeti. No, kao i uvijek, život nije tako jednostavan kao što se čini. Postoji jedan problem. Varijable koje se koriste u then i else blokovima proširuju se prije nego što blokovi počnu izvršavati, a ne tijekom izvršenja. U gornjem primjeru to ne uzrokuje probleme, ali u sljedećem hoće:

    if "%BUILDMODE%" == "debug" (

    Echo INFO: Postavljanje načina otklanjanja pogrešaka okruženja

    Postavite OPTFLAGS=/Od

    Postavite CCFLAGS=%OPTFLAGS% /MDd /Z7

    ) inače (

    Echo INFO: Postavljanje načina otpuštanja okruženja

    Postavite OPTFLAGS=/O2

    Postavite CCFLAGS=%OPTFLAGS% /MD

    Kvaka je u tome što će se u oba bloka zamjena varijable OPTFLAGS dogoditi prije nego što se promijeni tijekom izvođenja tog bloka. Sukladno tome, CCFLAGS će biti ispunjen vrijednošću koju je OPTFLAGS imao u vrijeme početka izvođenja ovog if bloka.

    Ovaj problem je riješen korištenjem odgođene ekspanzije varijable. Varijable sadržane u !…! umjesto %...% , njihova će se značenja otkriti tek u trenutku izravne uporabe. Ovaj način rada je prema zadanim postavkama onemogućen. Možete ga omogućiti korištenjem /V:ON prekidača prilikom pozivanja cmd.exe ili korištenjem naredbe:

    u tekstu same bat datoteke. Druga metoda mi se čini prikladnijom - nije baš cool zahtijevati od nekoga da pokrene vašu skriptu s određenim parametrom.

    Uz to, prethodni "pogrešni" primjer mogao bi se ispraviti ovako:

    setlocal enablelateyeexpansion

    if "%BUILDMODE%" == "debug" (

    Echo INFO: Postavljanje okruženja načina otklanjanja pogrešaka

    Postavite OPTFLAGS=/Od

    Postavite CCFLAGS=!OPTFLAGS! /MDd /Z7

    ) inače (

    Echo INFO: Postavljanje okruženja načina otpuštanja

    Postavite OPTFLAGS=/O2

    Postavite CCFLAGS=!OPTFLAGS! /DOKTOR MEDICINE

    Sada je ovo gotovo potpun if-then-else blok. Skoro, jer ako naiđete na zatvarajuću zagradu u jednoj od echo naredbi, trebate je izbjeći znakom ^, inače će se parser zbuniti...

    Ali u svakom slučaju, ovo je puno bolje od sulude količine oznaka i prijelaza.

    Funkcije

    Je li moguće stvoriti funkciju u bat datoteci? Da, možete. Štoviše, ponekad je čak i potrebno. Istina, ove se funkcije mogu uvjetno nazvati.

    Postoji posebna sintaksa za naredbu poziva, koja vam omogućuje da odete do oznake u istoj bat datoteci, pamteći mjesto odakle je ovaj poziv upućen:

    argumenti call:label

    Funkcija se vraća naredbom:

    izlaz /b [neobavezni povratni kod]

    Ključ /b je ovdje vrlo važan: bez njega nećete izaći iz funkcije, već iz skripte općenito.

    Za detalje upišite u naredbeni redak:

    poziv/?

    Izlaz /?

    Zanimljivo je da naredba poziva s ovom sintaksom podržava rekurzivne pozive s automatskim stvaranjem novog okvira za promjenjive argumente %0-%9. Ponekad ovo može biti korisno. Evo klasičnog primjera rekurzivnog faktorijelnog izračuna u jeziku naredbi:

    @echo isključen

    poziv: faktorijel %1

    echo %RESULT%

    Izlaz

    rem Funkcija za izračunavanje vrijednosti faktorijela

    rem Prijava:

    rem %1 Broj za koji želite izračunati faktorijel

    rem Izlaz:

    rem %RESULT% Faktorska vrijednost

    :faktorijel

    ako je %1 == 0 (

    Postavite REZULTAT=1

    Izlaz /b

    ako je %1 == 1 (

    Postavite REZULTAT=1

    Izlaz /b

    postavi /a PARAM=%1 - 1

    poziv:faktorij %PARAM%

    postavi /a REZULTAT=%1 * %RESULT%

    izlaz /b

    Primjer rada:

    > faktorijel.bat 10

    3628800

    Korištenje povratnih vrijednosti
    (izlazni kod programa za obradu)

    Kada bilo koji program završi svoj posao, vraća operacijskom sustavu svoj kod završetka. Uobičajeno je vraćanje nule nakon uspješnog završetka, inače kod pogreške. Ponekad, ili bolje rečeno često, program "namjerno" vraća vrijednost različitu od nule kako bi se neki detalji njegovog rada mogli "naučiti" u batch datoteci. Na primjer, program vraća kod pritisnute tipke, a .bat datoteka na temelju toga izvodi različite radnje.

    Kako batch datoteka može saznati izlazni kod izvršenog programa? Varijabla ključa ERRORLEVEL je predviđena za ovu svrhu.

    Primjer skupne datoteke s razinama pogreške:

    @JEKA ISKLJUČENA

    REM Pokrenite program prg1.exe

    PRG1.EXE

    REM Analiza koda završetka

    AKO ERRORLEVEL 2 GOTO FILENOTFOUND

    IF ERRORLEVEL 1 GOTO WRITEERROR

    AKO ERRORLEVEL 0 IDITE NA EXITOK

    IDI NA ONEEXIT

    :DATOTEKA NIJE PRONAĐENA

    ECHO Greška! Datoteka nije pronađena!

    IDI NA ONEEXIT

    :WRITEERROR

    ECHO Greška snimanja!

    IDI NA ONEEXIT

    :EXITOK

    ECHO Program je uspješno završen.

    IDI NA ONEEXIT

    :ONEIZLAZ

    Imajte na umu da analiza izlaznog koda ne počinje od nule, već od najveće moguće vrijednosti. Činjenica je da takva provjera znači: “ako je razina pogreške veća ili jednaka vrijednosti, tada...”. To jest, ako provjeravamo počevši od nule, bilo koja vrijednost će biti istinita u prvom retku, što je netočno.

    Ovo je najčešća greška u ovoj vrsti programa.

    Deklariranje vlastitih varijabli sastavni je dio gotovo svakog programskog jezika, pa se u jeziku vbscript one deklariraju pomoću ključne riječi dim, a u jscriptu se koristi ključna riječ var.

    Varijable naredbi Windows žice predstavljaju nešto drugačiji znak, ovdje ne možete deklarirati grupu cmd varijabli ili odmah dodijeliti vrijednosti nekoliko varijabli u naredbenom retku. Pogledajmo sljedeći redovi kodirati:

    echo % Var3% echo % VAR3% echo % vAr3%

    Jedna stvar koju vrijedi razmotriti je snimanje

    postaviti var1 =100
    postavite var1 = 100

    to nije ista stvar, odnosno u prvom slučaju stvaramo cmd varijablu "var1", au drugom - "var1". Slična je situacija i s dodjeljivanjem vrijednosti, pa pripazite na prostor!!!

    Vidimo da pomoću funkcije možemo prikazati vrijednost varijable Jeka, prilažemo ga u simbol "%" za postaviti– jednostavno zapišemo njegovo ime; također vrijedi uzeti u obzir da je svim varijablama dodijeljen tip niza.

    Ako trčite cmd naredba set, koji navodi sve varijable i njihove vrijednosti u trenutna sesija, vidjet ćete da su novostvorene cmd varijable i . Moći ćemo im pristupiti tijekom cijele sesije.

    Da biste izbrisali sadržaj varijabli u naredbenom retku sustava Windows, samo trebate dodijeliti praznu vrijednost:

    jednostavno će ispisati redak %Var3% i naredbu

    U ovom smo primjeru izbjegli znakove & i ^, čime smo dodijelili fraze:

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

    Vrijedno je napomenuti da ako pokušamo prikazati vrijednosti ovih varijabli pomoću cmd funkcije set, onda neće biti problema, ali ako koristimo funkciju echo, dobit ćemo potpuno drugačiji rezultat od onoga što smo očekivali. Dakle, kada pokušate pokrenuti sljedeću naredbu:

    Sada kada izvršavate kod:

    echo %var4% echo %var5%

    sve će dobro proći.

    Jasno je da cmd varijable stvorene u trenutnom prozoru naredbenog retka nisu dostupne drugim procesima, ali je moguće postaviti još veća ograničenja.

    Što pitati lokalno područje vidljivost, koristi se blok POSTAVITE LOKALNO...ENDLOKALNO. Sve cmd varijable Windows naredbenog retka deklarirane u sredini ovog bloka neće biti vidljive izvan njega. Otvorite editor (ja koristim editor Notepad++, budući da odmah ističe kod), i upišite sljedeće retke koda u njega:

    Vidimo da smo prvo deklarirali var1 i dodijelili mu vrijednost 0, zatim smo opet deklarirali varijablu s istim imenom, ali u bloku POSTAVITE LOKALNO...ENDLOKALNO. Skripta ispisuje vrijednost lokalne i globalne var1. Posebno sam koristio latinične znakove tako da ako se nešto dogodi, nećete dobiti nadriliječnike.