Secretele ferestrelor de linie de comandă, vr-online - un e-zine gratuit pentru toți

Secretele ferestrelor de linie de comandă, vr-online - un e-zine gratuit pentru toți
Din păcate, datorită mai multor motive independente de noi, shell-ul de comandă cmd.exe nu și-a pierdut încă relevanța. Mulți administratori de sistem o utilizează pentru a-și gestiona sarcinile, în absența altor instrumente de pe sistemul de operare sau din cauza obișnuinței.





În ciuda simplității sale, linia de comandă are o serie de caracteristici interesante și evidente. În acest post, voi încerca să vă spun despre unele caracteristici nedocumentate sau puțin cunoscute ale liniei de comandă Windows.







Bip din fișierul de lilieci.

Apel intern al comenzii CALL.
Din documentația de ajutor Microsoft știm că echipa de Apel - face un apel un fișier batch dintr-un alt, fără finalizarea primului fișier, dar puțini oameni știu că, folosind apel pentru a trece prin eticheta internă a aceluiași fișier cmd / liliac, cum ar fi comanda Goto. @ De ce face acest lucru, atunci goto „- vă întreb apoi, în plus față de a muta pur și simplu pe etichete Call echipa are două caracteristici :.

- "Poate" să revină la locul apelului cu o etichetă specială: EOF.
- Poate transfera valorile la o "subrutină". Voi explica cu un exemplu:
@echo off
Rem Apelarea subrutinei
sunați: SQRT 2
sunați: SQRT 8
pauză
: EOF
rem și aici ieșim să vedem mai jos.
rem *** Începutul subrutinei. ***
: SQRT
set / a outputval =% 1 *% 1
echo Rădăcina lui% 1 este% outputval%.
: EOF
rem nu ieșiți, ci doar întoarceți-vă la loc după apel
rem *** Sfârșitul subrutinei. ***
După executarea acestui script de comandă, ajungem la următoarea concluzie:

Secretele ferestrelor de linie de comandă, vr-online - un e-zine gratuit pentru toți

Frumoasă, nu-i așa? Această caracteristică poate salva inconspicuous o mulțime de linii de cod, și pentru un timp poate părea că am program pe un limbaj de scripting cu drepturi depline. Da, este în valoare de vedere, de asemenea, faptul că subrutina poate fi transmis mai multe argumente, atunci a avea acces la ele ar trebui să fie la fel ca argumentele liniei de comandă% 1% 2% 3 ... și apoi, în ordine.

Caracterele de ecranare din fișierul bat.
Ce se întâmplă dacă trebuie să afișați în consola text care conține operatori sau caractere speciale?

De exemplu, ar trebui să ieșiți: "% TEMP%". Încercați să tastați Echo% TEMP% pe linia de comandă. rezultat:

Secretele ferestrelor de linie de comandă, vr-online - un e-zine gratuit pentru toți

Valoarea% TEMP% a fost tipărită în consola. Nu exact ceea ce avem nevoie ... Pentru astfel de cazuri, există caractere de evacuare "^" și "%". Este suficient sa o inlocuiti inainte de caracterul special si interpretul va intelege ca dorim sa tiparim exact caracterul si nu un sir sau expresie. Pentru a verifica, vom crea un fisier batch:
@Echo oprit
Echo mănâncă acele rulouri franceze și bea ceai ^
mananca mai multe din aceste rulouri franceze si au ceai.
mananca mai multe din aceste rulouri franceze si au ceai.
mananca mai multe din aceste rulouri franceze si au ceai
Echo %% TEMP %%
pauză
rezultat:

După cum puteți vedea totul funcționează și salvați codul pe față. În ciuda faptului că totul a funcționat în exemplul respectiv, trebuie să fii mai precaut cu ecranarea în fișiere batch, nu este întotdeauna totul neted, deci trebuie să testezi fiecare scenariu.

Ce este permisă expansiunea?
În general, nu am vrut să scriu despre asta, ci pentru că în următorul exemplu este folosit și în ajutorul este vopsit vag, voi scrie.

De obicei, atunci când se utilizează variabile în scripturile bat / cmd, se folosește variabila%%, dar dacă valoarea variabilei se schimbă în corpul bucla și se citește acolo, este posibil să nu funcționeze. De exemplu:
pentru %% i in (1,2,3) do (
setați "var = %% i"
echo% var%
Rem Nu va imprima nimic
)
pauză
Dacă executați acest exemplu, interpretul va executa pur și simplu ecou de 3 ori fără parametri. Pentru ca totul să funcționeze corect, trebuie să utilizați modul de procesare avansată a comenzii. Acesta este localizat cu opțiunea enabledelayedexpansion și este dezactivată cu comanda endlocal. Voi da un exemplu:
setlocal enabledelayedexpansion
pentru %% i in (1,2,3) do (
setați "var = %% i"
echo! var!
Rezultat rem 1,2,3
)
pauză
Acum, totul se deduce așa cum era planificat. Voi observa că variabila în acest caz este încadrată de semne de exclamare (!).

Crearea de variabile dinamice în fișiere bat? Este ușor!
Când scrieți scripturi shell, administratori, care, deși un pic programat în alte limbaje de programare (și CMD pot fi atribuite acestora la întindere), există un anumit disconfort în procesarea de seturi mari de date. La urma urmei, nu există matrice în cmd! Putem rezolva această limitare folosind variabile dinamice. Pentru a face acest lucru, să folosim modul avansat de procesare a comenzilor.

De exemplu, există un fișier text, trebuie să îl citim și să afișăm anumite linii pe ecran, arăt cum să faceți acest lucru utilizând variabile dinamice. Mai întâi, creați un fișier greeka.txt cu următorul conținut:
1.Ehal Greka peste râu, vede grecul - în raul de cancer.
2. A mers grec prin râu, vede grecul - în raul de cancer.
3. A văzut limba greacă prin râu, vede grecul - în raul de cancer.
4.Hehal Grek peste râu, vede un grec - în cancerul de râu.
5. A văzut grecul peste râu, a văzut grecul - în cancerul râului.
6. A mers greacă prin râu, vede grecul - în raul de cancer.
7. A mers grec prin râu, vede grecul - în raul de cancer.
8. A mers grec prin râu, vede grecul - în raul de cancer.
9. A trecut greacă prin râu, vede grecul - în raul de cancer.
10. A mers grec prin râu, vede grecul - în raul de cancer.
Apoi, să începem să scriem scriptul nostru:
@echo off
setlocal enabledelayedexpansion
Activați modul de procesare avansată a comenzii.
setați i = 0

Declarați o variabilă auxiliară.
pentru / F "tokens = *" %% a în (greka.txt) nu (

Porniți buclele unei căutări liniare a unui fișier.
set / A i =! i! + 1

Creștem iteratorul auxiliar cu unul.
set str! i! = %% a

De fapt, construirea foarte simplă a creării de variabile dinamice, cu numele str1, str2, str3 și așa mai departe.
)

Să verificăm cum a funcționat scenariul nostru.
Începerea ciclului
Echo Aceasta este 10 linii. ------- ^> ^>% str10%
echo +++++++++++++++++++++++++++++++++++++++++++++
echo +++++++++++++++++++++++++++++++++++++++++++++
Echo. și acesta este al doilea ------- ^> ^>% str2%
pauză
După cum puteți vedea variabilele dinamice sunt destul de convenabile și ușor de utilizat, ele vă pot ajuta să înlocuiți matricele și să adăugați flexibilitate codului.

Căutați și înlocuiți textul în fișiere utilizând fișierul cmd / bat.
Mulți administratori și utilizatori de putere-Linux, atunci când face cunoștință cu posibilitățile cmd, observați acest detaliu enervant de modul în care lipsa de multe instrumente disponibile pentru căutare și înlocuiți subșirurilor în fișierele.

În general, sub ferestre, există mai multe instrumente de manipulare siruri de caractere în fișierele, inclusiv portat la #nix sisteme (aceeași SED și înlocuindu), dar nu caută modalități de ușor nu este destul de clar, pentru că la momentul potrivit acest lucru nu este la îndemână.

A fost obținut un dosar, umplut cu un proverb, de mărime

10 megaocteți, bine ... de exemplu, pentru a rula script-ul nostru prin tastarea „File_str_replace.bat greka.txt Hitler greacă.“ pentru a înlocui toate cuvintele grecului cu Hitler. Noi vedem că după rularea jumătate minute (nu-i rău pentru o consolă mamut în vârstă de 20 de ani), în fișierul nostru spunând schimbat la „Hitler a mers peste râu, vede pe Hitler - în râul rak.Sunul Hitler în brațul râu, Rac brat Grecu - DAC“. Puteți îmbunătăți script-ul, și chiar și cravată expresiile ei regulate, dar este detalii tehnice fine







Articole similare

Trimiteți-le prietenilor: