Cum să eliminați o variabilă setată pe linia de comandă. Clasificarea variabilelor de mediu

02/12/15 21.1K

De ce există un asemenea haos în lume? Da, pentru că administratorul sistemului nostru a uitat să-și îndeplinească atribuțiile. Sau pur și simplu am pierdut lista de comenzi cmd din lumea noastră. Deși aceasta este o privire oarecum originală asupra ordinii existente a lucrurilor, ea reflectă totuși o parte din adevărul de care avem nevoie: folosind linia de comandă, puteți aduce cu ușurință ordine pe computer:

Care este linia de comandă

Linia de comandă este cel mai simplu instrument de gestionare a sistemului de operare al computerului. Controlul are loc folosind un număr de comenzi rezervate și seturi de caractere tastatura text fara mouse ( V sistem de operare Windows).

Pe sistemele bazate pe UNIX, puteți folosi mouse-ul când lucrați cu linia de comandă.

Unele comenzi ne-au venit din MS-DOS. Linia de comandă se mai numește și consolă. Este folosit nu numai pentru administrarea sistemului de operare, ci și pentru administrare programe regulate. Cel mai adesea, cele mai rar utilizate comenzi sunt incluse în acest set de comenzi.

Avantaj aplicații cmd comenzile principale este că consumă o cantitate minimă de resurse de sistem. Și acest lucru este important când Situații de urgență, când toată puterea computerului este, într-un fel sau altul, implicată.

cmd implementează capacitatea de a executa și crea fișiere batch întregi, care sunt ordine anume executarea unui număr de comenzi (scripturi). Datorită acestui fapt, ele pot fi folosite pentru a automatiza anumite sarcini ( gestionarea contului, arhivarea datelor și multe altele).

Shell-ul de comandă Windows pentru manipularea și redirecționarea comenzilor către anumite utilitare și instrumente ale sistemului de operare este interpretul Cmd.exe. Încarcă consola și redirecționează comenzile într-un format pe care sistemul îl înțelege.

Lucrul cu linia de comandă în sistemul de operare Windows

Puteți apela consola în Windows în mai multe moduri:


Ambele metode implică rularea consolei ca utilizator curent. Adică cu toate drepturile și restricțiile care sunt impuse rolului său în sistemul de operare. Pentru lansați cmd cu drepturi de administrator, trebuie să selectați pictograma programului în meniul Start și în meniul contextual selectați elementul potrivit:


După ce rulați utilitarul, puteți obține informații generale despre comenzi și formatul de scriere a acestora în consolă. Pentru a face acest lucru, introduceți declarația de ajutor și apăsați „Enter”:

Comenzi de bază pentru lucrul cu fișiere și directoare

Comenzile cele mai des folosite sunt:

  • RENUMIRE – redenumirea directoarelor și fișierelor. Sintaxa comenzii:

RENUMIRE | REN [unitate/cale] fișier original/nume director | numele final al fișierului
Exemplu: RENUMIRE C:UsershomeDesktoptost.txt test.txt

  • DEL (ȘTERGERE) – folosit pentru a șterge numai fișiere, nu directoare. Sintaxa sa este:

DEL | ȘTERGE [metoda de procesare] [nume fișier]
Exemplu: Del C:UsershomeDesktoptest.txt/P

Prin metoda de procesare înțelegem un steag special care vă permite să implementați o anumită condiție atunci când ștergeți un fișier. În exemplul nostru, indicatorul „P” permite afișarea unui dialog de permisiuni pentru ștergerea fiecărui fișier:


Mai multe detalii despre valorile posibile ale parametrului „metoda de procesare” pot fi găsite în documentatie tehnica pe sistemul de operare Windows.

  • MD – vă permite să creați un folder pe calea specificată. Sintaxă:

MD [unitate:] [cale]
Exemplu:
MD C:UsershomeDesktoptest1test2

Exemplul va crea un subdosar test2 în folderul test1. Dacă unul dintre folderele rădăcină ale căii nu există, va fi creat și:

  • RD ( RMDIR) – ștergere folder specific sau toate directoarele din calea specificată. Sintaxă:

RD | RMDIR [cheie_proces] [unitate/cale]
Exemplu:
rmdir /s C:UsershomeDesktoptest1test2

Exemplul folosește steag-ul s, care va duce la ștergerea întregii ramuri a directoarelor specificate în cale. Prin urmare, nu ar trebui să-l utilizați inutil comanda rmdir cu această cheie de procesare.

În secțiunea următoare, vom arunca o privire mai atentă la comenzile de rețea cmd.

Comenzi pentru lucrul cu rețeaua

Linia de comandă vă permite să controlați nu numai Sistemul de fișiere PC-ul, dar și al lui oportunități de creare de rețele. Parte comenzi de rețea consola inclusa un numar mare de operatori să monitorizeze și să testeze rețeaua. Cele mai relevante dintre ele sunt:

  • ping – comanda este folosită pentru a monitoriza capabilitățile conexiune retea PC. La un computer la distanță un anumit număr de pachete este trimis și apoi trimis înapoi. Se ia în considerare timpul de transmisie al pachetelor și procentul de pierderi. Sintaxă:

ping [-t] [-a] [-n contor] [-l dimensiune] [-f] [-i TTL] [-v tip] [-r contor] [-s contor] [(-j list_gazdă | - k lista_noduri)] [-w interval] [nume_PC_țintă]

Exemplu de implementare a comenzii:
ping example.microsoft.com
ping –w 10000 192.168.239.132

În final exemplu cmd Comanda ping trimite o solicitare destinatarului cu adresa IP specificată. Intervalul de așteptare dintre pachete este de 10.000 (10 secunde). Implicit, acest parametru este setat la 4000:

  • tracert – folosit pentru a determina calea de rețea către o resursă specificată prin trimiterea unui mesaj ecou special prin protocol
  • ICMP (Control Message Protocol). După rularea comenzii cu parametri, este afișată o listă cu toate routerele prin care trece mesajul. Primul element din listă este primul router de pe partea resursei solicitate.

Sintaxa comenzii tracer cmd:
tracert [-d] [-h maximum_hop_number] [-j node_list] [-w interval] [target_resource_name]
Exemplu de implementare:
tracert -d -h 10 microsoft.com

Exemplul urmărește ruta către o resursă specificată. Acest lucru crește viteza operației datorită utilizării parametrului d, care împiedică comanda să încerce să obțină permisiunea de a citi adrese IP. Numărul de tranziții (sărituri) este limitat la 10 folosind valoarea stabilită parametrul h. În mod implicit, numărul de sărituri este 30:


oprire [(-l|-s|-r|-a)] [-f] [-m [\nume_PC]] [-t xx] [-c „mesaje”] [-d[u][p]: xx:aa]
Exemplu:
oprire /s /t 60 /f /l /m \191.162.1.53

PC-ul la distanță (m) cu adresa IP specificată (191.162.1.53) se va închide (s) după 60 de secunde (t). Acest lucru vă va forța să vă deconectați de la toate aplicațiile (f) și de la sesiunea utilizatorului curent (l).

Variabilele de mediu utilizate în fișierele batch (comandă) vă permit să evitați specificarea căi absolute la directoare. De exemplu, dacă nu știm scrisoarea dinainte disc de sistem, putem folosi întotdeauna o variabilă %systemdrive%, care returnează litera unității pe care este instalat sistemul de operare. De asemenea, variabilele sunt folosite pentru a optimiza codul - unui parametru repetat în mod repetat (de exemplu, o cheie de registry) i se poate atribui o variabilă scurtă și poate fi utilizată. Acest articol discută în detaliu diferite tehnici de lucru cu variabile, precum și modalități de modificare și de a crea noi variabile. Acum să vorbim despre totul în ordine.

Clasificarea variabilelor de mediu

rezumat

Echipă Shell Windows(cmd.exe) este destul Unealtă puternică lucrul cu sistemul. Fișierele batch pot automatiza o cantitate destul de mare de sarcini, motiv pentru care sunt adesea obișnuite instalare automată Windows. Utilizarea cu pricepere a variabilelor din fișierele batch vă permite să rezolvați o gamă largă de probleme. Lucrul cu shell-ul de comandă devine mai eficient și, în același timp, codul pentru fișierele batch este simplificat. Puteți găsi alte exemple de utilizare a variabilelor pe paginile site-ului sau forumului. Toate exemplele folosite în acest articol sunt preluate din scripturile participanților, pentru care le mulțumesc mult.

Terminologie

Shell de comandă- asta e separat software, care asigură comunicarea directă între utilizator și sistemul de operare. Text interfața cu utilizatorul linia de comandă oferă un mediu în care aplicațiile și utilitati Cu interfață text.

cmd.exe- un interpret de comandă pe care shell-ul de comandă al sistemului de operare Windows îl folosește pentru a traduce comanda introdusă într-un format ușor de înțeles pentru sistem.

Sesiune de echipă poate fi iniţiat fie prin lansare cmd.exe, și lansați fișier batch. Cu alte cuvinte, shell-ul de comandă curent este creat. În consecință, ieșirea din acest shell (de exemplu, finalizarea unui fișier batch) încheie sesiunea de comandă.

Sesiune utilizator (sesiunea utilizatorului) începe când utilizatorul se conectează (conectare) și se termină când utilizatorul se deconectează (deconectare).

    Echipa A STABILIT folosit pentru a vizualiza și schimba variabile de mediu mediu în Linie de comanda Windows. Variabilele de mediu sunt variabile ale căror valori acceptate caracterizează mediul în care se află programul curent- moduri fișiere de sistem, informații hardware, directoare de utilizatori etc. Valorile variabilelor de mediu sunt generate în timpul procesului pornire Windows, înregistrarea utilizatorului în sistem, la executarea proceselor individuale sau la utilizarea unei comenzi A STABILIT. Pentru a vizualiza valoarea asumată de o anumită variabilă, puteți folosi comanda:

SET variabila
SETĂ CALEA- afiseaza valoarea unei variabile CALE
Pentru a crea o variabilă nouă sau a modifica valoarea uneia existente, utilizați comanda:

SET variabilă=șir

variabil- Numele variabilei de mediu.
linia- Un șir de caractere atribuit variabilei specificate.

SET My Name=Vasya- setați valoarea unei variabile Numele meu

SET calea=C:\progs;%cale%- modificarea valorii unei variabile CALE prin adăugarea la începutul liniei C:\progs

Valoarea acceptată de variabilă este disponibilă pentru procesare în fișierele de comandă, folosind numele ei cuprins în semne procentuale - % . De exemplu, o comandă pentru afișarea textului pe afișajul ECHO sub forma:

data ECHO- va afișa cuvântul „data” și comanda
ECHO %date% va afișa valoarea variabilei Data, adică data curentaîn format de sistem de operare.

Echipă A STABILIT fără parametri este utilizat pentru a afișa valorile curente ale variabilelor de mediu.

ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Usr\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=TEST7
ComSpec=C:\windows\system32\cmd.exe
FP_NO_HOST_CHECK=NU
HOMEDRIVE=C:
HOMEPATH=\Utilizatori\Usr
LOCALAPPDATA=C:\Users\Usr\AppData\Local
LOGONSERVER=\\TEST7
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Cale=C:\windows\system32;C:\windows;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS; .VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 3 Step 4, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0304
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\windows\system32\Windows PowerShell\v1.0\Modules\
PUBLIC=C:\Utilizatori\Public
SystemDrive=C:
SystemRoot=C:\windows
TEMP=C:\Users\Usr\AppData\Local\Temp
TMP=C:\Users\Usr\AppData\Local\Temp
USERDOMAIN=test7
USERNAME=Ur
USERPROFILE=C:\Utilizatori\Usr
windir=C:\windows

Pe lângă variabilele afișate în listă la apelarea comenzii SET, există și altele ale căror valori se schimbă dinamic:

%CD%- ia valoarea directorului curent.
%DATA%- ia valoarea datei curente.
%TIMP%- ia valoarea timpului curent.
%ALEATORIU%- sens Număr aleatoriuîn intervalul între 0 și 32767.
%ERRORLEVEL%- valoarea curentă a ERRORLEVEL, o variabilă specială care este utilizată ca o indicație a rezultatului execuției programului.
%CMDEXTVERSION% Valoarea versiunii de procesare a comenzii extinse CMD.EXE.
%CMDCMDLINE%- se extinde la linia de comandă originală care a numit shell-ul.

Dacă specificați doar o parte a numelui atunci când apelați comanda SET, va fi afișată o listă de variabile ale căror nume încep cu șirul specificat. De exemplu:

SET U- va afișa valorile tuturor variabilelor ale căror nume încep cu „U”.

Comanda SET acceptă două comutatoare suplimentare:

SET /A expresie

SET /P variabilă=

Comutatorul /A specifică că șirul din dreapta semnului egal este o expresie numerică a cărei valoare este evaluată. Manipulatorul de expresii este foarte simplu și suportă urmatoarele operatii, enumerate în ordinea descrescătoare a priorității:

Când utilizați operatori logici sau binari, trebuie să includeți șirul expresiei între ghilimele. Orice șiruri nenumerice din expresie sunt tratate ca nume de variabile de mediu ale căror valori sunt convertite în formă numerică înainte de utilizare. Dacă o variabilă cu numele specificat nu este definită în sistem, o valoare nulă este înlocuită. Acest lucru vă permite să efectuați operatii aritmetice cu valori variabile de mediu, fără a fi nevoie să introduceți semnele % pentru a obține valorile. Dacă SET /A este apelat din linia de comandă mai degrabă decât dintr-un fișier batch, se tipărește valoarea finală a expresiei. Numele variabilei de mediu trebuie să apară în stânga oricărui operator de atribuire. Valori numerice sunt tratate ca zecimale, cu excepția cazului în care sunt precedate de un prefix:

0x- pentru numere hexazecimale
0 - Pentru numere octale.

Exemplu de utilizare a prefixelor:

SET /A REZ=0xA+012
ECHO %REZ%

În acest fișier batch, valoarea variabilei este REZ se calculează prin adăugarea numărului 10 reprezentat în hexazecimal (0xA) și a numărului 10 reprezentat în octal (012).

Comutatorul /P vă permite să setați valoarea unei variabile pentru șirul de intrare introdus de utilizator. Afișează promptul promptString specificat înainte de a citi șirul introdus. Promptul promptString poate fi gol. Această cheie vă permite să organizați un dialog cu utilizatorul într-un fișier batch:

@ECHO OPRIT
SET /P NAME=Introduceți numele de utilizator:
SET /P pass=Introduceți parola:
Nume utilizator ECHO - %NAME% , Parolă - %PASS%

În fișierele batch, destul de des trebuie să lucrați cu o parte din valoarea luată de o variabilă, pentru care utilizați valori de substituție:

variabilă:șir1=șir2- înlocuiește în valoarea primită a variabilei linia 1 pe randul 2

Următorul fișier batch folosește înlocuirea caracterului punct cu un caracter liniuță în valoarea variabilei corespunzătoare datei curente:

@ECHO OPRIT
setați tm=%DATE%
ECHO Data1 = %tm%
SET tm=%DATE:.=-%
ECHO Data2 = %tm%

Pentru a evidenția o parte din valoarea luată de o variabilă, se folosește următoarea construcție:

variabilă:~x,y- Unde X- numărul de caractere omise de la începutul rândului și y- numărul de caractere folosit ca valoare a variabilei.

Următorul exemplu utilizează afișarea orei curente fără secunde și fracțiuni de secunde (doar primele 5 caractere din valoarea standard a variabilei TIME):

@ECHO OPRIT
setați tm=%TIME%
ECHO Time1 = %tm%
SET tm=%TIME:~0,5%
ECHO Time2 = %tm%

Dacă valoarea y(lungimea) nu este specificată, apoi se utilizează valoarea variabilei rămase până la sfârșitul liniei. Dacă valoarea y este negativ, atunci se folosește o parte din șirul de valoare variabilă de la sfârșit. Exemplul anterior poate fi modificat pentru a specifica faptul că valoarea timpului primit este îndepărtată la 6 caractere de la sfârșit:

@ECHO OPRIT
setați tm=%TIME%
ECHO Time1 = %tm%
SET tm=%TIME:~0,-6%
ECHO Time2 = %tm%

Este posibil să se utilizeze numărul de sărituri nu este specificat și este utilizat un număr negativ, atunci valoarea primită va face parte din variabila de la sfârșitul liniei:

%PATH:~-10%- va extrage ultimele 10 caractere ale variabilei PATH

Valoare nulă poate fi omis, păstrând formatul de substituție:

%PATH:~0,-2% echivalent %PATH:~,-2%

Când se utilizează variabile de mediu în fișiere batch, există anumită limitare, asociată cu faptul că valoarea atribuită rămâne neschimbată atunci când este modificată în cadrul unui grup de comenzi specificate prin paranteze, de exemplu în comenzi DACĂ sau PENTRU. A ocoli această limitare lansarea este folosită procesor de comenzi cu parametrul /V:ON și în loc de semne de procente, pentru a obține valoarea variabilei primite, utilizați semne de exclamare. În plus, este posibil să se utilizeze lansare standard procesor de comenzi, dar cu activare locală din acest mod cu comanda:

Diferența dintre rezultatele utilizării valorilor variabile este demonstrată destul de clar de următorul fișier batch:


@ECHO OPRIT
set VAR=inainte
dacă „%VAR%” == „înainte” (
set VAR=după
dacă "!VAR!" == „după” @echo Cu semn procentual=%VAR% , Cu semn de întrebare=!VAR!

Echipă set VAR=după executat în interiorul unei subrutine delimitate de paranteze și, dacă comanda este eliminată Setlocal EnableDelayedExpansion sau a nu folosi pentru a obține valoarea unei variabile VAR semne de exclamare, valoarea acesteia va rămâne cea veche (ceea ce a fost setată înainte de a intra în subrutină). O problemă similară apare atunci când valoarea unei variabile este modificată în bucla de comandă. PENTRU. De exemplu, pentru a obține o listă de fișiere din directorul curent, un fișier batch ca acesta nu va funcționa:

setați LIST=
pentru %%i în (*) setați LIST=%LIST% %%i
eco %LIST%

Valoare variabilă LISTĂ nu vor fi modificate în interiorul buclei. Pentru ca acest lucru să se întâmple, fișierul batch trebuie modificat după cum urmează:

Setlocal EnableDelayedExpansion
setați LIST=
pentru %%i în (*) setați LIST=!LIST! %%i
eco %LIST%

Acum, valoarea variabilei LISTĂîn interiorul unei bucle PENTRU se va schimba, luând succesiv valorile numelor de fișiere separate prin spațiu ( setați LIST=!LIST! %%i)

Mediul shell cmd.exe este definit de variabile care controlează comportamentul shell-ului și al sistemului de operare.

Este posibil să se definească comportamentul mediului shell sau al întregului mediu al sistemului de operare folosind două tipuri de variabile de mediu: de sistem și locale.

Variabilele de mediu de sistem definesc comportamentul mediului global al sistemului de operare, iar variabilele de mediu locale definesc comportamentul mediului într-o anumită instanță a cmd.exe.

Variabilele de mediu ale sistemului sunt setate implicit în sistemul de operare și sunt disponibile pentru toată lumea procesele Windows, iar utilizatorii cu privilegii de administrator pot modifica aceste variabile. Aceste variabile sunt cel mai frecvent utilizate în scripturile de conectare.

Variabilele de mediu locale sunt disponibile atunci când utilizatorul pentru care au fost create este autentificat. Variabile locale din stupul de registru HKEY_CURRENT_USER sunt valabile numai pentru utilizatorul curent, dar definesc comportamentul mediului global al sistemului de operare.

Lista tipurilor de variabile în ordinea descrescătoare a priorității.

  1. Variabile de sistem încorporate
  2. Variabilele sistemului de stup de registru HKEY_LOCAL_MACHINE
  3. Variabilele locale ale stupului de registru HKEY_CURRENT_USER
  4. Toate variabilele de mediu și căile sunt listate în fișier Autoexec.bat.
  5. Toate variabilele de mediu și căile sunt specificate în scriptul de conectare (dacă există).
  6. Variabile utilizate în mod interactiv într-un script sau fișier batch

ÎN shell de comandă fiecare instanță a cmd.exe moștenește mediul său cerere părinteși în consecință, puteți modifica variabile în noul mediu cmd.exe, care nu va afecta mediul aplicației părinte.

Iată o listă de variabile de sistem și de mediu local pentru Windows XP.

Variabil

Descriere

%ALLUSERSPROFILE%

Local

Returnează plasarea profilului „Toți utilizatorii”.

Local

Returnează locația implicită pentru datele aplicației.

Local

Returnează calea către folderul curent.

Local

Returnează șirul de comandă care a fost folosit pentru a lansa această instanță a Cmd.exe.

Sistem

Returnează numărul versiunii extensiilor curente ale procesorului de comandă.

Sistem

Returnează numele computerului.

Sistem

Returnează calea către shell-ul de comandă care se execută.

Sistem

Returnează datele curente. Utilizează același format ca și comanda data/t. Creat de comanda Cmd.exe.

Sistem

Returnează codul de eroare al ultimei comenzi utilizate. Adică, nu egal cu zero, indică de obicei că există o eroare.

Sistem

Returnează numele unității locale stație de lucru asociat cu directorul principal al utilizatorului. Setați pe baza locației directorului principal. Directorul principal al utilizatorului este specificat în snap-in " Utilizatori localiși grupuri.”

Sistem

Returnează calea completă către directorul principal al utilizatorului. Setați pe baza locației directorului principal. Directorul principal al utilizatorului este specificat în snap-in-ul Utilizatori și grupuri locale.

Sistem

Returnează calea de rețea către directorul principal partajat al utilizatorului. Setați pe baza locației directorului principal. Directorul principal al utilizatorului este specificat în snap-in-ul Utilizatori și grupuri locale.

Local

Returnează numele controlerului de domeniu care a autentificat sesiunea curentă.

%NUMBER_OF_PROCESSORS%

Sistem

Specifică numărul de procesoare instalate pe computer.

Sistem

Returnează numele sistemului de operare. La folosind Windows Numele sistemului de operare 2000 apare ca Windows_NT.

Sistem

Specifică calea de căutare pentru fișierele executabile.

Sistem

Returnează o listă de extensii de fișiere care sunt considerate executabile de sistemul de operare.

%PROCESSOR_ARCHITECTURE%

Sistem

Returnează arhitectura procesorului. Valori: x86, IA64.

%PROCESSOR_IDENTFIER%

Sistem

Returnează o descriere a procesorului.

%PROCESSOR_LEVEL%

Sistem

Returnează numărul de model al procesorului instalat pe computer.

%PROCESSOR_REVISION%

Sistem

Returnează numărul de revizuire a procesorului.

Local

Returnează opțiunile liniei de comandă pentru interpretul curent. Creat de comanda Cmd.exe.

Sistem

Returnează arbitrar numar decimal de la 0 la 32767. Creat de comanda Cmd.exe.

Sistem

Returnează numele unității care conține directorul rădăcină Windows XP (adică directorul de sistem).

Sistem

Returnează locația directorului de sistem Windows XP.

Sistem și utilizator

Returnează folderele temporare implicite utilizate de aplicații care sunt accesibile utilizatorilor conectați. Unele aplicații necesită variabila TEMP, altele necesită variabila TMP.

Sistem

Se intoarce ora curentă. Utilizează același format ca și comanda timp/t. Creat de comanda Cmd.exe.

Local

Returnează numele domeniului care conține lista de conturi de utilizator.

Local

Returnează numele utilizatorului conectat.

Local

Returnează plasarea profilului pentru utilizatorul curent.

Sistem

Returnează locația directorului sistemului de operare.

În acest articol:

  • Definirea variabilelor
  • Variabile de linie de comandă (parametri de apel pentru fișierul bat)
  • IF Operator Condițional
  • Funcții
  • Utilizarea valorilor de returnare (codul de ieșire de procesare)

Definirea variabilelor

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

Declarația SET este o extensie a capacității sistemului de operare de a manipula parametrii. Specifică o variabilă a cărei valoare este înlocuită cu numele ei ori de câte ori acel nume este folosit între semnele procentuale. Deci, dacă este setată (o variabilă atât de multe jocuri care folosesc placa de sunet calculator):

SET BLASTER=A220 I5 D1 P330

atunci când utilizați următoarea construcție într-un fișier batch:

ECHO %BLASTER%

„A220 I5 D1 P330” va fi afișat pe ecran. Variabilele definite folosind instrucțiunea SET sunt numite variabile de mediu și sunt vizibile după execuție până când DOS este repornit (cu excepția cazului în care sunt modificate manual în memorie). Adică, poate fi folosit dintr-un fișier batch sau program după ce a fost specificat în altul. Cel mai faimos este variabila PATH, care este un set de căi pentru cautare rapida fișiere. Este setat în fișierul autoexec.bat.

Variabile de linie de comandă
(parametri pentru apelarea fișierului bat)

%<цифра 0-9>

Ca în orice limbă, în limba fișierului batch este posibilă utilizarea variabilelor primite ca parametri ai fișierului bat.

Pot exista un total de 10 variabile independente existente simultan. Pentru scris programe complexe acesta este destul de mic totuși pentru munca regulata Adesea 3-4 este suficient. Valoarea variabilei este egală cu valoarea parametrului corespunzător din linia de comandă. Variabila %0 va conține numele fișierului .bat și, dacă l-ați specificat, calea către acesta. Adică, dacă ați rulat fișierul abc.bat cu următorii parametri:

abc.bat a bc def

atunci variabila %0 va conține valoarea abc.bat , %1 va conține valoarea a , %2 va conține bc și %3 va conține def . Această proprietate este utilizată pe scară largă pentru a crea fișiere batch versatile atunci când aveți de-a face cu operațiuni repetitive.

Pentru a obține mai mult de 10 variabile din linia de comandă, puteți utiliza comanda SHIFT.

Comanda SHIFT vă permite să utilizați mai mult de 10 parametri de linie de comandă, însă, parametrii anteriori corespunzători se pierd. Cu alte cuvinte, comanda SHIFT mută toate valorile variabilelor cu un pas spre stânga. Adică, variabila %0 va conține valoarea conținută anterior în variabila %1, iar variabila %1 va conține valoarea variabilei %2 înainte de schimbare. In orice caz, această operațiune este ireversibilă, adică este imposibil să mutați variabilele înapoi.

IF Operator Condițional

Din fericire, interpret de comenzi cmd.exe în Windows 2000 modern și mai târziu acceptă blocuri de comandă în constructele de ramificare, eliminând nevoia de a utiliza FI-uri cu etichete. Blocurile de comandă sunt incluse în paranteze. Arată astfel (imitând stilul de indentare C/C++):

condiția dacă (

Rem Comenzile din ramura „atunci”.

Rem...

) altfel (

Comenzi Rem ale ramurii „altfel”.

Rem...

Exemplu concret utilizeaza:

@echo dezactivat

setați BUILDMODE=%1

dacă "%BUILDMODE%" == "" (

Echo FAIL: este necesar un argument ^(--debug, --release^)

Ieșire /b 1

rem Eliminați toate cratimele din argument pentru a simplifica procesarea

setați BUILDMODE=%BUILDMODE:-=%

dacă "%BUILDMODE%" == "depanare" (

Setați CCFLAGS=/Od /MDd /Z7

) altfel (

Setați CCFLAGS=/O2 /MD

După părerea mea, este foarte posibil să trăiești cu asta. Dar, ca întotdeauna, viața nu este atât de simplă pe cât pare. Există o problemă. Variabilele utilizate în blocurile then și else sunt extinse înainte ca blocurile să înceapă execuția, nu în timpul execuției. În exemplul dat, acest lucru nu provoacă probleme, dar în cele ce urmează va:

dacă "%BUILDMODE%" == "depanare" (

Echo INFO: Setarea modului de mediu de depanare

Setați OPTFLAGS=/Od

Setați CCFLAGS=%OPTFLAGS% /MDd /Z7

) altfel (

Echo INFO: Setarea modului de eliberare a mediului

Setați OPTFLAGS=/O2

Setați CCFLAGS=%OPTFLAGS% /MD

Problema este că în ambele blocuri, înlocuirea variabilei OPTFLAGS va avea loc înainte ca aceasta să fie schimbată în timpul execuției acelui bloc. În consecință, CCFLAGS va fi completat cu valoarea pe care o avea OPTFLAGS la momentul execuției acestui bloc dacă a început.

Această problemă este rezolvată prin utilizarea expansiunii variabile întârziate. Variabilele conținute în !…! în loc de %...% , semnificațiile lor vor fi dezvăluite doar în momentul utilizării directe. Acest mod dezactivat implicit. Îl puteți activa fie utilizând comutatorul /V:ON când apelați cmd.exe, fie utilizând comanda:

în textul fișierului bat în sine. A doua metodă mi se pare mai convenabilă - nu este foarte bine să ceri cuiva să ruleze scriptul cu un anumit parametru.

Acestea fiind spuse, exemplul anterior „greșit” ar putea fi corectat astfel:

setlocal enabledelayedexpansion

dacă "%BUILDMODE%" == "depanare" (

Echo INFO: Configurarea mediului în modul de depanare

Setați OPTFLAGS=/Od

Setați CCFLAGS=!OPTFLAGS! /MDd /Z7

) altfel (

Echo INFO: Configurarea modului de lansare a mediului

Setați OPTFLAGS=/O2

Setați CCFLAGS=!OPTFLAGS! /MD

Acum, acesta este aproape un bloc cu drepturi depline, dacă-atunci-altfel. Aproape, pentru că dacă într-una dintre comenzile echo întâlnești o închidere paranteze, atunci trebuie să-l scăpați cu un caracter ^, altfel analizatorul va deveni confuz...

Dar, în orice caz, acest lucru este mult mai bun decât numărul nebun de etichete și tranziții.

Funcții

Este posibil să creați o funcție într-un fișier bat? Da, poti. Mai mult, uneori chiar este necesar. Adevărat, acestea pot fi numite funcții condiționat.

Există o sintaxă specială pentru comanda de apel, care vă permite să mergeți la un marcaj din același fișier bat, amintindu-vă locul de unde a fost efectuat acest apel:

call:label argumente

Funcția este returnată cu comanda:

ieșire /b [cod de returnare opțional]

Tasta /b este foarte importantă aici: fără ea, veți ieși nu din funcție, ci din script în general.

Pentru detalii, tastați în linia de comandă:

apel/?

Ieșire /?

Interesant este că comanda de apel cu această sintaxă acceptă apeluri recursive cu crearea automată cadru nou pentru argumentele variabile %0-%9. Uneori, acest lucru poate fi util. Iată un exemplu clasic de calcul factorial recursiv în limbajul de comandă:

@echo dezactivat

apel:factorial %1

ecou %RESULT%

Ieșire

rem Funcția de calcul al valorii factoriale

Autentificare rem:

rem %1 Numărul pentru care doriți să calculați factorialul

Ieșire rem:

rem %RESULT% Valoare factorială

:factorial

dacă %1 == 0 (

Setați RESULT=1

Ieșire /b

dacă %1 == 1 (

Setați RESULT=1

Ieșire /b

setați /a PARAM=%1 - 1

apel:factorial %PARAM%

setați /a REZULTAT=%1 * %RESULT%

ieșire /b

Exemplu de lucru:

> factorial.bat 10

3628800

Utilizarea valorilor returnate
(procesează codul de ieșire al programului)

Când orice program își finalizează activitatea, acesta returnează codul său de terminare sistemului de operare. Este obișnuit să returnați zero după finalizarea cu succes, altfel un cod de eroare. Uneori, sau mai degrabă des, un program returnează „în mod deliberat” o valoare diferită de zero, astfel încât unele detalii ale funcționării sale să poată fi „învățate” în fișierul batch. De exemplu, programul returnează codul tastei apăsate, iar fișierul .bat efectuează diverse acțiuni pe baza acestuia.

Cum poate un fișier batch să afle codul de ieșire al programului executat? Variabila cheie ERRORLEVEL este furnizată în acest scop.

Exemplu de fișier batch cu niveluri de eroare:

@ECHO OPRIT

REM Rulați programul prg1.exe

PRG1.EXE

Analiza codului de completare REM

DACĂ NIVEL DE EROARE 2 GOTO FILENOTFOUND

DACĂ EROARELELEVEL 1 GOTO WRITEERROR

DACĂ NIVEL EROARE 0 GOTO EXITOK

GOTO ONEXIT

:FIȘIERUL NU A FOST GĂSIT

Eroare ECHO! Fișierul nu a fost găsit!

GOTO ONEXIT

:WRITEERROR

Eroare de înregistrare ECHO!

GOTO ONEXIT

:EXITOK

ECHO Programul a fost finalizat cu succes.

GOTO ONEXIT

:ONEXIT

Vă rugăm să rețineți că analiza codului de ieșire nu începe de la zero, ci de la valoarea maximă posibilă. Cert este că o astfel de verificare înseamnă: „dacă errorlevel este mai mare sau egal cu valoarea, atunci...”. Adică, dacă verificăm începând de la zero, orice valoare va fi adevărată pe prima linie, ceea ce este incorect.

Aceasta este cea mai frecventă greșeală în acest fel programe.