Bucla do while în fișierele batch. Fișierul echo există

pentru comandă ca buclă numerică

Comanda for vă permite să organizați execuția acțiunilor repetate de același tip. Îl puteți folosi pentru a afișa numerele de la unu la zece, așa cum se arată în lista următoare.

pentru /l %%i în (1,1,10) face eco %%i

Variabila i numit contor de bucle. Datorită sintaxei unice a comenzii pentru , numele contorului buclei trebuie să fie format dintr-o literă. Mai mult, dacă scriem un fișier batch, atunci trebuie să punem un semn de procent dublu în fața numelui contorului de bucle, dar dacă doar tastăm o comandă pe linia de comandă, atunci una singură.

Logica acestei comenzi este următoarea. După cuvântul din intervalul de schimbare a contorului buclei este indicat. În această versiune a comenzii, acesta este un triplu de numere: valoarea inițială a contorului, pasul de numărare, valoarea limită a contorului. Când executați o comandă, shell-ul va atribui mai întâi variabila i valoarea 1, iar apoi la fiecare pas al buclei o va crește cu 1 până când va depăși 10. Evident, vor fi zece astfel de pași. Dacă am fi specificat numărul 2 ca pas de numărare, bucla s-ar fi executat de cinci ori. La fiecare pas al buclei, corpul buclei scris după cuvânt este executat do . În exemplul dat, comanda este ecou , care afișează valoarea curentă a contorului buclei.

pentru ca comanda să itereze prin fișiere

De obicei, comanda for este folosită pentru a itera și procesa fișiere. Trebuie spus că în cazuri destul de simple, procesarea în bloc a fișierelor se realizează folosind caractere wildcard. Dacă vrem să înlocuim toate fișierele din directorul curent cu extensia.htm la .html , introducem comanda ren *.htm *.html . Dar dacă același lucru trebuie făcut nu într-un director, ci într-un arbore de directoare, atunci fără comandă pentru nu pot trece. Fișierul batch de mai jos efectuează această operație pentru toate fișierele htm dintr-un subdirector site-ul web directorul curent. Mai exact, în întregul arbore de directoare care se află în interiorul site-ului.

pentru /r site-ul %%i în (*.htm) do ren %%i %%~ni.html

Tasta /r indică necesitatea de a parcurge directorul site-ul web și toate interiorurile sale. Dacă nu îl specificați (dar atunci nu aveți voie să specificați un director), atunci vor fi procesate numai fișierele din directorul curent. Gama de valori pentru contorul de bucle în această versiune a comenzii este setul tuturor fișierelor cu extensia .htm situate în directorul (mai precis, arborele) site-ului. O intrare ciudată la prima vedere~ni înseamnă că din valoarea variabilei i Trebuie doar să selectați numele fișierului. Limbajul de comandă MS-DOS oferă mai mulți astfel de modificatori, de exemplu, scrierea~xi denotă extensia fișierului. Toți modificatorii sunt descriși în ajutorul comenzii pentru .

Corpul unei bucle poate consta din mai multe comenzi cuprinse între paranteze.

@echo dezactivat

pentru /r site-ul web %%i în (*.htm) do (

Rem Tipăriți numele fișierului

Eco %%i

Rem Redenumiți fișierul

Ren %%i %%~ni.html

Căutarea în directoare

Modul în care comanda for iterează peste fișierele dintr-un director, nu este capabilă să itereze peste directoarele din directorul dorit (adică vede doar fișierele). Trebuie să utilizați o altă sintaxă.

pentru /r „C:\test” /d %%i în (*) do (

Echo Numele folderului: %%i

Sau prin filtrarea ieșirii comenzii dir:

pentru /f "delims=" %%i în (dir /b /s /a:d "C:\test") face (

Echo Numele folderului: %%i

Copiați D:\filesKLIENT\Kontragent\111.grs „%%i”

În acest articol, ne vom uita la cum să folosim construcția for pe linia de comandă pentru a repeta peste valori și fișiere. Voi da toate exemplele din articol ținând cont de faptul că codul va fi executat în corpul scriptului, care, la rândul său, va fi lansat din consola liniei de comandă.

Personal, îl adaug mai întâi la variabila de mediu CALE calea către directorul în care se află scriptul:

După aceea, introdu pur și simplu numele scriptului în fereastra consolei, de exemplu, test.bat. Amintiți-vă că calea va fi stocată numai în variabila de mediu în fereastra curentă a promptului de comandă.

Linie de comandă pentru – iterează prin valori

Pentru a repeta peste valori, utilizați următoarea sintaxă:

pentru /L %%variabilă în (început, pas, sfârșit) do (operator)

Cheie /L indică faptul că datele sunt sortate, urmat de numele variabilei în care vor fi scrise aceste date. Trebuie să specificați trei parametri între paranteze, separați prin virgule:

  • început– valoarea initiala
  • pas– aici indicăm cât trebuie să creștem sau să micșorăm valoarea inițială la fiecare iterație. Adică, dacă parametrul conține un număr negativ, atunci va avea loc o scădere, altfel parametrul „start” va crește.
  • Sfârşit– aici trebuie să specificați valoarea finală, aceasta este cea care va determina dacă se încheie bucla sau nu. Adică, la fiecare iterație sunt comparați parametrii inițiali și finali.

Să ne uităm la acest exemplu:

@ echo off for / L %% B in (0 ,1 ,5 ) do echo %% B echo. pentru / L %% B în (5 ,-1 ,0 ) face eco %% B

Acest script folosește două linii de comandă pentru bucle, prima specifică intervalul de cifre de la 0 la 5 în trepte de 1, al doilea specifică intervalul de cifre de la 5 la 0 în trepte de -1. Adică ordine directă și inversă. Funcția ECHO va afișa conținutul variabilei B sub forma unei liste Comanda „echo”. introduceți o linie goală între liste.

Acum să încercăm să găsim suma numerelor de la 0 la 100:

@ echo off set summ =0 for / L %% B in (0 ,1 ,100 ) do set/ A summ+=%% B echo % summ% set summ =

Mai întâi dezactivăm ieșirea ecou. Apoi declarăm variabila sum folosind cuvântul cheie set și îi atribuim zero. Apoi, în bucla for, setăm valoarea inițială la 0, pasul la 1 și valoarea finală la 100. Însumarea are loc în linie set/A sum+=%%B, aici conținutul variabilei %%B va fi adăugat la conținutul variabilei sum. La final tipărim rezultatul final și eliminăm sum din mediu.

Acum să vedem cum ar arăta codul pentru a găsi factorialul 5:

@ echo off set fact =1 pentru / L %% B in (5 ,-1 ,1 ) do set/ A fact* =%% B echo % fact% set fact =

Sintaxa este aproape aceeași aici, cu excepția faptului că am specificat un pas negativ și am folosit operatorul *=.

Bine, acum să complicăm problema: găsiți suma numerelor de la 0 la 10, excluzând numerele 5, 7 și 9 din calcul:

@ echo off set summ =0 for / L %% B in (0 ,1 ,10 ) do (dacă „%%B” neq „5” (dacă „%%B” neq „7” (dacă „%%B”) " neq "9" set/ A summ+=%% B) ) ) echo % summ% set summ =

După cum puteți vedea, am folosit o declarație condițională if pentru a verifica condiția. Din păcate, nu există operatori logici precum „SAU” și „ȘI” pe linia de comandă, cum ar fi în limbile și, așa că a trebuit să creăm instrucțiuni if ​​imbricate. Drept urmare, am primit numărul 34. Acordați atenție și operatorului „ neq” – verificarea unei stări de tip „NU EGAL”.

Linie de comandă pentru – lucrul cu fișiere

Pentru a lucra cu fișiere în grupuri, utilizați următoarea linie de comandă pentru sintaxa buclei:

pentru % variabilă în (set de fișiere) do (operator)

Parametrul de bază aici este variabila file_set, care poate conține:

  • fișier separat, de exemplu my_file.txt
  • un grup de documente specificate printr-un șablon, de exemplu, *.txt
  • o listă de fișiere, separate prin spații, și fiecare element al listei poate conține, de asemenea, un model, de exemplu, my_file.txt *.doc my*.avi

Merită să luați în considerare faptul că, dacă nu specificați calea către fișier, căutarea va fi efectuată în directorul curent - în directorul din care este lansat scriptul.

Următorul exemplu scoate toate fișierele din directorul d:\work\ cu extensia .txt:

@ echo off pentru %% B în (d:\work\* .txt) do (echo %% B)

Aici B este o variabilă de inițializare la fiecare iterație i se va atribui calea, numele și extensia documentului text găsit, iar funcția ECHO va afișa imediat informațiile pe ecran. Apoi, din nou, variabilei B i se va da un nou nume și datele vor fi scoase din nou. Bucla în sine rulează până când sunt găsite toate valorile specificate în condiție.

Desigur, puteți seta o condiție pentru a afișa toate fișierele cu extensii, de exemplu, .txt, .avi și .pdf.

@ echo off set work_dir =d:\work for %% B in (% work_dir% \* .txt % work_dir% \* .avi % work_dir% \* .pdf) do (echo %% B) set work_dir =

În acest caz, variabila work_dir conține calea către folderul d:\work în linia de comandă pentru buclă, adăugăm extensiile necesare variabilei; La sfârșitul scriptului, variabila work_dir este ștearsă.

De asemenea, merită să înțelegeți că în loc de un operator (în acest caz ecou), puteți scrie mai multe, grupându-le cu simbolul &. Adică, acest ciclu vă permite să procesați mai multe fișiere dintr-o singură lovitură într-o manieră de grup. Nu uitați că atunci când formați un grup, acestea ar trebui să fie incluse în paranteze. De exemplu:

Puteți încerca să obțineți o listă cu numele fișierelor și dimensiunile acestora:

Echipă PENTRU este folosit pentru a executa comanda dată ca parametru pentru fiecare element din set. Fișierele, directoarele și seturile de șiruri de caractere pot fi folosite ca elemente.

Format linie de comandă:

FOR % variabilă IN (setată) DO comandă [parametri]

Parametri:

%variabilă- Parametru substituit cu o singură literă.

(kit)- Definește un set format din unul sau mai multe elemente procesate de comandă.

echipă- Comanda care trebuie executată pentru fiecare element al setului.

parametrii- Parametrii pentru comanda executata in raport cu elementele multimii.

În fișierele batch, comanda FOR este scrisă ca

%%variabilăîn loc de %variabilă. Numele variabilelor țin cont de majuscule (%i este diferit de %I).

Sunt acceptate și forme suplimentare ale comenzii FOR:

FOR /D % variabilă IN (setată) DO comandă [parametri]

Comutatorul /D specifică nume de directoare (nu nume de fișiere) ca un set.

FOR /R [[drive:]cale] %variabilă IN (set) DO comanda [parametri]

Comutatorul /R specifică execuția comenzii pentru directorul [drive:]path, precum și pentru toate subdirectoarele acestei căi. Dacă comutatorul /R nu este urmat de un nume de director, este utilizat directorul curent. Dacă setul este un singur punct (.), comanda listează pur și simplu arborele de director.

FOR /L % variabilă IN (start, step, end) Comanda DO [parametri]

Tasta /L specifică procesarea unui set de secvențe de numere cu un început, un sfârșit și un increment specificat. Astfel, mulțimea (1,1,5) este extinsă în (1 2 3 4 5), iar mulțimea (5,-1,1) - în (5 4 3 2 1)

FOR /F [„chei”] % variabilă IN (set de fișiere) DO comandă [opțiuni]

FOR /F [„opțiuni”] %variabilă IN („șir”) DO comandă [opțiuni]

FOR /F [„comutatoare”] %variabilă IN („comandă”) DO comandă [opțiuni]

Comutatorul /F specifică procesarea fișierelor, a valorilor șirurilor sau a ieșirii standard a unei alte comenzi. Un set de fișiere conține numele unuia sau mai multor fișiere care sunt deschise, citite și procesate pe rând.

Procesarea constă în citirea unui fișier, împărțirea acestuia în linii individuale de text și analizarea fiecărei linii în zero sau mai multe subșiruri. Apoi este apelat corpul buclei "for", timp în care fiecare subșir găsit este folosit ca valoare a unei variabile. În mod implicit, comutatorul /F extrage primul subșir separat de spațiu din fiecare linie a fiecărui fișier. Liniile goale din fișier sunt sărite. Parametrul opțional „keys” este folosit pentru a suprascrie regulile implicite de analizare. Este un șir între ghilimele care conține unul sau mai multe cuvinte cheie pentru a defini parametrii de analiză. Cuvinte cheie:

eol=personaj- semnul începutului unui comentariu la sfârșitul rândului (semnul sfârșitului datelor prelucrate ale rândului). Specificat ca un singur caracter.

skip=n- numărul de rânduri sărite în timpul procesării de la începutul fișierului.

delims=xxx- un set de separatoare între elementele de linie prelucrate. În mod implicit, spațiile și tabulatorii sunt folosite ca delimitatori. jetoane=x,y,m-n- numere de subșiruri din fiecare linie, trecute în corpul buclei „for” pentru fiecare iterație. De exemplu, pentru un fișier text obișnuit, subșirurile vor fi cuvinte, iar delimitatorii subșirurilor vor fi spații sau tab-uri. Când utilizați această tastă, sunt evidențiate nume de variabile suplimentare. Format m-n reprezintă un interval de subșiruri numerotate de la m la n. Dacă ultimul caracter din rând

folosireq- modul de procesare a cotațiilor. Un șir cuprins între ghilimele din spate este executat ca o comandă, un șir cuprins între ghilimele simple drepte este un șir de caractere, iar ghilimele duble pot fi folosite pentru a specifica numele fișierelor care conțin spații.

Un exemplu ilustrativ:

FOR /F "eol=; tokens=2,3* delims=, " %i în (myfile.txt) do @echo %i %j %k

Fișierul myfile.txt este analizat. Toate liniile care încep cu punct și virgulă (eol=;) sunt sărite. Al doilea și al treilea subșir din fiecare linie (tokens=2,3) sunt trecute în corpul buclei „for”, cu subșirurile separate prin virgule și/sau spații. În corpul buclei există o variabilă%i ia valoarea celui de-al doilea subșir,%j - al treilea, și%k

- întregul câmp rămas până la sfârșitul liniei după al treilea subșir. Numele fișierelor care conțin spații trebuie să fie cuprinse între ghilimele duble. Pentru a utiliza ghilimele duble, trebuie să utilizați opțiunea usebackq, altfel ghilimelele duble vor fi interpretate ca definind un șir literal de parsat. În corpul buclei există o variabilăÎn acest exemplu, variabila ia valoarea celui de-al doilea subșir, este declarat în mod explicit în instrucțiunea „for” și în variabile - al treilea, șiŞi m-n sunt declarate implicit folosind cheia m-n. Cheie vă permite să extrageți până la 26 de subșiruri dintr-o linie a unui fișier. Vă rugăm să rețineți că numele de variabile FOR sunt

Echipă o singură literă, este sensibil la majuscule și minuscule, deci nu pot fi active mai mult de 52 de variabile în același timp, fie explicit, fie implicit.

PENTRU /F poate fi folosit și pentru a procesa un șir specificat explicit, cuprins între ghilimele simple și dat ca parametru între paranteze. Acesta va fi analizat în același mod ca o singură linie citită din fișierul de intrare. Ieșirea (date de ieșire) unei alte comenzi poate fi, de asemenea, utilizată ca set procesat. În acest caz este folosit ca parametru între paranteze

sfoara in backticks

. Această linie este transmisă handler-ului de comandă copil CMD.EXE pentru execuție, iar rezultatul acestei comenzi este stocat în memorie și analizat ca și cum ar fi un fișier. Exemplu: FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i, Comanda rulează o singură literă SET ecou .

, afișând valorile variabilelor de mediu și comanda PENTRU le va lista folosind comanda

În echipă Este posibil să folosiți referințe la variabile. Sunt permise următoarele construcții sintactice:
%~I- ghilimelele din jur ("") sunt eliminate din variabila %I
%~fI- variabila %I este extinsă la numele complet al fișierului
%~dI- din variabila %I se extrage doar numele discului
%~pI- din variabila %I se extrage doar numele fisierului
%~xI- extensia numelui de fișier este extrasă din variabila %I
%~sI- calea rezultată conține doar nume scurte
%~aI- variabila %I este extinsă la atributele fișierului
%~tI- variabila %I este extinsă la data/ora fișierului
%~zI- variabila %I este extinsă la dimensiunea fișierului
%~$cale:I cale, și variabilă %I este înlocuit cu numele complet al primului fișier găsit. Dacă variabila cale nu este definit sau nu a fost găsit niciun fișier ca rezultat al căutării, atunci acest modificator este înlocuit cu un șir gol.

Când combinați mai multe afirmații, puteți obține următoarele rezultate:

~dpI- variabila I se extinde în numele și calea unității
~nxI- variabila I este extinsă în numele fișierului și extensia acestuia
~fsI- variabila I este extinsă la calea completă cu nume scurte
~dp$cale:I- caută prin directoare specificate în variabila de mediu cale, și variabilă eu se extinde în numele unității și calea către primul fișier găsit.
~ftzaI- variabila I este extinsă într-un șir similar cu cel produs de comanda DIR

În exemplele de mai sus variabilele eu este declarat în mod explicit în instrucțiunea „for” și în variabile cale poate fi înlocuit cu alte valori valide. Construcție sintactică cu simboluri ~ se termină cu un nume valid de variabilă pentru bucla FOR.

Când utilizați comanda PENTRUîn fișierele batch, dacă mai mult de o comandă trebuie executată într-o buclă, acestea sunt incluse în paranteze:

FOR %variabilă IN (set) DO (
comanda 1 [parametri]
echipa 2
. . .
)

@echo OFF
pentru /L %%I în (1,1,5) DO (
ecou FIRST%%I
ECHO LAST%%I
)

De obicei, în fișierele batch comanda PENTRU folosit nu numai pentru a analiza date, ci și pentru a le procesa, ceea ce necesită utilizarea de variabile în interiorul buclei PENTRU. Și aici apare o problemă - valorile variabilelor nu se schimbă, adică. ele nu pot fi utilizate între paranteze. Acest fenomen este cauzat nu de premise logice, ci doar de anumite caracteristici ale implementării procesorului de comenzi CMD.EXE, iar acest lucru trebuie luat în considerare la procesarea variabilelor din buclele de comandă FOR și IF. Cu alte cuvinte, utilizarea valorilor variabile în paranteze necesită schimbarea modului de interpretare implicit al shell-ului. Dezvoltatorii oferă posibilitatea de a lansa CMD.EXE cu parametrul /V:ON, care permite extinderea leneșă a variabilelor de mediu folosind caracterul semn de exclamare ( ! ) ca separator. Adică parametrul /V:ON permite utilizarea !var! ca valoare variabilă varîn timpul execuției în buclele de comandă PENTRU este declarat în mod explicit în instrucțiunea „for” și în variabile DACĂ. Dar, în practică, abilitatea de a activa local acest mod într-un fișier de comandă cu o directivă specială este adesea folosită:

După aceea, puteți procesa valorile primite de variabilele din interiorul buclei, folosind semne de exclamare în loc de semne de procente. Sintactic, utilizarea ambilor delimitatori este permisă, dar rezultatele utilizării lor vor fi diferite, așa cum demonstrează în mod clar 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 sa va rămâne veche (ceea ce a fost setat înainte de a intra în bucla de comandă PENTRU).

Această caracteristică a implementării procesorului de comenzi Windows duce adesea la rezultate neașteptate atunci când se utilizează grupuri de comenzi unite prin paranteze în constructe PENTRU este declarat în mod explicit în instrucțiunea „for” și în variabile DACĂși când valoarea oricărei variabile este modificată într-o buclă cu o singură comandă. De exemplu, pentru a obține o listă de fișiere din directorul curent, un astfel de fișier batch nu va funcționa:

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

Se pare că totul este corect din punct de vedere logic, dar particularitatea procesării valorilor variabilelor nu este luată în considerare. Valoare variabilă LISTĂîn interiorul unei bucle de comandă PENTRU nu va fi schimbat, va rămâne gol (setat de comanda SET LIST=), așa cum era la începutul buclei FOR. Echipă SET LIST= %LIST% %%I trebuie să schimbe valoarea variabilei LIST din fiecare buclă la cea curentă, plus un caracter spațiu și plus valoarea curentă a variabilei eu, care ia valoarea unui nume de fișier în directorul curent. Sintactic, comanda este corectă, dar datorită caracteristicii de implementare menționate mai sus a procesorului de comenzi, nu funcționează, iar valoarea variabilei LIST nu se modifică. Pentru ca acest lucru să se întâmple, fișierul batch trebuie modificat în același mod ca în exemplul pentru un grup de comenzi:

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).

Această caracteristică a implementării CMD trebuie luată în considerare și atunci când se utilizează valorile variabilelor de sistem în interiorul buclelor, cum ar fi variabila ERRORLEVEL:

DACĂ !EROARELE!==0în loc de %ERRORLEVEL%==0

Rulați o comandă pentru fiecare fișier dintr-un set dat.

Sintaxă

pentru {% variabilă|%% variabilă} în (multe) do echipă [Opțiuni pentru linia de comandă]

Opțiuni

{% variabilă|%% variabilă) Parametru necesar. Parametrul înlocuit. Utilizare % variabilă pentru a executa comanda pentru din linia de comandă. Utilizare %% variabilă pentru a executa comanda pentruîntr-un fișier batch. Variabilele sunt sensibile la majuscule și pot fi reprezentate cu o valoare alfa, cum ar fi %A, %B sau %C. (multe) Parametru necesar. Specifică unul sau mai multe fișiere, directoare, intervale de valori sau șiruri de text care urmează să fie procesate de comanda specificată. Sunt necesare paranteze. (multe) comanda Parametru necesar. Specifică o comandă care trebuie executată pentru fiecare fișier, director cu interval de valori sau șir de text inclus în parametrul specificat

.

  • CommandLineOptions Specifică opțiunile liniei de comandă care sunt utilizate cu comanda specificată. pentru

    Echipă pentru/?

  • Afișează ajutor pe linia de comandă.

    Note pentru.

    • , afișând valorile variabilelor de mediu și comanda pentru Folosind programul %% variabilă poate fi folosit într-un fișier batch sau direct din linia de comandă. %% variabilă Utilizarea opțiunilor din linia de comandă pentru fișierul lot multe Următoarele atribute se aplică comenzii echipă variabilă
    • (sau variabilă) va fi înlocuit cu șirul de text din parametrul dat pentru parametrul while
    • nu va procesa toate fișierele din acest set. variabilă Numele parametrilor %0 %9 echipe Sunt sensibile la majuscule, sunt globale și nu pot fi active mai mult de 52 de variabile simultan..
    • Pentru a indica un parametru variabilă.
  • Puteți utiliza orice caracter, cu excepția numerelor 09, astfel încât să nu existe conflicte cu parametrii fișierelor batch

    . Pentru fișierele batch simple, este suficientă o singură notație de caractere, de exemplu multe%%f

    În fișierele batch complexe, pot fi utilizate alte notații pentru parametru.

    Specificarea mai multor fișiere

    Parametru

    poate reprezenta un grup de fișiere sau mai multe grupuri de fișiere. pentru Puteți utiliza caractere wildcard (* și ?) pentru a specifica grupuri de fișiere. Următoarele seturi de fișiere sunt valide: multe(*.doc *.txt *.me) %% variabilă(ian*.doc jan*.rpt feb*.doc feb*.rpt) % variabilă(ar??1991.* ap??1991.*) multe.

  • Când să folosiți comanda , prima valoare din parametru este declarat în mod explicit în instrucțiunea „for” și în variabile do

    înlocuiește parametrul este declarat în mod explicit în instrucțiunea „for” și în variabile do(sau pentru), iar apoi comanda specificată este executată pentru a procesa acea valoare. Aceasta continuă până când toate fișierele (sau grupurile de fișiere) care se potrivesc cu valoarea parametrului au fost procesate

  • Utilizarea cuvintelor cheie pentru

    Dacă extensiile shell sunt activate (în mod implicit), sunt acceptate următoarele formulare de comandă suplimentare pentru.

    • Numai cataloage

      Dacă parametrul multe conţine metacaractere (* şi ?), comanda specificată în parametru echipă, este executat pentru fiecare director (cu excepția multor fișiere din directorul specificat) care se potrivește cu parametrul multe.

      pentru Se folosește următoarea sintaxă. {%% | % } variabilă /Dmulte) do echipă [Opțiuni pentru linia de comandă]

    • în (

      Recursiv Traversează un arbore de directoare cu rădăcină la [: ]disc cale pentru, urmând instrucțiunile pentru fiecare director din arbore. Dacă după cheie/R multe nici un director specificat, directorul curent asumat. Dacă parametrul

      pentru pentru fiecare director din arbore. Dacă după cheie [[Traversează un arbore de directoare cu rădăcină la [ : ]disc] {%% | % } variabilă în (multe) do echipă [Opțiuni pentru linia de comandă]

    • specificat printr-un singur punct (.), comanda va lista pur și simplu directoarele din arbore. Se folosește următoarea sintaxă.

      Repetați o gamă de valori Utilizați variabila de iterație pentru a seta valoarea inițială ( InitialValue# ), apoi treceți prin intervalul de valori până când valoarea depășește valoarea finală a setului (). /L FinalValue# Utilizați variabila de iterație pentru a seta valoarea inițială ( va repeta prin compararea parametrului ), apoi treceți prin intervalul de valori până când valoarea depășește valoarea finală a setului ( cu parametru Utilizați variabila de iterație pentru a seta valoarea inițială (. Dacă parametrul ), apoi treceți prin intervalul de valori până când valoarea depășește valoarea finală a setului ( mai mic decât parametrul ), apoi treceți prin intervalul de valori până când valoarea depășește valoarea finală a setului (, apoi comanda este executată. Când variabila de iterație depășește parametrul , shell-ul iese din buclă. De asemenea, puteți utiliza un parametru negativ pas#

      pentru /L {%% | % } variabilă /Dpentru a trece printr-un interval de valori descrescătoare. De exemplu, (1,1,5) produce secvența „1 2 3 4 5” și (5,-1,1) produce secvența „5 4 3 2 1”. Se folosește următoarea sintaxă.) do echipă [Opțiuni pentru linia de comandă]

    • StartValue#, Step#, FinalValue#

      Iterația și analizarea fișierelor Analiza fișierelor ar trebui să fie utilizată pentru a procesa ieșirea comenzii, șirurile de caractere și conținutul fișierului. Utilizați variabile de iterație pentru a determina conținutul sau rândurile pe care doriți să le testați. Parametru Parsarea cuvintelor cheie Analiza fișierelor ar trebui să fie utilizată pentru a procesa ieșirea comenzii, șirurile de caractere și conținutul fișierului. Utilizați variabile de iterație pentru a determina conținutul sau rândurile pe care doriți să le testați. Parametru folosit pentru a schimba parsarea. Utilizați parametrul marker pentru a specifica marcatorii care sunt tratați ca variabile de iterație. Nota. Fără cheia parametrilor markerului/F

      verifică doar primul jeton. pentru Analiza fișierelor constă în citirea rezultatului, linia sau conținutul unui fișier, împărțirea acestuia în linii individuale de text și analizarea fiecărei linii în zerouri sau simboluri. Ciclul programului marker pentru a specifica marcatorii care sunt tratați ca variabile de iterație. Nota. Fără cheia parametrilor markerului este apoi apelată cu variabila de iterație setată la marker. Implicit

      pentru marker pentru a specifica marcatorii care sunt tratați ca variabile de iterație. Nota. Fără cheia parametrilor markerului [" Analiza fișierelor ar trebui să fie utilizată pentru a procesa ieșirea comenzii, șirurile de caractere și conținutul fișierului. Utilizați variabile de iterație pentru a determina conținutul sau rândurile pe care doriți să le testați. Parametru" ] {%% | % } variabilă în (trece primul element separat prin spații din fiecare linie a fiecărui fișier. Liniile goale sunt sărite. Se folosește și o sintaxă diferită.) do echipă [Opțiuni pentru linia de comandă]

      pentru marker pentru a specifica marcatorii care sunt tratați ca variabile de iterație. Nota. Fără cheia parametrilor markerului [" Analiza fișierelor ar trebui să fie utilizată pentru a procesa ieșirea comenzii, șirurile de caractere și conținutul fișierului. Utilizați variabile de iterație pentru a determina conținutul sau rândurile pe care doriți să le testați. Parametru" ] {%% | % } variabilă Multe nume de fișiereîn("") do echipă [Opțiuni pentru linia de comandă]

      pentru marker pentru a specifica marcatorii care sunt tratați ca variabile de iterație. Nota. Fără cheia parametrilor markerului [" Analiza fișierelor ar trebui să fie utilizată pentru a procesa ieșirea comenzii, șirurile de caractere și conținutul fișierului. Utilizați variabile de iterație pentru a determina conținutul sau rândurile pe care doriți să le testați. Parametru" ] {%% | % } variabilă Multe nume de fișiereechipă") do echipă [Opțiuni pentru linia de comandă]

      șir de caractere trece primul element separat prin spații din fiecare linie a fiecărui fișier. Liniile goale sunt sărite. Se folosește și o sintaxă diferită. Argument trece primul element separat prin spații din fiecare linie a fiecărui fișier. Liniile goale sunt sărite. Se folosește și o sintaxă diferită.. Pentru a suprascrie comportamentul implicit de analiză, specificați parametrul " Analiza fișierelor ar trebui să fie utilizată pentru a procesa ieșirea comenzii, șirurile de caractere și conținutul fișierului. Utilizați variabile de iterație pentru a determina conținutul sau rândurile pe care doriți să le testați. Parametru" . Acesta este un șir între ghilimele care conține unul sau mai multe cuvinte cheie pentru a indica diferite moduri de analizare.

      Dacă se folosește usebackq, utilizați una dintre următoarele sintaxe:

      pentru marker pentru a specifica marcatorii care sunt tratați ca variabile de iterație. Nota. Fără cheia parametrilor markerului [" folosireqAnaliza fișierelor ar trebui să fie utilizată pentru a procesa ieșirea comenzii, șirurile de caractere și conținutul fișierului. Utilizați variabile de iterație pentru a determina conținutul sau rândurile pe care doriți să le testați. Parametru" ] {%% | % } variabilă /D"trece primul element separat prin spații din fiecare linie a fiecărui fișier. Liniile goale sunt sărite. Se folosește și o sintaxă diferită.") do echipă [Opțiuni pentru linia de comandă]

      pentru marker pentru a specifica marcatorii care sunt tratați ca variabile de iterație. Nota. Fără cheia parametrilor markerului [" folosireqAnaliza fișierelor ar trebui să fie utilizată pentru a procesa ieșirea comenzii, șirurile de caractere și conținutul fișierului. Utilizați variabile de iterație pentru a determina conținutul sau rândurile pe care doriți să le testați. Parametru" ] {%% | % } variabilă Multe nume de fișiereîn("") do echipă [Opțiuni pentru linia de comandă]

      pentru marker pentru a specifica marcatorii care sunt tratați ca variabile de iterație. Nota. Fără cheia parametrilor markerului [" folosireqAnaliza fișierelor ar trebui să fie utilizată pentru a procesa ieșirea comenzii, șirurile de caractere și conținutul fișierului. Utilizați variabile de iterație pentru a determina conținutul sau rândurile pe care doriți să le testați. Parametru" ] {%% | % } variabilă în(`echipă`) do echipă [Opțiuni pentru linia de comandă]

      Tabelul de mai jos listează cuvintele cheie de analiză care sunt utilizate pentru parametru Analiza fișierelor ar trebui să fie utilizată pentru a procesa ieșirea comenzii, șirurile de caractere și conținutul fișierului. Utilizați variabile de iterație pentru a determina conținutul sau rândurile pe care doriți să le testați. Parametru.

      Cuvânt cheie Descriere
      eol=c Specifică caracterul de sfârșit de linie (doar un caracter).
      skip=n Setează numărul de linii de sărit la începutul fișierului.
      delims=xxx Specifică un set de delimitatori. Înlocuiește setul de delimitare implicit de spațiu și tab.
      jetoane=x,y,m-n Specifică elementele trecute de la fiecare linie în corpul buclei pentru la fiecare iterație. Ca rezultat, sunt plasate nume de variabile suplimentare. Formă jetoane=x,y,m-n specifică un interval care indică elemente cu m th n-th. m-n Dacă ultimul caracter al rândului
      folosireq este un asterisc (*), apoi este plasată o variabilă suplimentară în care este plasat restul liniei după analizarea ultimului element. trece primul element separat prin spații din fiecare linie a fiecărui fișier. Liniile goale sunt sărite. Se folosește și o sintaxă diferită. Specifică dacă ghilimele pot fi folosite pentru numele fișierelor din parametru
    • . Specifică faptul că șirurile cuprinse între ghilimele sunt executate ca comenzi, iar șirurile cuprinse între ghilimele simple sunt executate ca comenzi într-un șir de caractere.

      Înlocuirea variabilei pentru Modificatori de înlocuire pentru referințele la variabile în eu).

      . Descriere
      În echipă Tabelul de mai jos listează opțiunile de sintaxă (folosind exemplul unei variabile
      %~I Variabilă cu modificator
      %~fI Extensia %I, care elimină ghilimelele din jur ("").
      %~dI Se extinde %I la numele complet al căii.
      %~pI Înlocuirea %I cu numele unității.
      %~xI Înlocuirea %I cu calea.
      %~sI Înlocuiți %I cu un singur nume de fișier.
      %~aI Înlocuirea %I cu extensia numelui de fișier.
      %~tI Înlocuiți cu o cale care conține numai nume scurte.
      %~zI Înlocuirea %I cu atribute de fișier.
      Înlocuirea %I cu timpul de modificare a fișierului. Înlocuirea %I cu dimensiunea fișierului.

      %~$PATH:I

      Caută în directoarele listate în variabila de mediu PATH și înlocuiește %I cu numele complet al primului fișier găsit. Dacă variabila de mediu nu este definită sau căutarea nu găsește niciun fișier, modificatorul returnează un șir gol. %I Tabelul de mai jos listează combinații de modificatori care pot fi utilizați pentru a produce rezultate mai complexe. pentruÎn exemplele de mai sus

      și PATH poate fi înlocuită cu alte valori valide. Nume de variabilă valid %I, poate îmbunătăți percepția programului și va evita neînțelegerile cu modificatorii în care literele mici și mari nu diferă.

  • Analizând un șir

    Proiecta pentru /F poate fi folosit direct pe o sfoară. Pentru a face acest lucru, plasați parametrul trece primul element separat prin spații din fiecare linie a fiecărui fișier. Liniile goale sunt sărite. Se folosește și o sintaxă diferită.între paranteze între ghilimele simple ( " trece primul element separat prin spații din fiecare linie a fiecărui fișier. Liniile goale sunt sărite. Se folosește și o sintaxă diferită." ). Parametru trece primul element separat prin spații din fiecare linie a fiecărui fișier. Liniile goale sunt sărite. Se folosește și o sintaxă diferită. va fi luată ca o singură linie de intrare din fișier și va fi analizată.

  • Analizarea ieșirii

    Echipă pentru /F poate fi folosit pentru a analiza rezultatul comenzii. Pentru a face acest lucru, plasați parametrul trece primul element separat prin spații din fiecare linie a fiecărui fișier. Liniile goale sunt sărite. Se folosește și o sintaxă diferită.între paranteze în ghilimele din spate. Va fi tratată ca o linie de comandă care este transmisă interpretului de linie de comandă copil Cmd.exe, iar rezultatele comenzii sunt plasate în memorie și analizate ca și cum ar fi un fișier.

Exemple

Fișierele batch folosesc următoarea sintaxă pentru comandă pentru:

pentru %%variabilă în (multe) do echipă [Opțiuni pentru linia de comandă]

Pentru a afișa conținutul tuturor fișierelor care au permisiunea .doc sau .txt în directorul curent folosind o variabilă înlocuibilă %f, introduceți următoarea comandă:

pentru %f în (*.doc *.txt) tastați %f

În exemplul anterior, fiecare fișier cu extensia .doc sau .txt din directorul curent va fi înlocuit cu variabila %f până când conținutul tuturor fișierelor este afișat. %f Pentru a utiliza această comandă într-un fișier batch, trebuie să înlocuiți toate aparițiile lui Sunt sensibile la majuscule, sunt globale și nu pot fi active mai mult de 52 de variabile simultan. pe

. În caz contrar, variabila este ignorată și este afișat un mesaj de eroare.

Pentru a analiza un fișier, ignorând comentariile, puteți utiliza următoarea comandă:

pentru /F „eol=; tokens=2,3* delims=,” %i în (myfile.txt) face @echo %i %j %k PENTRU Această comandă analizează fiecare linie din fișierul Myfile.txt, ignorând liniile care încep cu punct și virgulă și trece al doilea și al treilea element din fiecare linie în corpul buclei de comandă PENTRU. Elementele sunt separate prin virgule și/sau spații. Corpul de instrucție În corpul buclei există o variabilă utilizări ia valoarea celui de-al doilea subșir, pentru a obține al doilea element, - al treilea, și pentru a obține al treilea element și " pentru a obține elementele rămase în șir. Dacă numele fișierelor conțin spații, acestea ar trebui să fie incluse între ghilimele (de exemplu," Nume de fișier folosireq).

Pentru a folosi ghilimele aveți nevoie de comanda În corpul buclei există o variabilă. În caz contrar, ghilimelele sunt tratate ca definind un șir de caractere care trebuie analizat. PENTRU Variabilă ia valoarea celui de-al doilea subșir, este declarat în mod explicit în instrucțiunea „for” și în variabile - al treilea, și declarate explicit în instrucțiuni m-n, A m-n declarat implicit cu

. Prin utilizarea trece primul element separat prin spații din fiecare linie a fiecărui fișier. Liniile goale sunt sărite. Se folosește și o sintaxă diferită. Puteți specifica până la 26 de elemente atâta timp cât acest lucru nu provoacă o încercare de a declara o variabilă cu un nume mai mare decât „z” sau „Z”.

Pentru a analiza rezultatul comenzii prin transmiterea unui parametru

Acest exemplu listează numele variabilelor de mediu din mediul curent.

După cum a arătat experiența, fișierele batch, de ex. fișiere batch sunt foarte populare printre administratorii de sistem care le folosesc în scopuri de automatizare. Și astăzi continuăm să studiem aceleași fișiere de lilieci nu vom lua în considerare elementele de bază, ci vom trece la lucruri mai avansate.

În primul articol Scrierea fișierelor batch - exemple de fișiere batch, ne-am uitat la exemple simple de utilizare a fișierelor batch, dar după cum s-a dovedit, scrierea fișierelor batch este foarte interesantă pentru aproape toată lumea și toată lumea vrea să învețe ceva mai complex, cu ajutorul căruia poate simplifica și mai mult automatizarea unor procese.

Exemplul 1 – ștergerea arhivelor vechi

Când arhivează ceva, mulți oameni sunt interesați de întrebarea „ Cum să ștergeți arhivele vechi ca fiind inutile folosind un fișier batch? " De exemplu, toate sunt într-un singur folder și trebuie să ștergeți toate arhivele care au mai mult de 14 zile. După ce am citit manualele și am navigat pe internet, pot sugera următoarea metodă.

Puteți face astfel încât doar un anumit număr de arhive să fie stocate în folderul cu arhive, respectiv cele mai recente ( aceste. doar în cazul nostru în ultimele 2 săptămâni).

Acest lucru se face folosind două comenzi. Primul este DIR, adică. pur și simplu citim toate fișierele dintr-un singur folder și le scriem numele într-un fișier text.

dir D:\arhiv\*.rar /a:-D/b/o:-D > list_of_files.txt

  • dir D:\arhiv\*.rar– asta înseamnă că citim toate arhivele rar din folderul D:\arhiv\;
  • /a:-D– asta înseamnă că vor fi afișate toate fișierele cu atributele specificate, tasta -D înseamnă că avem nevoie doar de fișiere, nu de directoare, prefixul „-” înseamnă doar negație, adică. nu directoare, dacă am scrie doar D, atunci ar citi și directoare;
  • /b– aceasta este rezultatul numai a numelor de fișiere;
  • /o:-D– aceasta este sortare, tasta –D înseamnă că sortarea se va face după dată, dar mai întâi cele mai vechi, pentru a remedia asta știm deja că ne va ajuta prefixul „-”;
  • > - înseamnă că rezultatul va fi redirecționat către fișierul list_of_files.txt, îl puteți denumi diferit.

Așa că ne-am numărat toate arhivele și le-am scris într-un fișier, apoi trebuie să parcurgem toate aceste fișiere și să lăsăm doar 14 bucăți, adică. în ultimele 2 săptămâni. Facem acest lucru folosind comanda PENTRU, este un fel de buclă care efectuează o acțiune specifică pentru fiecare fișier dintr-un folder sau fiecare linie dintr-un fișier, ca în cazul nostru.

  • pentru– echipa în sine pentru perete;
  • /F „skip=13”– aceasta este o cheie cu un parametru care înseamnă că primele 13 fișiere nu trebuie procesate, adică le sarim peste. De ce 13 și nu 14 da pentru că arhiva 14 ( aceste. de astăzi, care ar trebui creat la executarea acestui fișier batch) nu a fost încă creat, deci 13;
  • %%i– o variabilă care stochează numele fișierului curent;
  • În (list_of_files.txt)– înseamnă că iterează peste toate liniile din acest fișier special;
  • face (del /Q "%%i")- spune ce trebuie făcut cu fiecare, în cazul nostru pur și simplu ștergem aceste fișiere folosind tasta del /Q /Q, astfel încât să nu ni se ceară confirmarea înainte de ștergere. Pentru teste, sfătuiesc să înlocuiți del /Q cu echo, adică doar afișați acele fișiere.

În total, avem acest fișier batch:

dir D:\arhiv\*.rar /a:-D/b/o:-D > list_of_files.txt

pentru /F "skip=13" %%i in (list_of_files.txt) do (del /Q "%%i")

În consecință, după aceste rânduri puteți scrie codul de arhivare în sine, iar în final vom obține că în folderul nostru vor fi stocate doar 14 arhive, desigur, cele mai recente.

Exemplul 2 - Utilizarea variabilelor

Puteți folosi chiar și variabile în fișiere batch, la fel ca într-un limbaj de programare real. Să luăm în considerare cel mai simplu exemplu de utilizare a variabilelor, de exemplu, dorim să înmulțim cu 2 numărul pe care îl introducem în câmp când rulăm fișierul batch.

@echo dezactivat

SET /a c=%a%*%b%

eco %c%

După cum înțelegeți, variabilele sunt setate folosind comanda SET. Pentru a utiliza variabila în viitor, inserăm un semn de procent (%) pe ambele părți ale variabilei, astfel încât linia de comandă să înțeleagă că aceasta este o variabilă.

  • @echo dezactivat– pentru ca comenzile noastre să nu fie afișate pe ecran;
  • SET a=2– pur și simplu setăm variabila „a” la o valoare;
  • SET /p b=[introduceți al doilea număr de înmulțit]– setăm variabila „b” la valoarea pe care o introducem în câmp, astfel încât lucrătorul de lot să înțeleagă că vrem să introducem singuri valoarea variabilei, se folosește tasta /p;
  • SET /a c=%a%*%b%- setați variabila „c” la rezultatul expresiei noastre ( în exemplul nostru aceasta este înmulțirea);
  • eco %c%- afiseaza valoarea variabilei “c”;
  • pauză- întrerupem pur și simplu execuția fișierului nostru bat pentru a vedea pur și simplu toate rezultatele.

Apropo, pentru ca literele rusești să fie afișate normal pe linia de comandă, salvați fișierul bat în codificarea DOS-866.

Am sortat variabilele, acum să aplicăm acest lucru la primul nostru exemplu, să presupunem că vrem să lăsăm nu 14 arhive, ci numărul pe care îl dorim, pentru aceasta, când lansați fișierul batch, vom introduce numărul de arhivele care trebuie salvate. Va arata cam asa:

@echo dezactivat

dir D:\test\*.rar /a:-D/b/o:-D > list_of_files.txt

pentru /F "skip=%chislo%" %%i în (list_of_files.txt) do (del /Q "%%i")

Ei bine, așa ceva, desigur, în practică, s-ar putea să nu fie necesar, dar cel puțin am învățat cum să folosim variabilele.

Despre variabile, vreau să spun, de asemenea, că există variabile de sistem precum:

%DATA%- afișează data curentă.

%TIMP%- arată ora curentă.

De exemplu, rulați următorul cod:

ecou %DATE%

ecou %time:~0,-3%

Am scris variabila %TIME% exact în acest fel, pentru ca rezultatul să fie afișat într-o formă mai lizibilă, încercați să scrieți %TIME% și % TIME:~0.-3% pentru dvs., în al doilea caz ultimul 3 caractere vor fi eliminate.

De fapt, există mai multe variabile de sistem, acestea pot fi necesare mai des decât altele.

Exemplul 3 – IF Declarație de execuție condiționată

Ca și în alte limbi cu drepturi depline, puteți utiliza operatorul de execuție condiționată IF în fișierele batch. Să dăm un mic exemplu, fișierul batch pur și simplu verifică dacă fișierul există sau nu:

@echo dezactivat

DACĂ EXISTĂ test.txt (

Fișierul echo există

echo Nu există un astfel de fișier

DACĂ EXISTĂ test.txt– exact aici este verificat fișierul.

După, între paranteze, vine ce vrem să facem dacă fișierul există, iar dacă fișierul nu există, atunci după ELSE, vine ce trebuie făcut dacă fișierul nu există.

Acum să ne modificăm puțin exemplul înmulțind numărul pe care l-am introdus cu 2, pur și simplu, dacă introducem brusc zero, vom afișa mesajul corespunzător și vă vom cere să introduceți din nou numărul.

@echo dezactivat

SET /p b=[introduceți al doilea număr de înmulțit]

SET /a c=%a%*%b%

dacă %c%==0 (ecou ați introdus numărul 0, introduceți altul) altfel echo %c%

dacă %c%==0 (goto:metka)

Totul aici este deja familiar, singurul lucru este că atunci când comparăm variabila „c” operatorul de comparație == ( doi egali), deoarece pur și simplu egal (=) este un operator de atribuire. Dacă ați observat, am folosit aici operatorul goto, adică. treceți la eticheta dorită. Cu alte cuvinte, punem o etichetă și, în funcție de rezultatul verificării stării, se va efectua trecerea la eticheta dorită.

Acum aș dori să observ că mulți oameni folosesc programul winrar în munca lor, de exemplu, pentru a crea o arhivă și, desigur, o folosesc în fișierele lor batch, dar mulți pun întrebări despre cheile care se referă la winrar. Nu confunda tastele winrar, ele sunt folosite doar pentru acest program, și nu pentru tot ce se află în fișierele batch, adică. linia de comandă, de exemplu, dacă utilizați 7zip, atunci tastele vor fi diferite. În ceea ce privește cheile winrar, cartea de referință completă și cea mai bună, după părerea mea, este, desigur, în winrare în sine. Pentru a vedea o descriere a tastelor winrar, deschideți programul winrar, accesați meniul Ajutor, apoi faceți clic pe „ Conţinut", apoi selectați linia " Modul linie de comandă”, unde va fi o descriere a tuturor cheilor, sunt date chiar și exemple simple. În consecință, dacă aveți versiunea în limba engleză a winrar, atunci sensul este același, doar totul va fi în engleză.

Aceasta încheie a doua parte a studierii fișierelor batch. Noroc!