1. Dacă este posibil, utilizați variabile de mediu
Folosind o variabilă în script, cuprindem numele variabilei între semnele procentuale (%) și când scriptul este executat, semnele procentuale și textul dintre ele sunt înlocuite de valoarea acestei variabile. Utilizarea variabilelor face ca codul scriptului să fie mai universal, deci are mai multe șanse să lucreze cu succes pe diferite computere. De exemplu, într-un script shell, nu codificați greu directorul de instalare Windows. În schimb, ar trebui să utilizați variabila SystemRoot, care va indica întotdeauna un anumit director de instalare Windows. Deci, echipa
Echo% SystemRoot%
Ca și în cazul altor variabile de mediu, aceste variabile sunt exprimate în semne procentuale. De exemplu, următoarea linie de script va afișa ora și data curentă:
Echo .ATE %% TIME%
Cele mai multe înlocuiri au o sintaxă diferită de sintaxa comenzilor la care sunt trimise, deci va trebui să schimbați scripturile în consecință.
3. În shell-ul Cmd.exe, utilizați extensia .cmd
Fișierele batch Command.com au nevoie de o extensie .bat. Clicul Cmd.exe poate utiliza, de asemenea, extensia .bat, dar în limbajul de programare macro mai puternic Cmd.exe, multe comenzi sunt incompatibile cu Command.com. În acest fel. Un fișier bat scris pentru Cmd.exe ar putea eșua dacă utilizatorul încearcă să îl execute în Command.com (de exemplu, în Windows 98). O modalitate de a evita această problemă este de a utiliza extensia .cmd pentru scripturi. Deoarece Command.com nu recunoaște extensia .cmd, pur și simplu nu va executa fișierul batch dacă numele său se termină în .cmd.
4. Asigurați-vă că sunt disponibile executabilele necesare
Dacă scriptul dvs. implică programe care nu fac parte din instalarea standard a sistemului de operare, trebuie să aveți grijă ca toate aceste programe să fie disponibile. De asemenea, ar trebui să documentați aceste dependențe în scenarii. Propun să pună la dispoziție fișierele executabile pentru a le pune în același director ca și scriptul. Apoi, pentru a le porni, se utilizează sintaxa
„%
unde exename este numele modulului executabil pe care doriți să-l executați. sintaxa%
dp0 returnează unitatea, calea și numele fișierului scriptului curent fără ghilimele. Încheierea întregului șir în ghilimele garantează capacitatea de lucru a scriptului, chiar dacă numele fișierului sau directorul în care este localizat scriptul conține citate.
5. Utilizați corect ghilimele duble
Se pare că citatele duble (") sunt o sursă comună de confuzie pentru cei care scriu scripturi. Citatele duble sunt doar o modalitate de a identifica spații care conțin argumente de linie de comandă. De exemplu, o linie de comandă aparent dreaptă
dir C: \ Program Files
de fapt, dă comanda Dir două argumente: C: \ Program și fișiere. Pentru a realiza intenția de a trece un argument de comandă pentru C: \ Program Files (inclusiv spațiile), noi trebuie să-l între ghilimele:
dir "C: \ Program Files"
Ghilimele nu fac parte din numele dosarului. Ei spun comenzii Dir că textul dintre ele este un argument.
Scripturile pentru shell suportă și parametrii liniei de comandă. Pentru a utiliza parametrii de linie de comandă script-ul, aveți nevoie pentru a permite înregistrarea% n (unde n - numărul de la 0 la 9). Această înregistrare se numește parametru de înlocuire (sau pur și simplu un parametru). De exemplu, script-ul va înlocui% 1 de prima linie de comandă argument% 2 - al doilea argument, etc. Pe lângă parametrii de la% 1% 9% 0 este înlocuit cu numele scenariului,% * înlocuit întregul șir de script de comandă (cu excepția numele script.). . Menționez aici opțiunile de linie de comandă pentru că atunci când Cmd.exe înlocuiește setările de la 1% la 9% argumente în linia de comandă corespunzătoare, se lasă ghilimelele duble în cazul în care acestea sunt în argument. Concluzia evidentă este că parametrul scriptului va fi întotdeauna inclus în ghilimele dacă conține spații. Această observație se bazează pe câteva reguli simple, urmați cu atenție pe care le poate elimina aproape complet problema de citate.Excepția de la această regulă este cazul în care folosim sintaxa%
n pentru a elimina ghilimelele parametrului (vezi regula următoare).n (unde n este un număr de la 1 la 9), care returnează un parametru fără ghilimele. De exemplu, un șir
Setați DATAFILE =%
1
va copia primul parametru script (fără citate) la variabila DATAFILE. Singura excepție este atunci când creați text citat care va fi transmis unei alte comenzi.
Setați TARGET =%
Primul dintre aceste rânduri de copii al doilea argument în țintă variabilă script-ul, eliminarea citate. A doua linie este corect sintactic, deoarece parametrul% 1 este deja inclus între ghilimele în cazul în care conține spații, iar variabila țintă trebuie să fie citat, deoarece aceasta poate conține spații.
6. Utilizați comenzile Setlocal și Endlocal
copiază comanda setlocal toate variabilele de mediu și comanda Endlocal restabilește toate variabilele cu valorile pe care le-au avut înainte de a rula script-ul. Endlocal elimină, de asemenea, orice variabile create de script. Utilizarea ambelor echipe face script-ul mai independent și se asigură că script-ul „curata dupa un cos de gunoi“, prin restabilirea variabilelor de mediu la valorile lor inițiale și de a elimina variabile pentru a crea un script.
De asemenea, puteți utiliza comanda Setlocal Enable Extensions pentru a afla exact ce extensii de comandă sunt incluse. Extensiile de comandă reprezintă îmbunătățiri pentru un grup de comenzi interne Cmd.exe (de exemplu, dacă, pentru, apel) care oferă capabilități suplimentare în comparație cu comenzile Command.com care au aceleași nume. Extensiile de comandă sunt activate în mod prestabilit, dar în acele cazuri rare când sunt dezactivate, comanda Setlocal Enableextensions asigură faptul că extensiile de comandă sunt activate. Pentru mai multe informații despre extensiile de comandă, tastați Cmd /? La promptul de comandă.
7. Folosiți simbolul Escape, dacă este necesar.
Cmd.exe folosește caracterul caret (^) ca semn de anulare a valorii speciale a caracterelor shell shell. De exemplu, ampersand () este un delimiter de comandă - vă permite să puneți mai multe comenzi pe o singură linie. Dacă intenționați să utilizați un ampersand într-un sens obișnuit, literal, ar trebui să „anuleze“ sensul său special, prin punerea lor în fața caret ^. Deci, în linie
Echo The ^ caracterul este
separatorul de comenzi
caracterul ^ provoacă procesorului de comenzi să anuleze interpretarea normală a următorului caracter. Caracterele speciale sunt simbolurile () <> ^ |. Nu este necesar să utilizați pavilionul de anulare dacă aceste caractere apar într-un șir cotat.
8. Nu utilizați comanda Exit fără comutatorul / b
Fără / b, comanda Exit închide shell-ul de comandă curent. Dacă cineva lansează Cmd.exe și execută un script care conține comanda Exit, sesiunea shell curentă se va închide brusc. Comanda Exit / b închide scriptul curent fără a închide sesiunea shell curentă. Pentru a afla mai multe despre comanda Exit, tastați Exit /? La promptul de comandă.
9. Utilizați cu prudență comanda If Errorlevel.
Comanda If Errorlevel verifică finalizarea codului de completare a ultimei execuții a comenzii. Comportamentul scriptului depinde de rezultatul verificării finalizării codului. Luați în considerare, de exemplu, următorul scenariu:
myprogram
Dacă se întâmplă eroare 1: Eroare
comanda Du-te în aceste linii vor fi efectuate numai în cazul în care Myprogram.exe returnează un cod de finalizare este mai mare sau egal cu 1. Cu alte cuvinte, «Dacă ERRORLEVEL n» nu înseamnă „în cazul în care ultimul cod al programului este completat este exact egală cu n»; de fapt, această condiție înseamnă "dacă ultimul cod de finalizare a programului nu este mai mic de n". Având în vedere acest comportament, este necesar să se verifice codul programului este completat, în ordine descrescătoare (de la cel mai mare la cel mai mic). Pentru a verifica valoarea specifică a codului programului este completă, utilizați o variabilă dinamică, în schimb echipa ERRORLEVEL Dacă ERRORLEVEL. Noi trebuie să aibă în vedere că, dacă comanda ERRORLEVEL diferă de variabila ERRORLEVEL, în picioare în lista din tabel. 1. Comanda If Errorlevel este compatibila cu comanda If Errorlevel de la Command.com; Variabila ERRORLEVEL este disponibilă numai în Cmd.exe.
10. Luați în considerare caracteristicile comenzii Start
Comanda Start execută un program sau o comandă în noua fereastră a consolei. Cu toate acestea, dacă încercați să rulați programul dintr-un folder care conține spații (sau dacă numele programului conține spații), comportamentul comenzii Start poate să nu corespundă așteptărilor dvs. De exemplu, următoarea comandă:
Porniți "C: \ Program Files \ Microsoft
Office \ Office11 \ Winword.exe »
nu pornește Microsoft Word contrar așteptărilor. În schimb, comanda Start va deschide o nouă sesiune Cmd.exe, antetul ferestrei consolei care va fi un șir cotat. Acest comportament este explicat prin faptul că comanda Start utilizează prima linie în ghilimele de pe linia de comandă ca titlul ferestrei de consolă.
Pentru a rezolva această ciudățenie, utilizați o pereche de citare pentru a specifica un antet gol, apoi tastați linia programului pe care doriți să-l începeți. Programul corect de pornire arată astfel:
Start «» «C: \ Program Files \ Microsoft
Office \ Office11 \ Winword.exe »
Nu puteți anticipa totul
Scripturile shell Cmd.exe sunt utilizate foarte extensiv. După ce ați stăpânit recomandările din acest articol, veți putea crea scenarii mai fiabile și să evitați problemele comune.