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:
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 naredbe
POMOZITEu 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 naredbu
JEKA 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 naredbu
AKO 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:
Datum dobiven iz varijable %DATE% sa standardnim regionalnim postavkama izgleda ovako: Postavi VDATE=%datum:~3% Napravite direktorij na disku C:, čije je ime = trenutni datum iz varijable VDATE: MD C:\%VDATE% Vrijeme dobiveno iz varijable %TIME%: Pokrenimo arhivar: Sada možete stvoriti skupnu datoteku sa sadržajem: Postavi VDATE=%datum:~3% 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.
Ova paketna datoteka stvara arhive sadržaja mape "Moji dokumenti" korisnika Win2K/XP, smještajući ih u direktorije |
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.