Erinevus lehekülje "CMD ja BAT - nipid ja trikid" redaktsioonide vahel
Rida 2: | Rida 2: | ||
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke== | ==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke== | ||
+ | |||
+ | ''"All hope abandon, ye who enter here!"'' | ||
+ | <br>Dante Alighieri, The Divine Comedy | ||
===Sissejuhatus ja tavapärane disklaimer=== | ===Sissejuhatus ja tavapärane disklaimer=== | ||
Rida 7: | Rida 10: | ||
*Käesolev juhend ei pretendeeri vähimalgi määral olema skritpimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema valmis skriptijuppide kogu, mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil. | *Käesolev juhend ei pretendeeri vähimalgi määral olema skritpimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema valmis skriptijuppide kogu, mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil. | ||
− | * | + | *CMD ja COMMAND süntaks on erakordslt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! |
*koodinäite ette paigutatud COMMAND tähendab, et antud skript on ühilduv command.com ja cmd.exe interpretaatoritega. Märge CMD tähistab ainult cmd.exe ühilduvat koodi. | *koodinäite ette paigutatud COMMAND tähendab, et antud skript on ühilduv command.com ja cmd.exe interpretaatoritega. Märge CMD tähistab ainult cmd.exe ühilduvat koodi. |
Redaktsioon: 25. november 2005, kell 09:38
CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke
"All hope abandon, ye who enter here!"
Dante Alighieri, The Divine Comedy
Sissejuhatus ja tavapärane disklaimer
- Käesolev juhend ei pretendeeri vähimalgi määral olema skritpimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema valmis skriptijuppide kogu, mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.
- CMD ja COMMAND süntaks on erakordslt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud!
- koodinäite ette paigutatud COMMAND tähendab, et antud skript on ühilduv command.com ja cmd.exe interpretaatoritega. Märge CMD tähistab ainult cmd.exe ühilduvat koodi.
COMMAND.COM
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator nimaga command.com. Command.com suhtleb kasutajaga dialoogrezhiimis (peale sisestusklahvi ENTER vajutamist täidetakse koheselt antud käsk ja väljastatakse tulemus). Command.com on UNIXist tuntud kestprogrammidega (bash, tcsh, sh, korn jne) võrreldes üsna primitiivne samuti on tema utiliitide komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, samuti pole standardsed sisend-väljundvood mõistlikult lahendatud jne.) Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. "batch" rezhiimis. Command.com interpretaatorisse ehitatud sisekäsud (näiteks DIR, COPY, DEL jne.) ja eraldi programmidena realiseeritud väliskäsud (MODE, APPEND jne.) moodustavad DOSi käsustiku. Kõiki DOSi sise ja väliskäske, samuti suvalisi käivitusfaile saab panna spetsiaalsesse skriptifaili (batch faili), mida command.com ridahaaval interpreteerib. Sellel rezhiimil täidetakse kõik käsud järjest, nii nagu nad failis on ja väljatatakse tulemused. Faili laiend peab olema .BAT, sest mingil veidral põhjuselt tavatsevad kõik Microsfti operatsioonisüsteemid otsustada faili sisu üle tema laiendi alusel. Command.com on olemas ka Windows 9x seeria operatsioonisüsteemides. Command.com on 16-bitine käsuinterpretaator mis töötab real-modes v. Windowsi keskonnast käivitades virtual-real modes.
CMD.EXE
Koos täielikult 32bitise operatsioonisüsteemiga (NT 3.51) laskis Microsoft välja ka uue - 32bitise käsuinterpretaatori CMD. Kahjuks puudub mul täpsem informatsioon NT 3.51 eripärade kohta, seetõttu kehtib kõik järgnev NT4 ja uuemate (2K, XP, 2K3) kohta. CMD käsustik on command.com käskude ülemhulk. Eesti keeli: CMD oskab kõike seda mis COMMAND ja veel palju rohkem. Vahel nimetatakse CMD kasutamist ekslikult "DOSi käskudeks". See on vale, sest CMD on täisvereline 32bitine katstud rezhiimi kestprogramm - tõsi küll, harjumuspärastest Windowsi programmidest eristab teda graafilise liidese puudumine. Windows NT seeria koosseisus on olemas ka vana command.com mida jooksutatakse DOSi emulatsioonirezhiimil, aga ilma erivajaduseta pole põhjust seda kasutada. Ka CMD oskab käsujadasid täita "batch" rezhiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.
====Millal on otstarbekas käsuskripte kasutada.==== Ilmselt siis kui me soovime automatiseerida mõnda lihtsamat korduvat tegevust, mille jaoks pole mõtet hakata "päris" programmi kirjutama. Või soovime korduvalt teostada mõnda ülesannet mille tarbeks operatsioonisüsteemis on utiliit juba olemas, lihtsalt tema töö tuleks automatiseerida. Näiteks - mingi hosti korduv pingimine ja võrgukatkestuse korral häire saatmine. Failide massiline kopeerimine - lihtsamat sorti varundus. Suure hulga failide ümber nimetamine kindlate reeglite alusel. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea "masinakeelde", täidab ja väljastab tulemuse.
Sissejuhatuse lõpetuseks veel klassikaline näiteprogramm
COMMAND
@ECHO OFF ECHO Hello World
Esimene rida seab interpretaatori töörezhiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator muidu ka käsud). Teine rida väljastab teksti "Hello World".
Asudes tõsisemalt skriptima, on @ECHO OFF mõtekas esialgu välja kommmenteerida, et tõrgete tekkimisel näha, millise rea täitmisel viga tekkis.
COMMAND
REM @ECHO OFF ECHO Hello World
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.