<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://wiki.hinnavaatlus.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=194.204.62.228</id>
	<title>Hinnavaatlus.ee Wiki - Kasutaja kaastööd [et]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.hinnavaatlus.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=194.204.62.228"/>
	<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php/Eri:Kaast%C3%B6%C3%B6/194.204.62.228"/>
	<updated>2026-06-12T04:14:07Z</updated>
	<subtitle>Kasutaja kaastööd</subtitle>
	<generator>MediaWiki 1.35.13</generator>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2669</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2669"/>
		<updated>2005-11-29T20:58:55Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Sissejuhatus ja tavapärane disklaimer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
* Käesolev juhend ei pretendeeri vähimalgi määral olema skriptima õppimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema [[kokaraamat]], mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.&lt;br /&gt;
&lt;br /&gt;
* CMD ja COMMAND süntaks on erakordselt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! &lt;br /&gt;
&lt;br /&gt;
* Mõlemad keeled on üpris primitiivsed imperatiivsed keeled ja nendes lahenduse realiseerimise keerukus kasvab oluliselt kiiremini, kui ülesande keerukus.  See tähendab, et probleemide arenedes keerustumise suunas, tuleb paratamatult kätte piir, kus on mõistlik senine skript maha jätta ja probleemi tuum realiseerida mõnes 'päris' keeles.  Ära kunagi karda seda sammu!&lt;br /&gt;
&lt;br /&gt;
* 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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator command.com. Command.com suhtleb kasutajaga dialoogrežiimis (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 (aka väliskäskude) komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, MS-DOS'i ainutegumilise iseloomu tõttu pole standardsete sisend-väljundvoogude realisatsioon kuigi mõistlik jne.)  Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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 Microsofti operatsioonisüsteemid otsustada faili sisu üle tema laiendi alusel.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. See on vale, sest CMD on täisvereline 32bitine kaitstud 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 MS-DOSi emuleerimise keskkonnas, aga ilma erivajaduseta pole põhjust seda kasutada. Ka CMD oskab käsujadasid täita &amp;quot;batch&amp;quot; režiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada?====&lt;br /&gt;
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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
====Miks on nendel juhtudel otstarbekas käsuskripte kasutada?====&lt;br /&gt;
Peamised asjaolud, mis käsuskriptid kasulikuks teeb, on:&lt;br /&gt;
* nende interpretaator tuleb Microsofti operatsioonisüsteemiga kaasa;&lt;br /&gt;
* nende keel on sarnane kõnealuse operatsioonisüsteemi tavalisele käsureale.&lt;br /&gt;
&lt;br /&gt;
Esimene nendest asjaoludest annab käsuskriptidele teiste keelte ees teatava logistilise eelise, teine jälle mõtteilma-eelise -- inimesel, kes oskab käsuridu efektiivselt kasutada, on käsuskriptikeele õppimine veidi lihtsam, kui mõne teise keele õppimine.  Aga paljudes olukordades ei rakendu kumbki nendest eelistest ja skripte võib olla kasulik kirjutada [[Perl]]is, [[VBScript]]is või [[Bash]]is.&lt;br /&gt;
&lt;br /&gt;
====Sissejuhatuse lõpetuseks klassikaline näiteprogramm====&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörežiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator ka käsud päras muutujate laiendamist -- see on silumisel väga abiks). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.  Keerukamate skriptide puhul tasub ka kajamise ajutist sisselülitamist kahtlase skriptiosa ümber -- käsu &amp;quot;@ECHO OFF&amp;quot; paariline on &amp;quot;@ECHO ON&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtusena ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2668</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2668"/>
		<updated>2005-11-29T20:44:28Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* CMD.EXE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
* Käesolev juhend ei pretendeeri vähimalgi määral olema skriptima õppimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema [[kokaraamat]], mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.&lt;br /&gt;
&lt;br /&gt;
* CMD ja COMMAND süntaks on erakordselt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! &lt;br /&gt;
&lt;br /&gt;
* Mõlemad keeled on üpris primitiivsed ja nendes lahenduse realiseerimise keerukus kasvab oluliselt kiiremini, kui ülesande keerukus.  See tähendab, et probleemide arenedes keerustumise suunas, tuleb paratamatult kätte piir, kus on mõistlik senine skript maha jätta ja probleemi tuum realiseerida mõnes 'päris' keeles.  Ära kunagi karda seda sammu!&lt;br /&gt;
&lt;br /&gt;
* 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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator command.com. Command.com suhtleb kasutajaga dialoogrežiimis (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 (aka väliskäskude) komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, MS-DOS'i ainutegumilise iseloomu tõttu pole standardsete sisend-väljundvoogude realisatsioon kuigi mõistlik jne.)  Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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 Microsofti operatsioonisüsteemid otsustada faili sisu üle tema laiendi alusel.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. See on vale, sest CMD on täisvereline 32bitine kaitstud 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 MS-DOSi emuleerimise keskkonnas, aga ilma erivajaduseta pole põhjust seda kasutada. Ka CMD oskab käsujadasid täita &amp;quot;batch&amp;quot; režiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada?====&lt;br /&gt;
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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
====Miks on nendel juhtudel otstarbekas käsuskripte kasutada?====&lt;br /&gt;
Peamised asjaolud, mis käsuskriptid kasulikuks teeb, on:&lt;br /&gt;
* nende interpretaator tuleb Microsofti operatsioonisüsteemiga kaasa;&lt;br /&gt;
* nende keel on sarnane kõnealuse operatsioonisüsteemi tavalisele käsureale.&lt;br /&gt;
&lt;br /&gt;
Esimene nendest asjaoludest annab käsuskriptidele teiste keelte ees teatava logistilise eelise, teine jälle mõtteilma-eelise -- inimesel, kes oskab käsuridu efektiivselt kasutada, on käsuskriptikeele õppimine veidi lihtsam, kui mõne teise keele õppimine.  Aga paljudes olukordades ei rakendu kumbki nendest eelistest ja skripte võib olla kasulik kirjutada [[Perl]]is, [[VBScript]]is või [[Bash]]is.&lt;br /&gt;
&lt;br /&gt;
====Sissejuhatuse lõpetuseks klassikaline näiteprogramm====&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörežiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator ka käsud päras muutujate laiendamist -- see on silumisel väga abiks). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.  Keerukamate skriptide puhul tasub ka kajamise ajutist sisselülitamist kahtlase skriptiosa ümber -- käsu &amp;quot;@ECHO OFF&amp;quot; paariline on &amp;quot;@ECHO ON&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtusena ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2667</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2667"/>
		<updated>2005-11-29T20:43:42Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* CMD.EXE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
* Käesolev juhend ei pretendeeri vähimalgi määral olema skriptima õppimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema [[kokaraamat]], mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.&lt;br /&gt;
&lt;br /&gt;
* CMD ja COMMAND süntaks on erakordselt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! &lt;br /&gt;
&lt;br /&gt;
* Mõlemad keeled on üpris primitiivsed ja nendes lahenduse realiseerimise keerukus kasvab oluliselt kiiremini, kui ülesande keerukus.  See tähendab, et probleemide arenedes keerustumise suunas, tuleb paratamatult kätte piir, kus on mõistlik senine skript maha jätta ja probleemi tuum realiseerida mõnes 'päris' keeles.  Ära kunagi karda seda sammu!&lt;br /&gt;
&lt;br /&gt;
* 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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator command.com. Command.com suhtleb kasutajaga dialoogrežiimis (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 (aka väliskäskude) komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, MS-DOS'i ainutegumilise iseloomu tõttu pole standardsete sisend-väljundvoogude realisatsioon kuigi mõistlik jne.)  Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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 Microsofti operatsioonisüsteemid otsustada faili sisu üle tema laiendi alusel.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. See on vale, sest CMD on täisvereline 32bitine kaitstud 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 MS-DOSi emuleerimise rezhiimil, aga ilma erivajaduseta pole põhjust seda kasutada. Ka CMD oskab käsujadasid täita &amp;quot;batch&amp;quot; režiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada?====&lt;br /&gt;
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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
====Miks on nendel juhtudel otstarbekas käsuskripte kasutada?====&lt;br /&gt;
Peamised asjaolud, mis käsuskriptid kasulikuks teeb, on:&lt;br /&gt;
* nende interpretaator tuleb Microsofti operatsioonisüsteemiga kaasa;&lt;br /&gt;
* nende keel on sarnane kõnealuse operatsioonisüsteemi tavalisele käsureale.&lt;br /&gt;
&lt;br /&gt;
Esimene nendest asjaoludest annab käsuskriptidele teiste keelte ees teatava logistilise eelise, teine jälle mõtteilma-eelise -- inimesel, kes oskab käsuridu efektiivselt kasutada, on käsuskriptikeele õppimine veidi lihtsam, kui mõne teise keele õppimine.  Aga paljudes olukordades ei rakendu kumbki nendest eelistest ja skripte võib olla kasulik kirjutada [[Perl]]is, [[VBScript]]is või [[Bash]]is.&lt;br /&gt;
&lt;br /&gt;
====Sissejuhatuse lõpetuseks klassikaline näiteprogramm====&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörežiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator ka käsud päras muutujate laiendamist -- see on silumisel väga abiks). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.  Keerukamate skriptide puhul tasub ka kajamise ajutist sisselülitamist kahtlase skriptiosa ümber -- käsu &amp;quot;@ECHO OFF&amp;quot; paariline on &amp;quot;@ECHO ON&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtusena ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2666</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2666"/>
		<updated>2005-11-29T20:43:23Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* COMMAND.COM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
* Käesolev juhend ei pretendeeri vähimalgi määral olema skriptima õppimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema [[kokaraamat]], mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.&lt;br /&gt;
&lt;br /&gt;
* CMD ja COMMAND süntaks on erakordselt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! &lt;br /&gt;
&lt;br /&gt;
* Mõlemad keeled on üpris primitiivsed ja nendes lahenduse realiseerimise keerukus kasvab oluliselt kiiremini, kui ülesande keerukus.  See tähendab, et probleemide arenedes keerustumise suunas, tuleb paratamatult kätte piir, kus on mõistlik senine skript maha jätta ja probleemi tuum realiseerida mõnes 'päris' keeles.  Ära kunagi karda seda sammu!&lt;br /&gt;
&lt;br /&gt;
* 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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator command.com. Command.com suhtleb kasutajaga dialoogrežiimis (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 (aka väliskäskude) komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, MS-DOS'i ainutegumilise iseloomu tõttu pole standardsete sisend-väljundvoogude realisatsioon kuigi mõistlik jne.)  Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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 Microsofti operatsioonisüsteemid otsustada faili sisu üle tema laiendi alusel.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. See on vale, sest CMD on täisvereline 32bitine kaitstud 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 MSDOSi emuleerimise rezhiimil, aga ilma erivajaduseta pole põhjust seda kasutada. Ka CMD oskab käsujadasid täita &amp;quot;batch&amp;quot; režiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada?====&lt;br /&gt;
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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
====Miks on nendel juhtudel otstarbekas käsuskripte kasutada?====&lt;br /&gt;
Peamised asjaolud, mis käsuskriptid kasulikuks teeb, on:&lt;br /&gt;
* nende interpretaator tuleb Microsofti operatsioonisüsteemiga kaasa;&lt;br /&gt;
* nende keel on sarnane kõnealuse operatsioonisüsteemi tavalisele käsureale.&lt;br /&gt;
&lt;br /&gt;
Esimene nendest asjaoludest annab käsuskriptidele teiste keelte ees teatava logistilise eelise, teine jälle mõtteilma-eelise -- inimesel, kes oskab käsuridu efektiivselt kasutada, on käsuskriptikeele õppimine veidi lihtsam, kui mõne teise keele õppimine.  Aga paljudes olukordades ei rakendu kumbki nendest eelistest ja skripte võib olla kasulik kirjutada [[Perl]]is, [[VBScript]]is või [[Bash]]is.&lt;br /&gt;
&lt;br /&gt;
====Sissejuhatuse lõpetuseks klassikaline näiteprogramm====&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörežiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator ka käsud päras muutujate laiendamist -- see on silumisel väga abiks). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.  Keerukamate skriptide puhul tasub ka kajamise ajutist sisselülitamist kahtlase skriptiosa ümber -- käsu &amp;quot;@ECHO OFF&amp;quot; paariline on &amp;quot;@ECHO ON&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtusena ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2665</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2665"/>
		<updated>2005-11-29T20:42:46Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* CMD.EXE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
* Käesolev juhend ei pretendeeri vähimalgi määral olema skriptima õppimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema [[kokaraamat]], mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.&lt;br /&gt;
&lt;br /&gt;
* CMD ja COMMAND süntaks on erakordselt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! &lt;br /&gt;
&lt;br /&gt;
* Mõlemad keeled on üpris primitiivsed ja nendes lahenduse realiseerimise keerukus kasvab oluliselt kiiremini, kui ülesande keerukus.  See tähendab, et probleemide arenedes keerustumise suunas, tuleb paratamatult kätte piir, kus on mõistlik senine skript maha jätta ja probleemi tuum realiseerida mõnes 'päris' keeles.  Ära kunagi karda seda sammu!&lt;br /&gt;
&lt;br /&gt;
* 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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator command.com. Command.com suhtleb kasutajaga dialoogrežiimis (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 (aka väliskäskude) komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, DOS'i ainutegumilise iseloomu tõttu pole standardsete sisend-väljundvoogude realisatsioon kuigi mõistlik jne.)  Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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 Microsofti operatsioonisüsteemid otsustada faili sisu üle tema laiendi alusel.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. See on vale, sest CMD on täisvereline 32bitine kaitstud 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 MSDOSi emuleerimise rezhiimil, aga ilma erivajaduseta pole põhjust seda kasutada. Ka CMD oskab käsujadasid täita &amp;quot;batch&amp;quot; režiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada?====&lt;br /&gt;
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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
====Miks on nendel juhtudel otstarbekas käsuskripte kasutada?====&lt;br /&gt;
Peamised asjaolud, mis käsuskriptid kasulikuks teeb, on:&lt;br /&gt;
* nende interpretaator tuleb Microsofti operatsioonisüsteemiga kaasa;&lt;br /&gt;
* nende keel on sarnane kõnealuse operatsioonisüsteemi tavalisele käsureale.&lt;br /&gt;
&lt;br /&gt;
Esimene nendest asjaoludest annab käsuskriptidele teiste keelte ees teatava logistilise eelise, teine jälle mõtteilma-eelise -- inimesel, kes oskab käsuridu efektiivselt kasutada, on käsuskriptikeele õppimine veidi lihtsam, kui mõne teise keele õppimine.  Aga paljudes olukordades ei rakendu kumbki nendest eelistest ja skripte võib olla kasulik kirjutada [[Perl]]is, [[VBScript]]is või [[Bash]]is.&lt;br /&gt;
&lt;br /&gt;
====Sissejuhatuse lõpetuseks klassikaline näiteprogramm====&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörežiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator ka käsud päras muutujate laiendamist -- see on silumisel väga abiks). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.  Keerukamate skriptide puhul tasub ka kajamise ajutist sisselülitamist kahtlase skriptiosa ümber -- käsu &amp;quot;@ECHO OFF&amp;quot; paariline on &amp;quot;@ECHO ON&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtusena ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2664</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2664"/>
		<updated>2005-11-29T20:37:08Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* CMD.EXE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
* Käesolev juhend ei pretendeeri vähimalgi määral olema skriptima õppimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema [[kokaraamat]], mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.&lt;br /&gt;
&lt;br /&gt;
* CMD ja COMMAND süntaks on erakordselt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! &lt;br /&gt;
&lt;br /&gt;
* Mõlemad keeled on üpris primitiivsed ja nendes lahenduse realiseerimise keerukus kasvab oluliselt kiiremini, kui ülesande keerukus.  See tähendab, et probleemide arenedes keerustumise suunas, tuleb paratamatult kätte piir, kus on mõistlik senine skript maha jätta ja probleemi tuum realiseerida mõnes 'päris' keeles.  Ära kunagi karda seda sammu!&lt;br /&gt;
&lt;br /&gt;
* 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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator command.com. Command.com suhtleb kasutajaga dialoogrežiimis (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 (aka väliskäskude) komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, DOS'i ainutegumilise iseloomu tõttu pole standardsete sisend-väljundvoogude realisatsioon kuigi mõistlik jne.)  Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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 Microsofti operatsioonisüsteemid otsustada faili sisu üle tema laiendi alusel.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. See on vale, sest CMD on täisvereline 32bitine kaitstud 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 &amp;quot;batch&amp;quot; režiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada?====&lt;br /&gt;
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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
====Miks on nendel juhtudel otstarbekas käsuskripte kasutada?====&lt;br /&gt;
Peamised asjaolud, mis käsuskriptid kasulikuks teeb, on:&lt;br /&gt;
* nende interpretaator tuleb Microsofti operatsioonisüsteemiga kaasa;&lt;br /&gt;
* nende keel on sarnane kõnealuse operatsioonisüsteemi tavalisele käsureale.&lt;br /&gt;
&lt;br /&gt;
Esimene nendest asjaoludest annab käsuskriptidele teiste keelte ees teatava logistilise eelise, teine jälle mõtteilma-eelise -- inimesel, kes oskab käsuridu efektiivselt kasutada, on käsuskriptikeele õppimine veidi lihtsam, kui mõne teise keele õppimine.  Aga paljudes olukordades ei rakendu kumbki nendest eelistest ja skripte võib olla kasulik kirjutada [[Perl]]is, [[VBScript]]is või [[Bash]]is.&lt;br /&gt;
&lt;br /&gt;
====Sissejuhatuse lõpetuseks klassikaline näiteprogramm====&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörežiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator ka käsud päras muutujate laiendamist -- see on silumisel väga abiks). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.  Keerukamate skriptide puhul tasub ka kajamise ajutist sisselülitamist kahtlase skriptiosa ümber -- käsu &amp;quot;@ECHO OFF&amp;quot; paariline on &amp;quot;@ECHO ON&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtusena ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2663</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2663"/>
		<updated>2005-11-29T20:35:02Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* COMMAND.COM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
* Käesolev juhend ei pretendeeri vähimalgi määral olema skriptima õppimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema [[kokaraamat]], mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.&lt;br /&gt;
&lt;br /&gt;
* CMD ja COMMAND süntaks on erakordselt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! &lt;br /&gt;
&lt;br /&gt;
* Mõlemad keeled on üpris primitiivsed ja nendes lahenduse realiseerimise keerukus kasvab oluliselt kiiremini, kui ülesande keerukus.  See tähendab, et probleemide arenedes keerustumise suunas, tuleb paratamatult kätte piir, kus on mõistlik senine skript maha jätta ja probleemi tuum realiseerida mõnes 'päris' keeles.  Ära kunagi karda seda sammu!&lt;br /&gt;
&lt;br /&gt;
* 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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator command.com. Command.com suhtleb kasutajaga dialoogrežiimis (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 (aka väliskäskude) komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, DOS'i ainutegumilise iseloomu tõttu pole standardsete sisend-väljundvoogude realisatsioon kuigi mõistlik jne.)  Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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 Microsofti operatsioonisüsteemid otsustada faili sisu üle tema laiendi alusel.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. 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 &amp;quot;batch&amp;quot; režiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada?====&lt;br /&gt;
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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
====Miks on nendel juhtudel otstarbekas käsuskripte kasutada?====&lt;br /&gt;
Peamised asjaolud, mis käsuskriptid kasulikuks teeb, on:&lt;br /&gt;
* nende interpretaator tuleb Microsofti operatsioonisüsteemiga kaasa;&lt;br /&gt;
* nende keel on sarnane kõnealuse operatsioonisüsteemi tavalisele käsureale.&lt;br /&gt;
&lt;br /&gt;
Esimene nendest asjaoludest annab käsuskriptidele teiste keelte ees teatava logistilise eelise, teine jälle mõtteilma-eelise -- inimesel, kes oskab käsuridu efektiivselt kasutada, on käsuskriptikeele õppimine veidi lihtsam, kui mõne teise keele õppimine.  Aga paljudes olukordades ei rakendu kumbki nendest eelistest ja skripte võib olla kasulik kirjutada [[Perl]]is, [[VBScript]]is või [[Bash]]is.&lt;br /&gt;
&lt;br /&gt;
====Sissejuhatuse lõpetuseks klassikaline näiteprogramm====&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörežiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator ka käsud päras muutujate laiendamist -- see on silumisel väga abiks). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.  Keerukamate skriptide puhul tasub ka kajamise ajutist sisselülitamist kahtlase skriptiosa ümber -- käsu &amp;quot;@ECHO OFF&amp;quot; paariline on &amp;quot;@ECHO ON&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtusena ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2662</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2662"/>
		<updated>2005-11-29T20:25:59Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Sissejuhatus ja tavapärane disklaimer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
* Käesolev juhend ei pretendeeri vähimalgi määral olema skriptima õppimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema [[kokaraamat]], mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.&lt;br /&gt;
&lt;br /&gt;
* CMD ja COMMAND süntaks on erakordselt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! &lt;br /&gt;
&lt;br /&gt;
* Mõlemad keeled on üpris primitiivsed ja nendes lahenduse realiseerimise keerukus kasvab oluliselt kiiremini, kui ülesande keerukus.  See tähendab, et probleemide arenedes keerustumise suunas, tuleb paratamatult kätte piir, kus on mõistlik senine skript maha jätta ja probleemi tuum realiseerida mõnes 'päris' keeles.  Ära kunagi karda seda sammu!&lt;br /&gt;
&lt;br /&gt;
* 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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator command.com. Command.com suhtleb kasutajaga dialoogrežiimis (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 (aka väliskäskude) komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, DOS'i ainutegumilise iseloomu tõttu pole standardsete sisend-väljundvoogude realisatsioon kuigi mõistlik jne.)  Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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 Microsofti operatsioonisüsteemid otsustada faili sisu üle tema laiendi alusel.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. 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 &amp;quot;batch&amp;quot; režiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada?====&lt;br /&gt;
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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
====Miks on nendel juhtudel otstarbekas käsuskripte kasutada?====&lt;br /&gt;
Peamised asjaolud, mis käsuskriptid kasulikuks teeb, on:&lt;br /&gt;
* nende interpretaator tuleb Microsofti operatsioonisüsteemiga kaasa;&lt;br /&gt;
* nende keel on sarnane kõnealuse operatsioonisüsteemi tavalisele käsureale.&lt;br /&gt;
&lt;br /&gt;
Esimene nendest asjaoludest annab käsuskriptidele teiste keelte ees teatava logistilise eelise, teine jälle mõtteilma-eelise -- inimesel, kes oskab käsuridu efektiivselt kasutada, on käsuskriptikeele õppimine veidi lihtsam, kui mõne teise keele õppimine.  Aga paljudes olukordades ei rakendu kumbki nendest eelistest ja skripte võib olla kasulik kirjutada [[Perl]]is, [[VBScript]]is või [[Bash]]is.&lt;br /&gt;
&lt;br /&gt;
====Sissejuhatuse lõpetuseks klassikaline näiteprogramm====&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörežiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator ka käsud päras muutujate laiendamist -- see on silumisel väga abiks). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.  Keerukamate skriptide puhul tasub ka kajamise ajutist sisselülitamist kahtlase skriptiosa ümber -- käsu &amp;quot;@ECHO OFF&amp;quot; paariline on &amp;quot;@ECHO ON&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtusena ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2661</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2661"/>
		<updated>2005-11-29T20:25:16Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Sissejuhatus ja tavapärane disklaimer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
* Käesolev juhend ei pretendeeri vähimalgi määral olema skriptima õppimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema [[kokaraamat]], mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.&lt;br /&gt;
&lt;br /&gt;
* CMD ja COMMAND süntaks on erakordselt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! &lt;br /&gt;
&lt;br /&gt;
* Mõlemad keeled on üpris primitiivsed ja nendes lahenduse realiseerimise keerukus kasvab oluliselt kiiremini, kui ülesande keerukus.  See tähendab, et probleemide keerustumise suunas arenedes tuleb paratamatult kätte piir, kus on mõistlik senine skript maha jätta ja probleemi tuum realiseerida mõnes 'päris' keeles.  Ära kunagi karda seda sammu!&lt;br /&gt;
&lt;br /&gt;
* 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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator command.com. Command.com suhtleb kasutajaga dialoogrežiimis (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 (aka väliskäskude) komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, DOS'i ainutegumilise iseloomu tõttu pole standardsete sisend-väljundvoogude realisatsioon kuigi mõistlik jne.)  Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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 Microsofti operatsioonisüsteemid otsustada faili sisu üle tema laiendi alusel.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. 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 &amp;quot;batch&amp;quot; režiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada?====&lt;br /&gt;
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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
====Miks on nendel juhtudel otstarbekas käsuskripte kasutada?====&lt;br /&gt;
Peamised asjaolud, mis käsuskriptid kasulikuks teeb, on:&lt;br /&gt;
* nende interpretaator tuleb Microsofti operatsioonisüsteemiga kaasa;&lt;br /&gt;
* nende keel on sarnane kõnealuse operatsioonisüsteemi tavalisele käsureale.&lt;br /&gt;
&lt;br /&gt;
Esimene nendest asjaoludest annab käsuskriptidele teiste keelte ees teatava logistilise eelise, teine jälle mõtteilma-eelise -- inimesel, kes oskab käsuridu efektiivselt kasutada, on käsuskriptikeele õppimine veidi lihtsam, kui mõne teise keele õppimine.  Aga paljudes olukordades ei rakendu kumbki nendest eelistest ja skripte võib olla kasulik kirjutada [[Perl]]is, [[VBScript]]is või [[Bash]]is.&lt;br /&gt;
&lt;br /&gt;
====Sissejuhatuse lõpetuseks klassikaline näiteprogramm====&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörežiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator ka käsud päras muutujate laiendamist -- see on silumisel väga abiks). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.  Keerukamate skriptide puhul tasub ka kajamise ajutist sisselülitamist kahtlase skriptiosa ümber -- käsu &amp;quot;@ECHO OFF&amp;quot; paariline on &amp;quot;@ECHO ON&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtusena ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2660</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2660"/>
		<updated>2005-11-29T20:21:25Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Sissejuhatus ja tavapärane disklaimer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
* Käesolev juhend ei pretendeeri vähimalgi määral olema skriptima õppimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema [[kokaraamat]], mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.&lt;br /&gt;
&lt;br /&gt;
* CMD ja COMMAND süntaks on erakordselt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! &lt;br /&gt;
&lt;br /&gt;
* Mõlemad keeled on üpris primitiivsed ja nendes tõsise programmeerimise keerukus kasvab oluliselt kiiremini, kui selle programmeerimise tulu.  See tähendab, et probleemide keerustumise suunas arenedes tuleb paratamatult kätte piir, kus on mõistlik senine skript maha jätta ja probleemi tuum realiseerida mõnes 'päris' keeles.  Ära kunagi karda seda sammu!&lt;br /&gt;
&lt;br /&gt;
* 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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator command.com. Command.com suhtleb kasutajaga dialoogrežiimis (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 (aka väliskäskude) komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, DOS'i ainutegumilise iseloomu tõttu pole standardsete sisend-väljundvoogude realisatsioon kuigi mõistlik jne.)  Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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 Microsofti operatsioonisüsteemid otsustada faili sisu üle tema laiendi alusel.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. 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 &amp;quot;batch&amp;quot; režiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada?====&lt;br /&gt;
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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
====Miks on nendel juhtudel otstarbekas käsuskripte kasutada?====&lt;br /&gt;
Peamised asjaolud, mis käsuskriptid kasulikuks teeb, on:&lt;br /&gt;
* nende interpretaator tuleb Microsofti operatsioonisüsteemiga kaasa;&lt;br /&gt;
* nende keel on sarnane kõnealuse operatsioonisüsteemi tavalisele käsureale.&lt;br /&gt;
&lt;br /&gt;
Esimene nendest asjaoludest annab käsuskriptidele teiste keelte ees teatava logistilise eelise, teine jälle mõtteilma-eelise -- inimesel, kes oskab käsuridu efektiivselt kasutada, on käsuskriptikeele õppimine veidi lihtsam, kui mõne teise keele õppimine.  Aga paljudes olukordades ei rakendu kumbki nendest eelistest ja skripte võib olla kasulik kirjutada [[Perl]]is, [[VBScript]]is või [[Bash]]is.&lt;br /&gt;
&lt;br /&gt;
====Sissejuhatuse lõpetuseks klassikaline näiteprogramm====&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörežiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator ka käsud päras muutujate laiendamist -- see on silumisel väga abiks). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.  Keerukamate skriptide puhul tasub ka kajamise ajutist sisselülitamist kahtlase skriptiosa ümber -- käsu &amp;quot;@ECHO OFF&amp;quot; paariline on &amp;quot;@ECHO ON&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtusena ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2658</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2658"/>
		<updated>2005-11-29T19:36:13Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* COMMAND.COM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
* Käesolev juhend ei pretendeeri vähimalgi määral olema skriptima õppimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema [[kokaraamat]], mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.&lt;br /&gt;
&lt;br /&gt;
* CMD ja COMMAND süntaks on erakordselt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! &lt;br /&gt;
&lt;br /&gt;
* Need mõlemad keeled on üpris primitiivsed ja nendes tõsine programmeerimise keerukus kasvab oluliselt kiiremini, kui selle programmeerimise tulu.  See tähendab, et probleemide keerustumise suunas arenedes tuleb paratamatult kätte piir, kus on mõistlik senine skript maha jätta ja probleemi tuum realiseerida mõnes 'päris' keeles.  Ära kunagi karda seda sammu!&lt;br /&gt;
&lt;br /&gt;
* 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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator command.com. Command.com suhtleb kasutajaga dialoogrežiimis (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 (aka väliskäskude) komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, DOS'i ainutegumilise iseloomu tõttu pole standardsete sisend-väljundvoogude realisatsioon kuigi mõistlik jne.)  Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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 Microsofti operatsioonisüsteemid otsustada faili sisu üle tema laiendi alusel.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. 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 &amp;quot;batch&amp;quot; režiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada?====&lt;br /&gt;
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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
====Miks on nendel juhtudel otstarbekas käsuskripte kasutada?====&lt;br /&gt;
Peamised asjaolud, mis käsuskriptid kasulikuks teeb, on:&lt;br /&gt;
* nende interpretaator tuleb Microsofti operatsioonisüsteemiga kaasa;&lt;br /&gt;
* nende keel on sarnane kõnealuse operatsioonisüsteemi tavalisele käsureale.&lt;br /&gt;
&lt;br /&gt;
Esimene nendest asjaoludest annab käsuskriptidele teiste keelte ees teatava logistilise eelise, teine jälle mõtteilma-eelise -- inimesel, kes oskab käsuridu efektiivselt kasutada, on käsuskriptikeele õppimine veidi lihtsam, kui mõne teise keele õppimine.  Aga paljudes olukordades ei rakendu kumbki nendest eelistest ja skripte võib olla kasulik kirjutada [Perl]is, [VBScript]is või [Bash]is.&lt;br /&gt;
&lt;br /&gt;
Sissejuhatuse lõpetuseks veel klassikaline näiteprogramm&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörežiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator ka käsud päras muutujate laiendamist -- see on silumisel väga abiks). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.  Keerukamate skriptide puhul tasub ka kajamise ajutist sisselülitamist kahtlase skriptiosa ümber -- käsu &amp;quot;@ECHO OFF&amp;quot; paariline on &amp;quot;@ECHO ON&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtusena ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2657</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2657"/>
		<updated>2005-11-29T19:35:17Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* COMMAND.COM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
* Käesolev juhend ei pretendeeri vähimalgi määral olema skriptima õppimise juhend algajatele, kuigi sissejuhatuses on toodud mõned selgitavad märkused. Eelkõige peaks see olema [[kokaraamat]], mida algaja skriptija saab mõne keerukama tüüpülesande jaoks kasutada lihtsalt copy-paste abil.&lt;br /&gt;
&lt;br /&gt;
* CMD ja COMMAND süntaks on erakordselt jube ja kultiveerib erakordselt halbu programeerimisharjumusi (eeldefineerimata muutujate kasutamine, tüübistamata muutujad, GOTO kasutamine jne.) Teid on hoiatatud! &lt;br /&gt;
&lt;br /&gt;
* Need mõlemad keeled on üpris primitiivsed ja nendes tõsine programmeerimise keerukus kasvab oluliselt kiiremini, kui selle programmeerimise tulu.  See tähendab, et probleemide keerustumise suunas arenedes tuleb paratamatult kätte piir, kus on mõistlik senine skript maha jätta ja probleemi tuum realiseerida mõnes 'päris' keeles.  Ära kunagi karda seda sammu!&lt;br /&gt;
&lt;br /&gt;
* 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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
MS-DOS operatsioonisüsteemi kestaks (shell) on käsuinterpretaator command.com. Command.com suhtleb kasutajaga dialoogrežiimis (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 (aka väliskäskude) komplekt kehvapoolne (puuduvad näiteks mõistlikud stringitöötluse vahendid, DOS'i ainutegumilise iseloomu tõttu pole standardsete sisend-väljundvoogude realisatsioon kuigi mõistlik jne.)  Siiski on command.com abil võimalik ühte-teist korda saata. Abiks on siinkohal command.com oskus töödelda käske nn. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. 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 &amp;quot;batch&amp;quot; režiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada?====&lt;br /&gt;
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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
====Miks on nendel juhtudel otstarbekas käsuskripte kasutada?====&lt;br /&gt;
Peamised asjaolud, mis käsuskriptid kasulikuks teeb, on:&lt;br /&gt;
* nende interpretaator tuleb Microsofti operatsioonisüsteemiga kaasa;&lt;br /&gt;
* nende keel on sarnane kõnealuse operatsioonisüsteemi tavalisele käsureale.&lt;br /&gt;
&lt;br /&gt;
Esimene nendest asjaoludest annab käsuskriptidele teiste keelte ees teatava logistilise eelise, teine jälle mõtteilma-eelise -- inimesel, kes oskab käsuridu efektiivselt kasutada, on käsuskriptikeele õppimine veidi lihtsam, kui mõne teise keele õppimine.  Aga paljudes olukordades ei rakendu kumbki nendest eelistest ja skripte võib olla kasulik kirjutada [Perl]is, [VBScript]is või [Bash]is.&lt;br /&gt;
&lt;br /&gt;
Sissejuhatuse lõpetuseks veel klassikaline näiteprogramm&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörežiimile kus väljastatakse ainult see mida käskudel öelda on (vaikimisi väljastab interpretaator ka käsud päras muutujate laiendamist -- see on silumisel väga abiks). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.  Keerukamate skriptide puhul tasub ka kajamise ajutist sisselülitamist kahtlase skriptiosa ümber -- käsu &amp;quot;@ECHO OFF&amp;quot; paariline on &amp;quot;@ECHO ON&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtusena ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2650</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2650"/>
		<updated>2005-11-28T07:26:01Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Rekursiivne DIR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
*Käesolev juhend ei pretendeeri vähimalgi määral olema skritpima õppimise 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.&lt;br /&gt;
&lt;br /&gt;
*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! &lt;br /&gt;
&lt;br /&gt;
*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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
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. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. 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 &amp;quot;batch&amp;quot; rezhiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada.==== Ilmselt siis kui me soovime automatiseerida mõnda lihtsamat korduvat tegevust, mille jaoks pole mõtet hakata &amp;quot;päris&amp;quot; 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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
Sissejuhatuse lõpetuseks veel klassikaline näiteprogramm&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
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 &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;br /&gt;
&lt;br /&gt;
===Muutujate hilistatud väärtustamine===&lt;br /&gt;
&lt;br /&gt;
CMD interpretaatoril on jabur komme asendada muutjad nende väärtustega, mitte siis, kui koodirida täidetakse vaid siis kui rida interpreteerimiseks ja täitmiseks mällu loetakse. Tegelikult on võimalik sundida CMD-d käituma &amp;quot;päris&amp;quot; interpretaatorite moodi - muutujad asendadatakse nende väärtustega interpreteerimise käigus. Paraku ei ole Microsofti programeerijad suutnud vastavat algoritmi korralikult implementeerida ja &amp;quot;hilistatud väärtustamise&amp;quot; rezhiimis on koodi täitmine väga aeglane. Seetõttu on see võimalus vaikimisi välja lülitatud. Sisse on seda võimalik lülitada, kutsudes CMD välja võtmega /V&lt;br /&gt;
 CMD /V:ON&lt;br /&gt;
Jäigalt saab hilistatud väärtustamise sisse lülitada muutes registry võtmete&lt;br /&gt;
 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(süsteemselt) või&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion&lt;br /&gt;
(kasutajapõhiselt) väärtust 0x0 (disabled) või 0x1 (enabled)&lt;br /&gt;
Viimane tegevus pole siiski soovitav, sest nagu öeldud - skripti interpreteerimine muutub KORDADES aeglasemaks. Hilistatud väärtustamise kasutamiseks on mõtekas võtmega /V:ON välja kutusuda alamshell ja tulemused tagastada failis (alamshell ei päranda muutujaid vanemale!).&lt;br /&gt;
&lt;br /&gt;
Vaatleme niisugust näidet:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=%LIST% %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
Tundub, et meie muutuja &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; väärtuseks peaks saama jooksvas kataloogis asuvate failide nimekiri. Ometi näeme me muutjas &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; sees ainult viimast leitud faili. Miks? Sest CMD väärtustab &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; FOR-tsükli lugemisel (sel hetkel sisaldab see tühja väärtust), mitte täitmisel.&lt;br /&gt;
Meil oleks tarvis, et &amp;lt;tt&amp;gt;%LIST%&amp;lt;/tt&amp;gt; saaks väärtuse FOR-tsükli IGAL täitmisel. Siin tulebki appi hilistatud väärtustamise rezhiim:&lt;br /&gt;
&amp;lt;br&amp;gt;CMD /V:ON&lt;br /&gt;
 set LIST=&lt;br /&gt;
 for %i in (*) do set LIST=!LIST! %i&lt;br /&gt;
 echo %LIST%&lt;br /&gt;
See skript annab juba oodatud tulemuse. Paneme tähele, et lisaks sellele, et meil on interpretaator vaja välja kutsuda õige võtmega, tuleb ka &amp;quot;hilistatud&amp;quot; muutuja välja kutsuda teist moodi kui &amp;quot;tavaline&amp;quot; muutuja -- &amp;lt;tt&amp;gt;!LIST!&amp;lt;/tt&amp;gt;&lt;br /&gt;
Hilistatud muutujaid kasutatakse siis kui &amp;lt;tt&amp;gt;IF-(foo)&amp;lt;/tt&amp;gt; või &amp;lt;tt&amp;gt;FOR-DO&amp;lt;/tt&amp;gt; skoobis on tarvilik väärtustada muutuja ja siis muutuja väärtust samas skoobis uuesti kasutada.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2635</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2635"/>
		<updated>2005-11-25T15:31:29Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Millal on otstarbekas käsuskripte kasutada. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
*Käesolev juhend ei pretendeeri vähimalgi määral olema skritpima õppimise 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.&lt;br /&gt;
&lt;br /&gt;
*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! &lt;br /&gt;
&lt;br /&gt;
*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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
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. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. 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 &amp;quot;batch&amp;quot; rezhiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada.==== Ilmselt siis kui me soovime automatiseerida mõnda lihtsamat korduvat tegevust, mille jaoks pole mõtet hakata &amp;quot;päris&amp;quot; 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 vms. Samuti on CMD skript abiks Windows Active Directory administreerimisel. Microsoft ise soovitab selleks otstarbeks kasutada Windows Scripting Host interpretaatorile kirjutatud VBScripti, kuid siin on yks pisikene &amp;quot;AGA&amp;quot;. Vahel on tarvis kõikides domeeni kuuluvates masinates jooksutada mingeid käske kellegi kõvema kui kasutaja õigustes. Selle jaoks pakub AD võimalust jooksutada skripte arvuti käivitamisel lokaalse kasutaja SYSTEM õigustes. Paraku - startupi ajal pole Windows Scripting Host veel laetud ja meil puudub keskkond/interpretaator VBScritpi täitmiseks. Kasutada saame CMD skripte. CMD/BAT skripti on ka lihtne muuta. Teda ei kompileerita kunagi - igal täitmisel loeb interpretaator skritpi rea kaupa, tõlgib rea &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
Sissejuhatuse lõpetuseks veel klassikaline näiteprogramm&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
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 &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2634</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2634"/>
		<updated>2005-11-25T15:20:56Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Sissejuhatus ja tavapärane disklaimer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
==CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke==&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;All hope abandon, ye who enter here!&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Dante Alighieri, The Divine Comedy&lt;br /&gt;
&lt;br /&gt;
===Sissejuhatus ja tavapärane disklaimer===&lt;br /&gt;
&lt;br /&gt;
*Käesolev juhend ei pretendeeri vähimalgi määral olema skritpima õppimise 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.&lt;br /&gt;
&lt;br /&gt;
*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! &lt;br /&gt;
&lt;br /&gt;
*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. Märge META tähistab metasüntaksis koodi. Näidetes leiduvad '''foo''' ja '''bar''' on üldlevinud metasüntaktilised muutujad. Eesti keeli: neid võib kasutada vabalt valitavate nimega failide, muutujate, alamprotseduuride jms. tähistamiseks või metasüntaksis kirjutatud näidetes.&lt;br /&gt;
&lt;br /&gt;
====COMMAND.COM====&lt;br /&gt;
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. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====CMD.EXE====&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. 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 &amp;quot;batch&amp;quot; rezhiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
====Millal on otstarbekas käsuskripte kasutada.==== Ilmselt siis kui me soovime automatiseerida mõnda lihtsamat korduvat tegevust, mille jaoks pole mõtet hakata &amp;quot;päris&amp;quot; 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 &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
Sissejuhatuse lõpetuseks veel klassikaline näiteprogramm&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
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 &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;br /&gt;
&lt;br /&gt;
==Nipid ja Trikid==&lt;br /&gt;
&lt;br /&gt;
===Kuidas tekitada tühja faili===&lt;br /&gt;
&lt;br /&gt;
Enamasti kasutatakse selleks umbes niisugust rida:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 echo. &amp;gt; foo.bar&lt;br /&gt;
Tegelikult annab see rida väära st. ülesande tingimustega kokkusobimatu tulemuse, kuna silma järgi tyhjas failis on tegelikult yks reavahetus &amp;lt;tt&amp;gt;0x0D 0x0A&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Õige tulemuse annab niisugune kood:&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 copy NUL foo.bar&lt;br /&gt;
Nüüd saame me tõesti tühja faili. Paar sõna selgituseks: NUL on spetsiaalfail, mis oma käitub samamoodi nagu *NIX /dev/null. Tegemist on failiga kuhu võib lõpmatult andmeid saata, see fail ei saa iialgi täis, samuti ei saa sealt midagi tagasi. Omamoodi arvuti &amp;quot;must auk&amp;quot;. Erinevalt looduslikust &amp;quot;mustast august&amp;quot;, kust tõesti midaga tagasi ei saa on NUL natukene viisakam. Igale katsele temast midagi lugeda vastatakse viisakalt faililõpusümboliga. Ehk NUL ütleb meile: &amp;quot;mittemidagi, mida ma sulle ei anna, sai siinkohas otsa, seega paneme faili nüüd viisakalt kinni&amp;quot;. Õnneks see ongi täpselt see mida meil vaja on.&lt;br /&gt;
&lt;br /&gt;
===Kataloog ehk appi ma olen eksinud===&lt;br /&gt;
Jooksvat kataloogi säilitatakse muutujas %cd%&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 echo %cd%&lt;br /&gt;
Seame töökataloogiks oma valitud kataloogi ja pärast skripti töö lõppu pöördume tagasi jooksvasse kataloogi&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD %SYSTEMROOT%&lt;br /&gt;
 ECHO %CD% &lt;br /&gt;
 POPD&lt;br /&gt;
Antud näites kasutame keskkonnamuutujat %SYSTEMROOT% ehk kataloogi kuhu Windows on paigaldatud. Kasutada võib mistahes olemasolevat kataloogi C:\foo\bar. Eriti kasulikuks teeb selle käsu asjaolu, et kasutada on võimalik ka UNC kujul võrguteesid \\foo\bar\fubar mille kasutamist skriptides interpretaator ei luba (PUSHD otsib automaatselt vaba kettatähise ja monteerib selle ajutiselt külge, et skript saaks kasutada &amp;quot;klassikalist&amp;quot; teed. POPD vabastab monteeringu).&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 PUSHD \\foo\bar&lt;br /&gt;
 ECHO %CD%&lt;br /&gt;
 POPD&lt;br /&gt;
&lt;br /&gt;
===Rekursiivne DIR===&lt;br /&gt;
Soovime nimekirja kõigist failidest mis asuvad puus jooksvas kataloogist allapoole (ehk kõigi failide ja alamkataloogide failide listing). Siin on võimalik ära kasutada rekursiivse kopeerimisutiliidi, xcopy, võtit /L mis faile ei kopeeri vaid väljastab ainult nimekirja failides mida ta kopeeriks.&lt;br /&gt;
&amp;lt;br&amp;gt;CMD&lt;br /&gt;
 FOR /F &amp;quot;tokens=1 delims=-&amp;gt;&amp;quot; %A IN ('xcopy /L /F /E /S /H /R /C /Y *.* %TEMP%') do echo %A &lt;br /&gt;
For tsükkel on vajalik selleks, et xcopy väljundist kujul &amp;lt;tt&amp;gt;source -&amp;gt; destination&amp;lt;/tt&amp;gt; eemadalda meie jaos mittevajalik &amp;quot;destination&amp;quot; osa.&lt;br /&gt;
Huvitavaid lisavõimalusi pakub xcopy võti /D millega saab otsingule seada alampiiri, millest ajaliselt vanemaid faile ignoreeritakse. &lt;br /&gt;
Xcopy käsu &amp;quot;destinationiks&amp;quot; sobib MISTAHES relaaselt eksisteeriv kataloog.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2619</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2619"/>
		<updated>2005-11-24T18:45:44Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
===CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke===&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
COMMAND.COM&lt;br /&gt;
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. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
CMD.EXE&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. 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 &amp;quot;batch&amp;quot; rezhiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
MILLAL on otstarbekas käsuskripte kasutada. Ilmselt siis kui me soovime automatiseerida mõnda lihtsamat korduvat tegevust, mille jaoks pole mõtet hakata &amp;quot;päris&amp;quot; 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 &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
Sissejuhatuse lõpetuseks veel klassikaline näiteprogramm&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
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 &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;br&amp;gt;COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2618</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2618"/>
		<updated>2005-11-24T18:44:18Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
===CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke===&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
COMMAND.COM&lt;br /&gt;
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. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
CMD.EXE&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. 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 &amp;quot;batch&amp;quot; rezhiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
MILLAL on otstarbekas käsuskripte kasutada. Ilmselt siis kui me soovime automatiseerida mõnda lihtsamat korduvat tegevust, mille jaoks pole mõtet hakata &amp;quot;päris&amp;quot; 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 &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
Sissejuhatuse lõpetuseks veel klassikaline näiteprogramm&lt;br /&gt;
COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
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 &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.&lt;br /&gt;
COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2617</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2617"/>
		<updated>2005-11-24T18:43:27Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
===CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke===&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
COMMAND.COM&lt;br /&gt;
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. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
CMD.EXE&lt;br /&gt;
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 &amp;quot;DOSi käskudeks&amp;quot;. 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 &amp;quot;batch&amp;quot; rezhiimis. CMD käsuskripti laiendina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;br /&gt;
&lt;br /&gt;
MILLAL on otstarbekas käsuskripte kasutada. Ilmselt siis kui me soovime automatiseerida mõnda lihtsamat korduvat tegevust, mille jaoks pole mõtet hakata &amp;quot;päris&amp;quot; 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 &amp;quot;masinakeelde&amp;quot;, täidab ja väljastab tulemuse.&lt;br /&gt;
&lt;br /&gt;
Sissejuhatuse lõpetuseks veel klassikaline näiteprogramm&lt;br /&gt;
COMMAND&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
Esimene rida seab interpretaatori töörezhiimile kus väljastatakse ainult see mida käskudael öelda on (vaikimisi väljastab interpretaator muidu ka käsud). Teine rida väljastab teksti &amp;quot;Hello World&amp;quot;.&lt;br /&gt;
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.&lt;br /&gt;
COMMAND&lt;br /&gt;
 REM @ECHO OFF&lt;br /&gt;
 ECHO Hello World&lt;br /&gt;
REM on lühend inglise keelsest sõnast REMARK ja tähistab kommentaari.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2616</id>
		<title>CMD ja BAT - nipid ja trikid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=CMD_ja_BAT_-_nipid_ja_trikid&amp;diff=2616"/>
		<updated>2005-11-24T18:21:19Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
===CMD.EXE ja COMMAND.COM interpretaatoritele skriptimise nippe ja trikke===&lt;br /&gt;
&lt;br /&gt;
COMMAND.COM&lt;br /&gt;
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. &amp;quot;batch&amp;quot; rezhiimis.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
CMD.EXE&lt;br /&gt;
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 oskab CMD kõike seda mis COMMAND ja veel palju rohkem. Vahel nimetatakse CMD kasutamist ekslikult &amp;quot;DOSi käskudeks&amp;quot;. See on vale, sest CMD on täisvereline 32bitine katstud rezhiimi kestprogramm. Windows NT koosseisus on olemas ka vana command.com mida jooksutatakse DOSi emulatsioonirezhhimil, aga ilma erivajadseta pole põhjust seda kasutada. Ka CMD oskab käsujadasid täita &amp;quot;batch&amp;quot; rezhiimis. CMD käsuskripti lainedina on soovitav kasutada .CMD, siis teab süsteem, et skripti interpreteerimiseks tuleks kindlasti kasutada CMD.EXE interpretaatorit. &lt;br /&gt;
CMD laiendatud võimalused, olgugi napid, annavad juba lihtsama interpreteeriva programeerimiskeele võimekuse välja.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Kasutaja_arutelu:194.204.62.228&amp;diff=2609</id>
		<title>Kasutaja arutelu:194.204.62.228</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Kasutaja_arutelu:194.204.62.228&amp;diff=2609"/>
		<updated>2005-11-24T07:54:53Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jumala eest, 2rge parandage vigu sisse! s6ne != s6na!!!&lt;br /&gt;
s6nE = string = tekstmuutuja. &lt;br /&gt;
&lt;br /&gt;
A.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Sissejuhatus_programmeerimisse&amp;diff=2608</id>
		<title>Sissejuhatus programmeerimisse</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Sissejuhatus_programmeerimisse&amp;diff=2608"/>
		<updated>2005-11-24T07:53:31Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Mõisted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
== Programmeerimine ==&lt;br /&gt;
&lt;br /&gt;
Mis on programmeerimine? Programmide loomine? Jah, nii võiks ta kokku võtta küll, ent tegelikkuses ei ole asi sugugi nii lilleline ning keerulisemate programmide tegemine võib võtta aega päevadest aastateni. Suuremad programmid koosnevad miljonitest (kui mitte miljarditest) ridadest koodist ning neid on arendatud aasta(kümne)id.&lt;br /&gt;
&lt;br /&gt;
Programmeerimine koosneb tegelikult paljudest staadiumitest. Tõsi, on võimalik võtta pähe, et „oh, ma nüüd lähen ja teen kohe programmi,” ent kui tõsisemaseks programmeerimiseks läheb, siis sellisest mõtteviisist ei piisa. Programmide loomise mõned etapid on näiteks ideestaadium, disainistaadium, projekteerimise staadium ja siis tuleb alles koodimise osa.&lt;br /&gt;
&lt;br /&gt;
Lisaks on programmeerimise väga heaks eelduseks loogiline mõtlemine ning hea matemaatika. Pikemate programmide puhul tuleb kasuks ka püsivus ning tõenäoliselt mõned unetud ööd. Kui ka natuke muheleda, võiks öelda, et programmeerimine koosneb 90% matemaatikast, 9% loogika ning 0,5% kirjutamist. Ülejäänud 0,5% läheb ettenägematuteks kulutusteks.&lt;br /&gt;
&lt;br /&gt;
Teisalt pole programmeerimine ka lihtsalt mõttetu hunniku teksti kirjutamine (ning kui seda teha viletsalt, ei hakka programm üldse töölegi vaid loobib hunnikute viisi veateateid ning programmi vastu kaob huvi) või terve kuhja graafiliste vidinate kokkulöömine ideega sellest programm teha. Nii mõnedki kasulikud programmid on graafiliselt üpris inetud. Seetõttu üritame selles juhendis teha asja nii lõbusaks kui võimalik.&lt;br /&gt;
&lt;br /&gt;
== Mõisted ==&lt;br /&gt;
&lt;br /&gt;
Siinkohal mõned tähtsamad mõisted mida programmeerimises on tarvilik teada.&lt;br /&gt;
&lt;br /&gt;
*'''Muutuja''' – täht või sõna millele saab omistada väärtust, mida saab omakorda vajalikul momendil muuta. Muutujaks võib olla näiteks tikkude arv toosis – seda arvu saab muuta, või näiteks raamatus lugemata lehekülgede arv – ka see muutub. &lt;br /&gt;
*'''Konstant''' – muutumatu muutuja. Näiteks on konstant matemaatiline tähis ''pii'', ehk &amp;lt;code&amp;gt;3,1415926535897932384626433832795&amp;lt;/code&amp;gt;. See ei muutu. Või arv &amp;quot;e&amp;quot; &amp;lt;code&amp;gt;2.71828&amp;lt;/code&amp;gt;. Üldiselt on konstant mistahes arv-, sõne- (string) või tõeväärtus, mida me oleme oma programmis konstandina defineerinud ja väärtustanud. Konstandi väärtus programmi täitmise käigus muutuda ei saa. Selle poolest erineb konstant muutjast, mille väärtust on võimalik programmi täitmise käigus muuta. &amp;lt;br&amp;gt;Süsteemsed konstandid, on eeldefineeritud konstandid mida pole vaja eraldi defineerida. &amp;lt;br&amp;gt;Tambovi Konstant on arv mis liidetakse v6i lahutatakse, millega korrutatakse või jagatakse arvutatud tulemus, et saada soovitud tulemus. Tambovi Konstandi kasutamist peetakse üldiselt taunismisväärseks, kuid reaalsetes programmides tuleb seda liigagi tihti ette.&lt;br /&gt;
 &lt;br /&gt;
*'''Massiiv (array)''' – muutujate kogum. Raamatus on tähed ja leheküljed. Ütleme, et muutuja on lehekülg ning muutuja väärtus on lehekülje sisu. Kuna raamatus on palju lehekülgi siis kõik need leheküljed moodustavad massiivi. Ka poes müüdavad suured pakid tikutoose on tegelikult ju massiiv, sest kui tikutoos on muutuja ning tikkude arv toosis on muutuja väärtus, on need kõik toosid selles suures kilepakendis massiiv. &lt;br /&gt;
&lt;br /&gt;
*'''Kommentaar/kommenteerima''' – lõik(/lõigud) programmitekstis, mis ei leia kajastamist programmi kompileerimises. Lühidalt – kõik kommentaarid jäetakse kompileerimisel arvestamata. Näiteks võib seda kasutada juhul, kui on hirmsasti tarvis mingit osa koodist testida, ent üks teine osa jääb millegipärast ette. Kas on tõesti tarvis ettejääv osa ära koristada teelt? Ei, saab ka lihtsamini – kommenteerida lõik välja. Teisalt aitavad kommentaarid teksti selgitada. Kommentaarivaene tekst on tihtipeale kurjast. Tegelikult on ta pea kogu aeg kurjast. Kommenteerimata koodi on väga raske lugeda iseendalgi, kui kirjutamisest on palju aega möödas. Juurde aitavad küll selgitavad muutujad, ent muutujatest ei piisa. Kui kommentaare ei ole, ei pruugi kõrvalseisja välja jagada isegi seda, mida programm tegema peaks.&lt;br /&gt;
&lt;br /&gt;
''Programmeerimis keeles C++ on kommentaare kahte sorti. Ühed, mis kommenteerivad kommentaaritähise algusest rea lõpuni ning teised, mis kommenteerivad välja kasvõi terve faili kui vaja. Esimesi tähistatakse topeltkaldkriipsuga // ning teised käivad /* ja */ vahele (antud juhul oleks sõna „ja” välja kommenteeritud).&lt;br /&gt;
&lt;br /&gt;
C++ laadsed ühe rea kommentaarid on lubatud ka C99 standardis tavalises C's.''&lt;br /&gt;
&lt;br /&gt;
=== Muutuja ===&lt;br /&gt;
&lt;br /&gt;
Muutujad, nagu enne räägitud, on täht/tähed, millele saab omistada mingeid väärtusi. Ent ometigi ei saa kõikidele muutujatele ükskõik mis tüüpi väärtust omistada. Näiteks ei saa arvmuutujale omistada tekstmuutuja väärtust või täisarv-tüüpi muutujale ujukomaarv-tüüpi väärtust.&lt;br /&gt;
&lt;br /&gt;
Üldiselt on olemas päris palju erinevaid muutujatüüpe. Mõnda neist ka siinkohal lähedamalt vaatleme.&lt;br /&gt;
&lt;br /&gt;
'''''Int''''' (ehk täisarv):&lt;br /&gt;
&lt;br /&gt;
Integer-tüüpi muutujale saab omistada ainult täisarvulisi väärtusi, st näiteks 10, 150 aga ka 1239, aga ei saa omistada komaga väärtusi, nagu 27,5 või 2933,93929. Sõltuvalt süsteemist on ta võimeline saama erinevate vahemikega väärtusi.&lt;br /&gt;
&lt;br /&gt;
 '''16bitised süsteemid''' – vahemikus &amp;lt;code&amp;gt;-32 768&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;32 767&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''32bitised süsteemid''' – vahemikus &amp;lt;code&amp;gt;-2 147 483 648&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;2 147 483 648&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''64bitised süsteemid''' – vahemikus &amp;lt;code&amp;gt;-9 223 372 036 854 775 808&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;9 223 372 036 854 775 807&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nagu näha omavad erinevates süsteemides täisarvud teistsuguseid väärtuste vahemikke. Kui vanade protsessoritega (16bitistega) sai opereerida täisarvudega maksimaalselt 65000 kohta, siis 32bitised protsessorid (Intel Pentiumist alates) olid võimelised juba kordades suuremate arvudega opereerima ning 64bitised (AMD Athlon 64, Intel EM64T) protsessorid on võimelised opereerima veelgi suuremate arvudega.&lt;br /&gt;
&lt;br /&gt;
Ometigi on võimalik välja kutsuda ka vanemate süsteemide muutujatüüpe, kasutades '''''__int8, __int16, __int32''''' ja '''''__int64'''''.&lt;br /&gt;
&lt;br /&gt;
Mis nende vahe on? Mälukohtade tarbimise vahe. 8bitine ja 16bitine täisarv kasutavad mõlemad 1 baidi mälust. 32bitine võtab juba 2 baiti ning 64bitine täisarv 4 baiti. Aga milles küsimus? Me ei ela ju enam 64 kilobaidi-ajastul. Aga selles on asi, et suurte programmide puhul kus ei ole mitte käputäis vaid paar(kümmend)tuhat muutujat on asi hoopis teine.&lt;br /&gt;
&lt;br /&gt;
Veel on olemas muutujatüübid nagu '''''short''''' ja '''''long'''''. '''''Short''''' ei ole tegelikult mitte midagi muud kui 16bitine täisarv vahemikus &amp;lt;code&amp;gt;-32 768&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;32 767&amp;lt;/code&amp;gt; ning long on 32bitine täisarv vahemikus &amp;lt;code&amp;gt;-2 147 483 648&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;2 147 483 648&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Lisaks saab eelpool mainitud '''''short'''''’le ja '''''long'''''’le lisada eesliited '''''unsigned'''''. '''''Unsigned short''''' (kui muidu on '''''signed short''''') võib olla vahemikus 0 kuni &amp;lt;code&amp;gt;65 535&amp;lt;/code&amp;gt; ning unsigned long vahemikus 0 kuni &amp;lt;code&amp;gt;4 294 967 295&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Seejärel ujukomaarvud '''''float, double''''' ja '''''long double'''''. '''''Float''''' on kõige väiksem ujukomaarv, võtab mälus 4 baiti ning maksimaalseks suuruseks on &amp;lt;code&amp;gt;3,4*10&amp;lt;sup&amp;gt;+/-38&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. Double on natuke ulatuslikum, võttes mälus 8 baiti ning vahemikuks &amp;lt;code&amp;gt;1,7*10&amp;lt;sup&amp;gt;+/-308&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. Lõpuks on long double mis on neist kahest suurim (10 baiti) ning ulatuslikeim: &amp;lt;code&amp;gt;1,2*10&amp;lt;sup&amp;gt;+/-4932&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Viimaseks võiks ära mainida tekstmuutujad, millest kasutatavaim on '''''char'''''. Nimelt on char-tüüpi muutuja võimeline sisaldama endas ühte tähte. Kui temast teha massiiv, on ta ka võimeline sisaldama tervet stringi.&lt;br /&gt;
&lt;br /&gt;
=== Päisefailid ===&lt;br /&gt;
Päisefailid (headerid) on tavaliselt failid, mis sisaldavad programmi muutujaid, et hoida programmi koodis korda ja vajadusel oleks nt kindlat muutujat kerge üles leida. Peaaegu iga programmi koodis võib leida päisefaile. C++is on päisefailidel laiendiks &amp;quot;.h&amp;quot;.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Sissejuhatus_programmeerimisse&amp;diff=2600</id>
		<title>Sissejuhatus programmeerimisse</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Sissejuhatus_programmeerimisse&amp;diff=2600"/>
		<updated>2005-11-23T19:27:08Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Mõisted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
== Programmeerimine ==&lt;br /&gt;
&lt;br /&gt;
Mis on programmeerimine? Programmide loomine? Jah, nii võiks ta kokku võtta küll, ent tegelikkuses ei ole asi sugugi nii lilleline ning keerulisemate programmide tegemine võib võtta aega päevadest aastateni. Suuremad programmid koosnevad miljonitest (kui mitte miljarditest) ridadest koodist ning neid on arendatud aasta(kümne)id.&lt;br /&gt;
&lt;br /&gt;
Programmeerimine koosneb tegelikult paljudest staadiumitest. Tõsi, on võimalik võtta pähe, et „oh, ma nüüd lähen ja teen kohe programmi,” ent kui tõsisemaseks programmeerimiseks läheb, siis sellisest mõtteviisist ei piisa. Programmide loomise mõned etapid on näiteks ideestaadium, disainistaadium, projekteerimise staadium ja siis tuleb alles koodimise osa.&lt;br /&gt;
&lt;br /&gt;
Lisaks on programmeerimise väga heaks eelduseks loogiline mõtlemine ning hea matemaatika. Pikemate programmide puhul tuleb kasuks ka püsivus ning tõenäoliselt mõned unetud ööd. Kui ka natuke muheleda, võiks öelda, et programmeerimine koosneb 90% matemaatikast, 9% loogika ning 0,5% kirjutamist. Ülejäänud 0,5% läheb ettenägematuteks kulutusteks.&lt;br /&gt;
&lt;br /&gt;
Teisalt pole programmeerimine ka lihtsalt mõttetu hunniku teksti kirjutamine (ning kui seda teha viletsalt, ei hakka programm üldse töölegi vaid loobib hunnikute viisi veateateid ning programmi vastu kaob huvi) või terve kuhja graafiliste vidinate kokkulöömine ideega sellest programm teha. Nii mõnedki kasulikud programmid on graafiliselt üpris inetud. Seetõttu üritame selles juhendis teha asja nii lõbusaks kui võimalik.&lt;br /&gt;
&lt;br /&gt;
== Mõisted ==&lt;br /&gt;
&lt;br /&gt;
Siinkohal mõned tähtsamad mõisted mida programmeerimises on tarvilik teada.&lt;br /&gt;
&lt;br /&gt;
*'''Muutuja''' – täht või sõna millele saab omistada väärtust, mida saab omakorda vajalikul momendil muuta. Muutujaks võib olla näiteks tikkude arv toosis – seda arvu saab muuta, või näiteks raamatus lugemata lehekülgede arv – ka see muutub. &lt;br /&gt;
*'''Konstant''' – muutumatu muutuja. Näiteks on konstant matemaatiline tähis ''pii'', ehk &amp;lt;code&amp;gt;3,1415926535897932384626433832795&amp;lt;/code&amp;gt;. See ei muutu. Või arv &amp;quot;e&amp;quot; &amp;lt;code&amp;gt;2.71828&amp;lt;/code&amp;gt;. Üldiselt on konstant mistahes arv-, sõne või tõeväärtus, mida me oleme oma programmis konstandina defineerinud ja v22rtustanud. Konstandi väärtus programmi täitmise käigus muutuda ei saa. Selle poolest erineb konstant muutjast, mille väärtust on võimalik programmi täitmise käigus muuta. Erandiks on süsteemsed konstandid, mida pole vaja eraldi defineerida vaid nad on vaikimisi juba defineeritud ja Tambovi Konstant (arv mis liidetakse v6i lahutatakse, millega korrutatakse või jagatakse arvutatud tulemus, et saada soovitud tulemus). Tambovi Konstandi kasutamist peetakse üldiselt taunismisväärseks, kuid reaalsetes programmides tuleb seda liigagi tihti ette.&lt;br /&gt;
 &lt;br /&gt;
*'''Massiiv (array)''' – muutujate kogum. Raamatus on tähed ja leheküljed. Ütleme, et muutuja on lehekülg ning muutuja väärtus on lehekülje sisu. Kuna raamatus on palju lehekülgi siis kõik need leheküljed moodustavad massiivi. Ka poes müüdavad suured pakid tikutoose on tegelikult ju massiiv, sest kui tikutoos on muutuja ning tikkude arv toosis on muutuja väärtus, on need kõik toosid selles suures kilepakendis massiiv. &lt;br /&gt;
&lt;br /&gt;
*'''Kommentaar/kommenteerima''' – lõik(/lõigud) programmitekstis, mis ei leia kajastamist programmi kompileerimises. Lühidalt – kõik kommentaarid jäetakse kompileerimisel arvestamata. Näiteks võib seda kasutada juhul, kui on hirmsasti tarvis mingit osa koodist testida, ent üks teine osa jääb millegipärast ette. Kas on tõesti tarvis ettejääv osa ära koristada teelt? Ei, saab ka lihtsamini – kommenteerida lõik välja. Teisalt aitavad kommentaarid teksti selgitada. Kommentaarivaene tekst on tihtipeale kurjast. Tegelikult on ta pea kogu aeg kurjast. Kommenteerimata koodi on väga raske lugeda iseendalgi, kui kirjutamisest on palju aega möödas. Juurde aitavad küll selgitavad muutujad, ent muutujatest ei piisa. Kui kommentaare ei ole, ei pruugi kõrvalseisja välja jagada isegi seda, mida programm tegema peaks.&lt;br /&gt;
&lt;br /&gt;
''Programmeerimis keeles C++ on kommentaare kahte sorti. Ühed, mis kommenteerivad kommentaaritähise algusest rea lõpuni ning teised, mis kommenteerivad välja kasvõi terve faili kui vaja. Esimesi tähistatakse topeltkaldkriipsuga // ning teised käivad /* ja */ vahele (antud juhul oleks sõna „ja” välja kommenteeritud).&lt;br /&gt;
&lt;br /&gt;
C++ laadsed ühe rea kommentaarid on lubatud ka C99 standardis tavalises C's.''&lt;br /&gt;
&lt;br /&gt;
=== Muutuja ===&lt;br /&gt;
&lt;br /&gt;
Muutujad, nagu enne räägitud, on täht/tähed, millele saab omistada mingeid väärtusi. Ent ometigi ei saa kõikidele muutujatele ükskõik mis tüüpi väärtust omistada. Näiteks ei saa arvmuutujale omistada tekstmuutuja väärtust või täisarv-tüüpi muutujale ujukomaarv-tüüpi väärtust.&lt;br /&gt;
&lt;br /&gt;
Üldiselt on olemas päris palju erinevaid muutujatüüpe. Mõnda neist ka siinkohal lähedamalt vaatleme.&lt;br /&gt;
&lt;br /&gt;
'''''Int''''' (ehk täisarv):&lt;br /&gt;
&lt;br /&gt;
Integer-tüüpi muutujale saab omistada ainult täisarvulisi väärtusi, st näiteks 10, 150 aga ka 1239, aga ei saa omistada komaga väärtusi, nagu 27,5 või 2933,93929. Sõltuvalt süsteemist on ta võimeline saama erinevate vahemikega väärtusi.&lt;br /&gt;
&lt;br /&gt;
 '''16bitised süsteemid''' – vahemikus &amp;lt;code&amp;gt;-32 768&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;32 767&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''32bitised süsteemid''' – vahemikus &amp;lt;code&amp;gt;-2 147 483 648&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;2 147 483 648&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''64bitised süsteemid''' – vahemikus &amp;lt;code&amp;gt;-9 223 372 036 854 775 808&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;9 223 372 036 854 775 807&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nagu näha omavad erinevates süsteemides täisarvud teistsuguseid väärtuste vahemikke. Kui vanade protsessoritega (16bitistega) sai opereerida täisarvudega maksimaalselt 65000 kohta, siis 32bitised protsessorid (Intel Pentiumist alates) olid võimelised juba kordades suuremate arvudega opereerima ning 64bitised (AMD Athlon 64, Intel EM64T) protsessorid on võimelised opereerima veelgi suuremate arvudega.&lt;br /&gt;
&lt;br /&gt;
Ometigi on võimalik välja kutsuda ka vanemate süsteemide muutujatüüpe, kasutades '''''__int8, __int16, __int32''''' ja '''''__int64'''''.&lt;br /&gt;
&lt;br /&gt;
Mis nende vahe on? Mälukohtade tarbimise vahe. 8bitine ja 16bitine täisarv kasutavad mõlemad 1 baidi mälust. 32bitine võtab juba 2 baiti ning 64bitine täisarv 4 baiti. Aga milles küsimus? Me ei ela ju enam 64 kilobaidi-ajastul. Aga selles on asi, et suurte programmide puhul kus ei ole mitte käputäis vaid paar(kümmend)tuhat muutujat on asi hoopis teine.&lt;br /&gt;
&lt;br /&gt;
Veel on olemas muutujatüübid nagu '''''short''''' ja '''''long'''''. '''''Short''''' ei ole tegelikult mitte midagi muud kui 16bitine täisarv vahemikus &amp;lt;code&amp;gt;-32 768&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;32 767&amp;lt;/code&amp;gt; ning long on 32bitine täisarv vahemikus &amp;lt;code&amp;gt;-2 147 483 648&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;2 147 483 648&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Lisaks saab eelpool mainitud '''''short'''''’le ja '''''long'''''’le lisada eesliited '''''unsigned'''''. '''''Unsigned short''''' (kui muidu on '''''signed short''''') võib olla vahemikus 0 kuni &amp;lt;code&amp;gt;65 535&amp;lt;/code&amp;gt; ning unsigned long vahemikus 0 kuni &amp;lt;code&amp;gt;4 294 967 295&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Seejärel ujukomaarvud '''''float, double''''' ja '''''long double'''''. '''''Float''''' on kõige väiksem ujukomaarv, võtab mälus 4 baiti ning maksimaalseks suuruseks on &amp;lt;code&amp;gt;3,4*10&amp;lt;sup&amp;gt;+/-38&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. Double on natuke ulatuslikum, võttes mälus 8 baiti ning vahemikuks &amp;lt;code&amp;gt;1,7*10&amp;lt;sup&amp;gt;+/-308&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. Lõpuks on long double mis on neist kahest suurim (10 baiti) ning ulatuslikeim: &amp;lt;code&amp;gt;1,2*10&amp;lt;sup&amp;gt;+/-4932&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Viimaseks võiks ära mainida tekstmuutujad, millest kasutatavaim on '''''char'''''. Nimelt on char-tüüpi muutuja võimeline sisaldama endas ühte tähte. Kui temast teha massiiv, on ta ka võimeline sisaldama tervet stringi.&lt;br /&gt;
&lt;br /&gt;
=== Päisefailid ===&lt;br /&gt;
Päisefailid (headerid) on tavaliselt failid, mis sisaldavad programmi muutujaid, et hoida programmi koodis korda ja vajadusel oleks nt kindlat muutujat kerge üles leida. Peaaegu iga programmi koodis võib leida päisefaile. C++is on päisefailidel laiendiks &amp;quot;.h&amp;quot;.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Sissejuhatus_programmeerimisse&amp;diff=2599</id>
		<title>Sissejuhatus programmeerimisse</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Sissejuhatus_programmeerimisse&amp;diff=2599"/>
		<updated>2005-11-23T19:21:40Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Mõisted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine]]&lt;br /&gt;
&lt;br /&gt;
== Programmeerimine ==&lt;br /&gt;
&lt;br /&gt;
Mis on programmeerimine? Programmide loomine? Jah, nii võiks ta kokku võtta küll, ent tegelikkuses ei ole asi sugugi nii lilleline ning keerulisemate programmide tegemine võib võtta aega päevadest aastateni. Suuremad programmid koosnevad miljonitest (kui mitte miljarditest) ridadest koodist ning neid on arendatud aasta(kümne)id.&lt;br /&gt;
&lt;br /&gt;
Programmeerimine koosneb tegelikult paljudest staadiumitest. Tõsi, on võimalik võtta pähe, et „oh, ma nüüd lähen ja teen kohe programmi,” ent kui tõsisemaseks programmeerimiseks läheb, siis sellisest mõtteviisist ei piisa. Programmide loomise mõned etapid on näiteks ideestaadium, disainistaadium, projekteerimise staadium ja siis tuleb alles koodimise osa.&lt;br /&gt;
&lt;br /&gt;
Lisaks on programmeerimise väga heaks eelduseks loogiline mõtlemine ning hea matemaatika. Pikemate programmide puhul tuleb kasuks ka püsivus ning tõenäoliselt mõned unetud ööd. Kui ka natuke muheleda, võiks öelda, et programmeerimine koosneb 90% matemaatikast, 9% loogika ning 0,5% kirjutamist. Ülejäänud 0,5% läheb ettenägematuteks kulutusteks.&lt;br /&gt;
&lt;br /&gt;
Teisalt pole programmeerimine ka lihtsalt mõttetu hunniku teksti kirjutamine (ning kui seda teha viletsalt, ei hakka programm üldse töölegi vaid loobib hunnikute viisi veateateid ning programmi vastu kaob huvi) või terve kuhja graafiliste vidinate kokkulöömine ideega sellest programm teha. Nii mõnedki kasulikud programmid on graafiliselt üpris inetud. Seetõttu üritame selles juhendis teha asja nii lõbusaks kui võimalik.&lt;br /&gt;
&lt;br /&gt;
== Mõisted ==&lt;br /&gt;
&lt;br /&gt;
Siinkohal mõned tähtsamad mõisted mida programmeerimises on tarvilik teada.&lt;br /&gt;
&lt;br /&gt;
*'''Muutuja''' – täht või sõna millele saab omistada väärtust, mida saab omakorda vajalikul momendil muuta. Muutujaks võib olla näiteks tikkude arv toosis – seda arvu saab muuta, või näiteks raamatus lugemata lehekülgede arv – ka see muutub. &lt;br /&gt;
*'''Konstant''' – muutumatu muutuja. Näiteks on konstant matemaatiline tähis ''pii'', ehk &amp;lt;code&amp;gt;3,1415926535897932384626433832795&amp;lt;/code&amp;gt;. See ei muutu. Või arv &amp;quot;e&amp;quot; &amp;lt;code&amp;gt;2.71828&amp;lt;/code&amp;gt;. Üldiselt on konstant mistahes arv-, sõne või tõeväärtus, mida me oleme otsustanud oma programmis kasutada, kuid mille väärtus programmi täitmise käigus ei muutu. &lt;br /&gt;
 &lt;br /&gt;
*'''Massiiv (array)''' – muutujate kogum. Raamatus on tähed ja leheküljed. Ütleme, et muutuja on lehekülg ning muutuja väärtus on lehekülje sisu. Kuna raamatus on palju lehekülgi siis kõik need leheküljed moodustavad massiivi. Ka poes müüdavad suured pakid tikutoose on tegelikult ju massiiv, sest kui tikutoos on muutuja ning tikkude arv toosis on muutuja väärtus, on need kõik toosid selles suures kilepakendis massiiv. &lt;br /&gt;
&lt;br /&gt;
*'''Kommentaar/kommenteerima''' – lõik(/lõigud) programmitekstis, mis ei leia kajastamist programmi kompileerimises. Lühidalt – kõik kommentaarid jäetakse kompileerimisel arvestamata. Näiteks võib seda kasutada juhul, kui on hirmsasti tarvis mingit osa koodist testida, ent üks teine osa jääb millegipärast ette. Kas on tõesti tarvis ettejääv osa ära koristada teelt? Ei, saab ka lihtsamini – kommenteerida lõik välja. Teisalt aitavad kommentaarid teksti selgitada. Kommentaarivaene tekst on tihtipeale kurjast. Tegelikult on ta pea kogu aeg kurjast. Kommenteerimata koodi on väga raske lugeda iseendalgi, kui kirjutamisest on palju aega möödas. Juurde aitavad küll selgitavad muutujad, ent muutujatest ei piisa. Kui kommentaare ei ole, ei pruugi kõrvalseisja välja jagada isegi seda, mida programm tegema peaks.&lt;br /&gt;
&lt;br /&gt;
''Programmeerimis keeles C++ on kommentaare kahte sorti. Ühed, mis kommenteerivad kommentaaritähise algusest rea lõpuni ning teised, mis kommenteerivad välja kasvõi terve faili kui vaja. Esimesi tähistatakse topeltkaldkriipsuga // ning teised käivad /* ja */ vahele (antud juhul oleks sõna „ja” välja kommenteeritud).&lt;br /&gt;
&lt;br /&gt;
C++ laadsed ühe rea kommentaarid on lubatud ka C99 standardis tavalises C's.''&lt;br /&gt;
&lt;br /&gt;
=== Muutuja ===&lt;br /&gt;
&lt;br /&gt;
Muutujad, nagu enne räägitud, on täht/tähed, millele saab omistada mingeid väärtusi. Ent ometigi ei saa kõikidele muutujatele ükskõik mis tüüpi väärtust omistada. Näiteks ei saa arvmuutujale omistada tekstmuutuja väärtust või täisarv-tüüpi muutujale ujukomaarv-tüüpi väärtust.&lt;br /&gt;
&lt;br /&gt;
Üldiselt on olemas päris palju erinevaid muutujatüüpe. Mõnda neist ka siinkohal lähedamalt vaatleme.&lt;br /&gt;
&lt;br /&gt;
'''''Int''''' (ehk täisarv):&lt;br /&gt;
&lt;br /&gt;
Integer-tüüpi muutujale saab omistada ainult täisarvulisi väärtusi, st näiteks 10, 150 aga ka 1239, aga ei saa omistada komaga väärtusi, nagu 27,5 või 2933,93929. Sõltuvalt süsteemist on ta võimeline saama erinevate vahemikega väärtusi.&lt;br /&gt;
&lt;br /&gt;
 '''16bitised süsteemid''' – vahemikus &amp;lt;code&amp;gt;-32 768&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;32 767&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''32bitised süsteemid''' – vahemikus &amp;lt;code&amp;gt;-2 147 483 648&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;2 147 483 648&amp;lt;/code&amp;gt;&lt;br /&gt;
 '''64bitised süsteemid''' – vahemikus &amp;lt;code&amp;gt;-9 223 372 036 854 775 808&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;9 223 372 036 854 775 807&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nagu näha omavad erinevates süsteemides täisarvud teistsuguseid väärtuste vahemikke. Kui vanade protsessoritega (16bitistega) sai opereerida täisarvudega maksimaalselt 65000 kohta, siis 32bitised protsessorid (Intel Pentiumist alates) olid võimelised juba kordades suuremate arvudega opereerima ning 64bitised (AMD Athlon 64, Intel EM64T) protsessorid on võimelised opereerima veelgi suuremate arvudega.&lt;br /&gt;
&lt;br /&gt;
Ometigi on võimalik välja kutsuda ka vanemate süsteemide muutujatüüpe, kasutades '''''__int8, __int16, __int32''''' ja '''''__int64'''''.&lt;br /&gt;
&lt;br /&gt;
Mis nende vahe on? Mälukohtade tarbimise vahe. 8bitine ja 16bitine täisarv kasutavad mõlemad 1 baidi mälust. 32bitine võtab juba 2 baiti ning 64bitine täisarv 4 baiti. Aga milles küsimus? Me ei ela ju enam 64 kilobaidi-ajastul. Aga selles on asi, et suurte programmide puhul kus ei ole mitte käputäis vaid paar(kümmend)tuhat muutujat on asi hoopis teine.&lt;br /&gt;
&lt;br /&gt;
Veel on olemas muutujatüübid nagu '''''short''''' ja '''''long'''''. '''''Short''''' ei ole tegelikult mitte midagi muud kui 16bitine täisarv vahemikus &amp;lt;code&amp;gt;-32 768&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;32 767&amp;lt;/code&amp;gt; ning long on 32bitine täisarv vahemikus &amp;lt;code&amp;gt;-2 147 483 648&amp;lt;/code&amp;gt; kuni &amp;lt;code&amp;gt;2 147 483 648&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Lisaks saab eelpool mainitud '''''short'''''’le ja '''''long'''''’le lisada eesliited '''''unsigned'''''. '''''Unsigned short''''' (kui muidu on '''''signed short''''') võib olla vahemikus 0 kuni &amp;lt;code&amp;gt;65 535&amp;lt;/code&amp;gt; ning unsigned long vahemikus 0 kuni &amp;lt;code&amp;gt;4 294 967 295&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Seejärel ujukomaarvud '''''float, double''''' ja '''''long double'''''. '''''Float''''' on kõige väiksem ujukomaarv, võtab mälus 4 baiti ning maksimaalseks suuruseks on &amp;lt;code&amp;gt;3,4*10&amp;lt;sup&amp;gt;+/-38&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. Double on natuke ulatuslikum, võttes mälus 8 baiti ning vahemikuks &amp;lt;code&amp;gt;1,7*10&amp;lt;sup&amp;gt;+/-308&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. Lõpuks on long double mis on neist kahest suurim (10 baiti) ning ulatuslikeim: &amp;lt;code&amp;gt;1,2*10&amp;lt;sup&amp;gt;+/-4932&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Viimaseks võiks ära mainida tekstmuutujad, millest kasutatavaim on '''''char'''''. Nimelt on char-tüüpi muutuja võimeline sisaldama endas ühte tähte. Kui temast teha massiiv, on ta ka võimeline sisaldama tervet stringi.&lt;br /&gt;
&lt;br /&gt;
=== Päisefailid ===&lt;br /&gt;
Päisefailid (headerid) on tavaliselt failid, mis sisaldavad programmi muutujaid, et hoida programmi koodis korda ja vajadusel oleks nt kindlat muutujat kerge üles leida. Peaaegu iga programmi koodis võib leida päisefaile. C++is on päisefailidel laiendiks &amp;quot;.h&amp;quot;.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Hallatav_V%C3%B5rgul%C3%BCliti_(Managed_Switch)_ja_selle_lisav%C3%B5imaluste_l%C3%BChikirjeldus&amp;diff=2566</id>
		<title>Hallatav Võrgulüliti (Managed Switch) ja selle lisavõimaluste lühikirjeldus</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Hallatav_V%C3%B5rgul%C3%BCliti_(Managed_Switch)_ja_selle_lisav%C3%B5imaluste_l%C3%BChikirjeldus&amp;diff=2566"/>
		<updated>2005-11-15T06:12:38Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategooria:Andmeside]]&lt;br /&gt;
[[Kategooria:Füüsilise kihi juhendid]]&lt;br /&gt;
&lt;br /&gt;
Nagu näha, vajadus on. Seega, alustame päris algusest ning teeme hakatuseks hästi lihtsalt selgeks, misasi on etherneti switch.&lt;br /&gt;
&lt;br /&gt;
== Mis on switch ==&lt;br /&gt;
Etherneti switch on layer 2 seade, mis lihtsustatult võtab vastu siseneva etherneti kaadri, puhverdab selle, ning saadab mõnest teisest pordist välja.&lt;br /&gt;
&lt;br /&gt;
Switch erineb hub'ist selle poolest, et switch puhverdab kaadri, analüüsib etherneti kaadris olevaid MAC aadresse ning teeb otsuse nende (ja mõnel juhul ka eldefineeritud policy) põhjal. Hub isegi mitte ei puhverda kaadrit vaid olles preamble kätte saanud, hakkab kohe sissetulevat bitijoru teistesse portidesse edasi saatma. See on põhjuseks, miks me hub'i korral kunagi ei saa rääkida full duplexist.&lt;br /&gt;
&lt;br /&gt;
Iga switchi sees on mingi kogus mälu, kus on tabel, milles on kirjas, millised MAC aadressid millise pordi küljes on. Seda tabelit täidetakse ning muudetakse vastavalt sissetulevatele kaadritele. Kuna etherneti kaadris on nii lähte kui ka sihtaadress (MAC aadress siis, eks), saab switch kasutada lähteaadresse oma tabeli uuendamiseks ning juhul kui switch teab, millise pordi taga on antud kaadris olev sihtaadress, edastab switch selle kaadri ainult sellesse konkreetsesse porti.&lt;br /&gt;
&lt;br /&gt;
On aga ilmselge, et alati ei ole teada, millise pordi taga vajatav MAC aadress asub, samuti on olemas broadcast aadressid, millele saadetud kaader peab minema kõigile (lisaks on veel multicast aadressid, millele saadetud liiklus võiks minna ainult nendele, kes seda soovivad, kuid ei ole mõtet asja hetkel keerukaks ajada).&lt;br /&gt;
&lt;br /&gt;
Nüüd. Olukorras, kus üks kahest, kas on tegemist broadcast/multicast liiklusega või switch ei tea, millise pordi taga on konkreetse kaadri puhul sihtaadress, edastab switch sellise kaadri kõikidesse portidesse, välja arvatud see port, kust ta selle sai (andmeside kuldreegel: ära kunagi saada midagi muutmata kujul tagasi sinna, kust sa selle said).&lt;br /&gt;
&lt;br /&gt;
Ahjaa... Paneme tähele, et switch mitte kunagi ei muuda mitte midagi etherneti kaadris (välja arvatud 802.1Q puhul, kus switch lisab etherneti kaadrisse vastavad väljad või ISL puhul, kus switch kapseldab etherneti kaadri ISL kaadri sisse).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mis saab kui switchde vahel on rohkem kui üks ühendus ==&lt;br /&gt;
&lt;br /&gt;
Olgu. Uurime juhtumit, kui meil on kahe switchi vahel rohkem kui üks ühendus (näiteks kaks kaablit). Oletame, et sellisesse võrku siseneb broadcast kaader, näiteks ARP pakett(suure tõenäosusega on ARP või DHCP esimene pakett, mille sisselülitatud arvuti saadab). Kuna tegemist on broadcasti aadressile saadetud kaadriga, peab switch selle edastama kõikidesse portidesse, välja arvatud sinna, kust ta selle sai. Teine switch saab selle kaadri kätte ning jällegi edastab selle kõikidesse portidesse va. see, kust ta selle sai. Kuna meil on aga switchide vahel topelt ühendus, tuleb see kaader tagasi esimesse switchi, mis jällegi edastab selle igale poole, kuhu saab ja nõnda jääbki meie ARP pakett switchide vahele lõputult ringlema, sest vastupidiselt erkz82 arvamusele, ei muuda switch kaadri sisus mitte midagi, samuti ei ole etherneti kaadris välja, kus oleks kirjas selle kaadri vanus.&lt;br /&gt;
http://telecom.tbi.net/frmlan.html&lt;br /&gt;
&lt;br /&gt;
Nõndaks, me märkame, et ühendades kaks switchi üksteisega rohkem kui ühe kaabli abil, tuleb sellest suur jama ning tolku pole mitte kopika eest.&lt;br /&gt;
Targemad switchid räägivad Spanning Tree (802.1D), lühendatult STP või siis Rapid Spanning Tree (802.1w) protokolli. Spanning Tree on selline vahva naiselik protokoll, mille puhul switchid, perioodiliselt saates välja BPDU'sid (teatud kindla struktuuriga etherneti kaadreid), teevad selgeks võrgu topoloogia, hääletavad juurswitchi ning lähtuvalt sellest, muudavad topoloogia puu kujuliseks, blokeerides teatud reeglite alusel ühe või mitu topeltühendust. Tulemuseks saab garanteeritult loop'ide vaba võrk.&lt;br /&gt;
Ehk siis, kui meie kaks switchi, mille me ühendasime kahe kaabliga, räägivad STP'd, siis ühe switchi üks portidest blokeeritakse liikluse jaoks (endiselt saadetakse sealt kaudu BPDU'sid) ning kasutusele jääb vaid üks ühendustest. Kui see ühendus peaks katkema, saavad switchid sellest teada ning mõne aja pärast, kui ollakse veendunud, et enne blokeeritud olnud ühendus on ainuke, mis switchide vahele alles on jäänud, eemaldatakse blokeering.&lt;br /&gt;
http://www.cisco.com/univercd/cc/td/doc/product/rtrmgmt/sw_ntman/cwsimain/cwsi2/cwsiug2/vlan2/stpapp.htm&lt;br /&gt;
&lt;br /&gt;
Me näeme, et STP annab küll garanteeritult &amp;quot;loop free&amp;quot; topoloogia, kuid peale reduntantsuse ei ole topeltühendusest mitte midagi kasu - andmeid mahub kahe switchi vahel liikuma ikka niipalju, kui ühe kaabli sisse läheb.&lt;br /&gt;
&lt;br /&gt;
Selleks, et rohkem kui üks etherneti ühendus üheks bundle'iks kokku liita, saab kasutada näiteks EtherChannel'it (nagu cisco seda nimetab) või Trunking'ut (nagu paljud teised seda nimetavad - mitte segamini ajada 802.1Q'ga) või Bonding'ut(nagu Linux seda kustub). Sellisel juhul liidetakse mitu etherneti ühendust kokku üheks suurema läbilaskevõimega ühenduseks(bundle), kusjuures, kui mõni nendest ühendustest, mis bundle moodustavad, peaks katkema, jääb bundle endiselt tööle (küll väiksema jõudlusega siis). Et seda protsessi automatiseerida, on olemas Link Aggregation Control Protocol (802.3ad), mis võimaldab switchidel automaatselt kokku leppida, millised ühendused switchide vahel bundle'ks kokku liita.&lt;br /&gt;
&lt;br /&gt;
http://www.cisco.com/en/US/tech/tk389/tk213/technologies_white_paper09186a0080092944.shtml&lt;br /&gt;
&lt;br /&gt;
On muidugi ilmselge, et 300 krooni maksval TrendNet, HyperCom, SuperTrust vms. switchil sellist võimekust ei ole, tavaliselt ei räägi nad isegi kõige lihtlabasemat STP'd mitte.&lt;br /&gt;
Samas, ma oletaks, et umbes 10000 eesti raha eest võiks juba saada switchi, millega on, mõnel ülal kirjeldatud moel, võimalik mitmest ühendusest bundle'id moodustada.&lt;br /&gt;
&lt;br /&gt;
Autor: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=20974 wookie]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2553</id>
		<title>Võrguühenduse kontrollimine</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2553"/>
		<updated>2005-11-13T18:35:33Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Käivitatava faili loomine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategooria:Võrgukihi juhendid]]&lt;br /&gt;
See sobib kasutamiseks siis kui mis iganes põhjustel ei ole võimalik võrguühenduse olemasolu operatsioonisüsteemi seirevahenditega seirata. Mõeldud kasutamiseks Microsoft'i operatsioonisüsteemis.&lt;br /&gt;
==Käivitatava faili loomine==&lt;br /&gt;
Selleks sobib näiteks  [http://en.wikipedia.org/wiki/BAT_file Batch file]&lt;br /&gt;
Batch faili loomiseks on kõige sobivam lihtne tekstiredaktor. Näiteks kas notepad või edit. &lt;br /&gt;
failis peab olema järgmine.&lt;br /&gt;
&lt;br /&gt;
 :: Pingib teenusepakkuja lüüsi lisab pingimise kellaaja ja kuupäeva ning kirjutab tulemused &lt;br /&gt;
 :: tekstifaili.&lt;br /&gt;
    &lt;br /&gt;
    ping ''[siia kirjuta oma teenusepakkuja lüüsi IP aadress]'' &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    date /T &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    time /T &amp;gt;&amp;gt; tulemus.tst&lt;br /&gt;
&lt;br /&gt;
fail tuleb salvestada laiendiga .bat&lt;br /&gt;
&lt;br /&gt;
Selle toimimist saab kontrollida käivitades faili kas käsurealt või failihaldurist.&lt;br /&gt;
&lt;br /&gt;
Edukal käivitamisel peab tulemus.txt sisu välja nägema umbes selline :&lt;br /&gt;
&lt;br /&gt;
    T 08.11.2005 &lt;br /&gt;
    09:58&lt;br /&gt;
    Pinging neti.ee [194.126.101.79] with 32 bytes of data:&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=10ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=12ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=13ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=14ms TTL=58&lt;br /&gt;
    Ping statistics for 194.126.101.79:&lt;br /&gt;
         Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),&lt;br /&gt;
    Approximate round trip times in milli-seconds:&lt;br /&gt;
         Minimum = 10ms, Maximum = 14ms, Average = 12ms&lt;br /&gt;
&lt;br /&gt;
Uuemate Windowside käsuinterpretaator on pisut võimekam. Järgenev CMD fail töötab kindlasti Windows 2K, XP ja 2K3 keskkonnas. NT4 keskkonnas võiks see asi teoreetiliselt t88tada, kuigi usutavasti ei ole seal seatud keskkonnamuutujaid %TIME% ja %DATE%. Sellisel juhult tuleb vastavad keskkonnamuutujad ise seada:&lt;br /&gt;
 FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`DATE /T`) DO @SET KUUP=%%A&lt;br /&gt;
Seab muutuja KUUP väärtuseks käsu DATE väljundi. Kellaajaga tuleb toimida analoogiliselt.&lt;br /&gt;
Soovitav on faili nimeks panna CMD, mitte BAT, sest siis teab Windows, et faili interpreteerimiseks tuleb kasutada laiendatud võimalustega käsuinterpretaatorit&lt;br /&gt;
&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 host-mida-tahame-pingida ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Annab umbes seesuguse väljundi&lt;br /&gt;
&lt;br /&gt;
 P 11/13/2005 12:08:34,06 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sedasi satub iga vastus ilusasti koos kuupäeva ja kellaajaga oma reale ja seda faili on oluliselt mugavam töödelda. NB! kuna Windowsi tekstiparser on pehmelt öeldes &amp;quot;piiratud&amp;quot;, siis ei tohiks ping käsu n-parameetrit muuta. Kui hosti soovitakse mitu korda pingida tuleks terve ülalviidatud koodilõik asetada käsuskripti (näiteks png.cmd) ja kutsuda välja teisest käsuskriptist FOR tsükli abil. &lt;br /&gt;
&lt;br /&gt;
fail mpng.cmd&lt;br /&gt;
 @FOR /L %%I IN (1,1,3) DO @PNG.CMD&lt;br /&gt;
&lt;br /&gt;
fail png.cmd&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 192.168.1.1 ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot; &amp;gt;&amp;gt; ans.txt&lt;br /&gt;
&lt;br /&gt;
fail ans.txt (tekib meile)&lt;br /&gt;
 P 11/13/2005 12:31:05,37 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,50 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,60 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
&lt;br /&gt;
On siililegi selge, et pingimiskordade arvu muudame me failis mpng mängides IN seti kolmanda parameetriga, mis hetkel omab väärtust &amp;quot;3&amp;quot;. Samuti on soovitav näites toodud IP aadress vahetada selle IP aadressi vastu mida soovime pingida.&lt;br /&gt;
&lt;br /&gt;
Windows 9x seeriaga on asi natukene keerukam. Kahjuks tuleb kasutada &amp;quot;häkki&amp;quot;. Probleem on selles, et &amp;quot;klassikalise&amp;quot; command.com käsuinterpretaatori standardvahenditega '''ei ole võimalik''' käsu väljundit keskkonnamuutujasse saada. Selleks kasutatakse &amp;quot;vahefaili häkki&amp;quot;, mida saab näha allpool, kuupäeva ja kellaaja määramisel ning pingi aja salvestamisel. Mida tuleb tähele panna - kuna selle BAT'i töö käigus luuakse jooksvasse kataloogi ajutised failid TEMPDTT1.BAT, TEMPDTT2.BAT (kui kasutada pingi aja lisavõimalust siis ka TEMPR.BAT ja REPLY.BAT), siis Sinu poolt loodava faili nimi  '''ei tohi''' nendega kattuda. Kõige arukam oleks oma &amp;quot;võrgukontrollijale&amp;quot; teha eraldi kataloog.&lt;br /&gt;
&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 :: Koodis on kasutatud materjale siit http://www.robvanderwoude.com/index.html&lt;br /&gt;
 :: Muutuja HOST - sisesta host mida soovid pingida&lt;br /&gt;
 &lt;br /&gt;
 SET HOST=192.168.1.1&lt;br /&gt;
 &lt;br /&gt;
 :: Recursion&lt;br /&gt;
 IF NOT &amp;quot;%3&amp;quot;==&amp;quot;&amp;quot; GOTO SecondTime&lt;br /&gt;
 :: Create temporary batch file&lt;br /&gt;
 &amp;gt; TEMPDTT1.BAT ECHO @PROMPT %0 $D $T&lt;br /&gt;
 :: Do _N_O_T_ replace &amp;quot;COMMAND /C&amp;quot; with CALL in the next line&lt;br /&gt;
 &amp;gt; TEMPDTT2.BAT COMMAND /C TEMPDTT1.BAT&lt;br /&gt;
 TEMPDTT2&lt;br /&gt;
 &lt;br /&gt;
 :SecondTime&lt;br /&gt;
 DEL TEMPDTT?.BAT&lt;br /&gt;
 SET DOW=%1&lt;br /&gt;
 SET DATE=%2&lt;br /&gt;
 SET TIME=%3&lt;br /&gt;
 &lt;br /&gt;
 SET CONNECT=vastab&lt;br /&gt;
 PING -n 1 %HOST% | FIND &amp;quot;TTL=&amp;quot; &amp;gt; NUL&lt;br /&gt;
 IF ERRORLEVEL 1 SET CONNECT=ei vasta&lt;br /&gt;
 ECHO %DATE% %TIME% Host %HOST% %CONNECT%&lt;br /&gt;
&lt;br /&gt;
Mis annab umbes sellise tulemuse&lt;br /&gt;
 11-13-2005 20:01:51.73 Host 192.168.1.1 vastab&lt;br /&gt;
või&lt;br /&gt;
 11-13-2005 20:03:05.99 Host 192.168.1.17 ei vasta&lt;br /&gt;
Kui me soovime ka pingi aega näha, siis tuleb veel natukene &amp;quot;trikitada&amp;quot;.  Kõik on ilus senikaua, kuni meie väljundisse sattuv soga ei sisalda märke mis on command.com jaoks eritähendusega (&amp;lt;&amp;gt;|?* jms.). Paraku, PING käsu tarvitamisel just sedasi võibki juhtuda. Näide:&lt;br /&gt;
&lt;br /&gt;
 C:\DOCUME~1\offf&amp;gt;ping 192.168.1.1&lt;br /&gt;
 Pinging 192.168.1.1 with 32 bytes of data:&lt;br /&gt;
 Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&lt;br /&gt;
&lt;br /&gt;
Nagu me näeme, satub kiire ühenduse korral väljundisse märk &amp;quot;&amp;lt;&amp;quot; mis on command.com jaoks eritähendusega ja seesugust rida enam käsureana tarvitada ei saa. Appi tuleb parameeter -l millega seatakse paketi suurust. Kui kohtvõrgu või ülikiire ühenduse korral paketisuurus piisavalt suureks ajada, läheb pingi aeg piisavalt suureks ja &amp;lt; märki ei kasutata.&lt;br /&gt;
&lt;br /&gt;
 C:\DOCUME~1\offf&amp;gt;ping -n 1 -l 65500 192.168.1.1&lt;br /&gt;
 Pinging 192.168.1.1 with 65500 bytes of data:&lt;br /&gt;
 Reply from 192.168.1.1: bytes=65500 time=13ms TTL=255&lt;br /&gt;
&lt;br /&gt;
See parameeter tuleb igaühel ise katseliselt paika ajada, sest mõned hostid võivad turvakaalutlustel keelduda väga suurele ICMP paketile vastamast (ping käsku saab ka kuritarvitada, ühenduse blokeerimiseks). Igal juhul, kui asendada ülal toodud koodis 4 viimast rida (SET -- ECHO) järgneva koodiga:&lt;br /&gt;
&lt;br /&gt;
 SET PKTSIZE=65500&lt;br /&gt;
 PING -n 1 -l %PKTSIZE% %HOST% | FIND &amp;quot;Reply&amp;quot; &amp;gt; TEMPR.BAT &lt;br /&gt;
 &amp;gt;&amp;gt; REPLY.BAT ECHO SET REPLY=%%5 %%6&lt;br /&gt;
 CALL TEMPR.BAT&lt;br /&gt;
 IF NOT &amp;quot;%REPLY%&amp;quot;==&amp;quot;&amp;quot; ECHO %DATE% %TIME% Reply form %HOST% %REPLY%&lt;br /&gt;
 IF &amp;quot;%REPLY%&amp;quot;==&amp;quot;&amp;quot; ECHO %DATE% %TIME% %HOST% no reply &lt;br /&gt;
 DEL REPLY.BAT&lt;br /&gt;
 DEL TEMPR.BAT&lt;br /&gt;
&lt;br /&gt;
Saame me sellise vastuse&lt;br /&gt;
&lt;br /&gt;
 11-13-2005 20:00:50.05 Reply form 192.168.1.1 time 13ms&lt;br /&gt;
&lt;br /&gt;
Või sellise vastuse, kui meie pingile ei vastata&lt;br /&gt;
&lt;br /&gt;
 11-13-2005 20:00:50.05  192.168.1.17 no reply&lt;br /&gt;
&lt;br /&gt;
Loomulikult saab neid tekste oma maitse kohaselt redigeerida.&lt;br /&gt;
&lt;br /&gt;
==Faili perioodiline käivitamine==&lt;br /&gt;
Perioodiliseks käivitamiseks on mõistlik kasutada Windowsi operatsioonisüsteemis olevat Task Sheduleri.&lt;br /&gt;
Kiirtee seadistaja leidmiseks ja käivitusrutiini loomiseks on järgmine Start menüü &amp;gt; programs &amp;gt; Accessories &amp;gt; System tools &amp;gt; Scheduled Tasks &amp;gt; Add Scheduled Task.&lt;br /&gt;
&lt;br /&gt;
Käivitatavaks programmiks on eelnevalt loodud Batch fail.&lt;br /&gt;
Detailne seadistamine sõltub kasutatavast operatsioonisüsteemist ning sellega tutvumiseks on soovitav kasutada operatsioonisüsteemi spikrit (help).&lt;br /&gt;
&lt;br /&gt;
==Praktilised näpunäited==&lt;br /&gt;
Teenusepakkuja lüüsi pingimine on soovitatav selle pärast, et kui te pingite suvalist hosti internetis ei ole tulemuseks mitte see kas teie ühendus on töökorrast vaid kas see host on töökorras. Samuti ei pruugi see anda ka ikkagi reaalseid tulemusi kuna tegelikuses on teenusepakkuja arvutivõrgu infrastruktuur keerulisem ning viga võib olla ka tekkinud peale esimest lüüsi.&lt;br /&gt;
Testi liiga tihe käivitamine pika ajajooksul (näiteks iga  minuti tagant) ei pruugi anda soovitud tulemusi ning võib hoopis vähendada võrguühenduse läbilaskevõimet või operatsioonisüsteemi jõudlust.&lt;br /&gt;
&lt;br /&gt;
Autor: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=12170 silverk]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2552</id>
		<title>Võrguühenduse kontrollimine</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2552"/>
		<updated>2005-11-13T18:30:21Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategooria:Võrgukihi juhendid]]&lt;br /&gt;
See sobib kasutamiseks siis kui mis iganes põhjustel ei ole võimalik võrguühenduse olemasolu operatsioonisüsteemi seirevahenditega seirata. Mõeldud kasutamiseks Microsoft'i operatsioonisüsteemis.&lt;br /&gt;
==Käivitatava faili loomine==&lt;br /&gt;
Selleks sobib näiteks  [http://en.wikipedia.org/wiki/BAT_file Batch file]&lt;br /&gt;
Batch faili loomiseks on kõige sobivam lihtne tekstiredaktor. Näiteks kas notepad või edit. &lt;br /&gt;
failis peab olema järgmine.&lt;br /&gt;
&lt;br /&gt;
 :: Pingib teenusepakkuja lüüsi lisab pingimise kellaaja ja kuupäeva ning kirjutab tulemused &lt;br /&gt;
 :: tekstifaili.&lt;br /&gt;
    &lt;br /&gt;
    ping ''[siia kirjuta oma teenusepakkuja lüüsi IP aadress]'' &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    date /T &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    time /T &amp;gt;&amp;gt; tulemus.tst&lt;br /&gt;
&lt;br /&gt;
fail tuleb salvestada laiendiga .bat&lt;br /&gt;
&lt;br /&gt;
Selle toimimist saab kontrollida käivitades faili kas käsurealt või failihaldurist.&lt;br /&gt;
&lt;br /&gt;
Edukal käivitamisel peab tulemus.txt sisu välja nägema umbes selline :&lt;br /&gt;
&lt;br /&gt;
    T 08.11.2005 &lt;br /&gt;
    09:58&lt;br /&gt;
    Pinging neti.ee [194.126.101.79] with 32 bytes of data:&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=10ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=12ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=13ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=14ms TTL=58&lt;br /&gt;
    Ping statistics for 194.126.101.79:&lt;br /&gt;
         Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),&lt;br /&gt;
    Approximate round trip times in milli-seconds:&lt;br /&gt;
         Minimum = 10ms, Maximum = 14ms, Average = 12ms&lt;br /&gt;
&lt;br /&gt;
Uuemate Windowside käsuinterpretaator on pisut võimekam. Järgenev CMD fail töötab kindlasti Windows 2K, XP ja 2K3 keskkonnas. NT4 keskkonnas võiks see asi teoreetiliselt t88tada, kuigi usutavasti ei ole seal seatud keskkonnamuutujaid %TIME% ja %DATE%. Sellisel juhult tuleb vastavad keskkonnamuutujad ise seada:&lt;br /&gt;
 FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`DATE /T`) DO @SET KUUP=%%A&lt;br /&gt;
Seab muutuja KUUP väärtuseks käsu DATE väljundi. Kellaajaga tuleb toimida analoogiliselt.&lt;br /&gt;
Soovitav on faili nimeks panna CMD, mitte BAT, sest siis teab Windows, et faili interpreteerimiseks tuleb kasutada laiendatud võimalustega käsuinterpretaatorit&lt;br /&gt;
&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 host-mida-tahame-pingida ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Annab umbes seesuguse väljundi&lt;br /&gt;
&lt;br /&gt;
 P 11/13/2005 12:08:34,06 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sedasi satub iga vastus ilusasti koos kuupäeva ja kellaajaga oma reale ja seda faili on oluliselt mugavam töödelda. NB! kuna Windowsi tekstiparser on pehmelt öeldes &amp;quot;piiratud&amp;quot;, siis ei tohiks ping käsu n-parameetrit muuta. Kui hosti soovitakse mitu korda pingida tuleks terve ülalviidatud koodilõik asetada käsuskripti (näiteks png.cmd) ja kutsuda välja teisest käsuskriptist FOR tsükli abil. &lt;br /&gt;
&lt;br /&gt;
fail mpng.cmd&lt;br /&gt;
 @FOR /L %%I IN (1,1,3) DO @PNG.CMD&lt;br /&gt;
&lt;br /&gt;
fail png.cmd&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 192.168.1.1 ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot; &amp;gt;&amp;gt; ans.txt&lt;br /&gt;
&lt;br /&gt;
fail ans.txt (tekib meile)&lt;br /&gt;
 P 11/13/2005 12:31:05,37 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,50 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,60 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
&lt;br /&gt;
On siililegi selge, et pingimiskordade arvu muudame me failis mpng mängides IN seti kolmanda parameetriga, mis hetkel omab väärtust &amp;quot;3&amp;quot;. Samuti on soovitav näites toodud IP aadress vahetada selle IP aadressi vastu mida soovime pingida.&lt;br /&gt;
&lt;br /&gt;
Windows 9x seeriaga on asi natukene keerukam. Kahjuks tuleb kasutada &amp;quot;häkki&amp;quot;. Probleem on selles, et &amp;quot;klassikalise&amp;quot; command.com käsuinterpretaatori standardvahenditega '''ei ole võimalik''' käsu väljundit keskkonnamuutujasse saada. Selleks kasutatakse &amp;quot;vahefaili häkki&amp;quot;, mida saab näha allpool, kuupäeva ja kellaaja määramisel ning pingi aja salvestamisel. Mida tuleb tähele panna - kuna selle BAT'i töö käigus luuakse jooksvasse kataloogi ajutised failid TEMPDTT1.BAT, TEMPDTT2.BAT (kui kasutada pingi aja lisavõimalust siis ka TEMPR.BAT ja REPLY.BAT), siis Sinu poolt loodava faili nimi  '''ei tohi''' nendega kattuda. Kõige arukam oleks oma &amp;quot;võrgukontrollijale&amp;quot; teha eraldi kataloog.&lt;br /&gt;
&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 :: DateTime.bat&lt;br /&gt;
 :: Set environment variables with current Date, Time and DayOfWeek&lt;br /&gt;
 :: Koodis on kasutatud materjale siit http://www.robvanderwoude.com/index.html&lt;br /&gt;
 :: Muutuja HOST - sisesta host mida soovid pingida&lt;br /&gt;
 &lt;br /&gt;
 SET HOST=192.168.1.1&lt;br /&gt;
 &lt;br /&gt;
 :: Recursion&lt;br /&gt;
 IF NOT &amp;quot;%3&amp;quot;==&amp;quot;&amp;quot; GOTO SecondTime&lt;br /&gt;
 :: Create temporary batch file&lt;br /&gt;
 &amp;gt; TEMPDTT1.BAT ECHO @PROMPT %0 $D $T&lt;br /&gt;
 :: Do _N_O_T_ replace &amp;quot;COMMAND /C&amp;quot; with CALL in the next line&lt;br /&gt;
 &amp;gt; TEMPDTT2.BAT COMMAND /C TEMPDTT1.BAT&lt;br /&gt;
 TEMPDTT2&lt;br /&gt;
 &lt;br /&gt;
 :SecondTime&lt;br /&gt;
 DEL TEMPDTT?.BAT&lt;br /&gt;
 SET DOW=%1&lt;br /&gt;
 SET DATE=%2&lt;br /&gt;
 SET TIME=%3&lt;br /&gt;
 &lt;br /&gt;
 SET CONNECT=vastab&lt;br /&gt;
 PING -n 1 %HOST% | FIND &amp;quot;TTL=&amp;quot; &amp;gt; NUL&lt;br /&gt;
 IF ERRORLEVEL 1 SET CONNECT=ei vasta&lt;br /&gt;
 ECHO %DATE% %TIME% Host %HOST% %CONNECT%&lt;br /&gt;
&lt;br /&gt;
Mis annab umbes sellise tulemuse&lt;br /&gt;
 11-13-2005 20:01:51.73 Host 192.168.1.1 vastab&lt;br /&gt;
või&lt;br /&gt;
 11-13-2005 20:03:05.99 Host 192.168.1.17 ei vasta&lt;br /&gt;
Kui me soovime ka pingi aega näha, siis tuleb veel natukene &amp;quot;trikitada&amp;quot;.  Kõik on ilus senikaua, kuni meie väljundisse sattuv soga ei sisalda märke mis on command.com jaoks eritähendusega (&amp;lt;&amp;gt;|?* jms.). Paraku, PING käsu tarvitamisel just sedasi võibki juhtuda. Näide:&lt;br /&gt;
&lt;br /&gt;
 C:\DOCUME~1\offf&amp;gt;ping 192.168.1.1&lt;br /&gt;
 Pinging 192.168.1.1 with 32 bytes of data:&lt;br /&gt;
 Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&lt;br /&gt;
&lt;br /&gt;
Nagu me näeme, satub kiire ühenduse korral väljundisse märk &amp;quot;&amp;lt;&amp;quot; mis on command.com jaoks eritähendusega ja seesugust rida enam käsureana tarvitada ei saa. Appi tuleb parameeter -l millega seatakse paketi suurust. Kui kohtvõrgu või ülikiire ühenduse korral paketisuurus piisavalt suureks ajada, läheb pingi aeg piisavalt suureks ja &amp;lt; märki ei kasutata.&lt;br /&gt;
&lt;br /&gt;
 C:\DOCUME~1\offf&amp;gt;ping -n 1 -l 65500 192.168.1.1&lt;br /&gt;
 Pinging 192.168.1.1 with 65500 bytes of data:&lt;br /&gt;
 Reply from 192.168.1.1: bytes=65500 time=13ms TTL=255&lt;br /&gt;
&lt;br /&gt;
See parameeter tuleb igaühel ise katseliselt paika ajada, sest mõned hostid võivad turvakaalutlustel keelduda väga suurele ICMP paketile vastamast (ping käsku saab ka kuritarvitada, ühenduse blokeerimiseks). Igal juhul, kui asendada ülal toodud koodis 4 viimast rida (SET -- ECHO) järgneva koodiga:&lt;br /&gt;
&lt;br /&gt;
 SET PKTSIZE=65500&lt;br /&gt;
 PING -n 1 -l %PKTSIZE% %HOST% | FIND &amp;quot;Reply&amp;quot; &amp;gt; TEMPR.BAT &lt;br /&gt;
 &amp;gt;&amp;gt; REPLY.BAT ECHO SET REPLY=%%5 %%6&lt;br /&gt;
 CALL TEMPR.BAT&lt;br /&gt;
 IF NOT &amp;quot;%REPLY%&amp;quot;==&amp;quot;&amp;quot; ECHO %DATE% %TIME% Reply form %HOST% %REPLY%&lt;br /&gt;
 IF &amp;quot;%REPLY%&amp;quot;==&amp;quot;&amp;quot; ECHO %DATE% %TIME% %HOST% no reply &lt;br /&gt;
 DEL REPLY.BAT&lt;br /&gt;
 DEL TEMPR.BAT&lt;br /&gt;
&lt;br /&gt;
Saame me sellise vastuse&lt;br /&gt;
&lt;br /&gt;
 11-13-2005 20:00:50.05 Reply form 192.168.1.1 time 13ms&lt;br /&gt;
&lt;br /&gt;
Või sellise vastuse, kui meie pingile ei vastata&lt;br /&gt;
&lt;br /&gt;
 11-13-2005 20:00:50.05  192.168.1.17 no reply&lt;br /&gt;
&lt;br /&gt;
Loomulikult saab neid tekste oma maitse kohaselt redigeerida.&lt;br /&gt;
&lt;br /&gt;
==Faili perioodiline käivitamine==&lt;br /&gt;
Perioodiliseks käivitamiseks on mõistlik kasutada Windowsi operatsioonisüsteemis olevat Task Sheduleri.&lt;br /&gt;
Kiirtee seadistaja leidmiseks ja käivitusrutiini loomiseks on järgmine Start menüü &amp;gt; programs &amp;gt; Accessories &amp;gt; System tools &amp;gt; Scheduled Tasks &amp;gt; Add Scheduled Task.&lt;br /&gt;
&lt;br /&gt;
Käivitatavaks programmiks on eelnevalt loodud Batch fail.&lt;br /&gt;
Detailne seadistamine sõltub kasutatavast operatsioonisüsteemist ning sellega tutvumiseks on soovitav kasutada operatsioonisüsteemi spikrit (help).&lt;br /&gt;
&lt;br /&gt;
==Praktilised näpunäited==&lt;br /&gt;
Teenusepakkuja lüüsi pingimine on soovitatav selle pärast, et kui te pingite suvalist hosti internetis ei ole tulemuseks mitte see kas teie ühendus on töökorrast vaid kas see host on töökorras. Samuti ei pruugi see anda ka ikkagi reaalseid tulemusi kuna tegelikuses on teenusepakkuja arvutivõrgu infrastruktuur keerulisem ning viga võib olla ka tekkinud peale esimest lüüsi.&lt;br /&gt;
Testi liiga tihe käivitamine pika ajajooksul (näiteks iga  minuti tagant) ei pruugi anda soovitud tulemusi ning võib hoopis vähendada võrguühenduse läbilaskevõimet või operatsioonisüsteemi jõudlust.&lt;br /&gt;
&lt;br /&gt;
Autor: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=12170 silverk]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Kategooria:F%C3%BC%C3%BCsilise_kihi_juhendid&amp;diff=2551</id>
		<title>Kategooria:Füüsilise kihi juhendid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Kategooria:F%C3%BC%C3%BCsilise_kihi_juhendid&amp;diff=2551"/>
		<updated>2005-11-13T18:12:36Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategooria:Andmeside]]&lt;br /&gt;
&lt;br /&gt;
Jutud sellest, mis &amp;quot;purk&amp;quot; mida teha oskab ja milleks hea on, kaablitest ja nende valmistamisest, võrgutopoloogiatest ja tehnoloogiatest. Jutud WiFi füüsilisest poolest - antennid, kaablid, mastid.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2550</id>
		<title>Võrguühenduse kontrollimine</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2550"/>
		<updated>2005-11-13T18:02:22Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Käivitatava faili loomine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategooria:Võrgukihi juhendid]]&lt;br /&gt;
See sobib kasutamiseks siis kui mis iganes põhjustel ei ole võimalik võrguühenduse olemasolu operatsioonisüsteemi seirevahenditega seirata. Mõeldud kasutamiseks Microsoft'i operatsioonisüsteemis.&lt;br /&gt;
==Käivitatava faili loomine==&lt;br /&gt;
Selleks sobib näiteks  [http://en.wikipedia.org/wiki/BAT_file Batch file]&lt;br /&gt;
Batch faili loomiseks on kõige sobivam lihtne tekstiredaktor. Näiteks kas notepad või edit. &lt;br /&gt;
failis peab olema järgmine.&lt;br /&gt;
&lt;br /&gt;
 :: Pingib teenusepakkuja lüüsi lisab pingimise kellaaja ja kuupäeva ning kirjutab tulemused &lt;br /&gt;
 :: tekstifaili.&lt;br /&gt;
    &lt;br /&gt;
    ping ''[siia kirjuta oma teenusepakkuja lüüsi IP aadress]'' &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    date /T &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    time /T &amp;gt;&amp;gt; tulemus.tst&lt;br /&gt;
&lt;br /&gt;
fail tuleb salvestada laiendiga .bat&lt;br /&gt;
&lt;br /&gt;
Selle toimimist saab kontrollida käivitades faili kas käsurealt või failihaldurist.&lt;br /&gt;
&lt;br /&gt;
Edukal käivitamisel peab tulemus.txt sisu välja nägema umbes selline :&lt;br /&gt;
&lt;br /&gt;
    T 08.11.2005 &lt;br /&gt;
    09:58&lt;br /&gt;
    Pinging neti.ee [194.126.101.79] with 32 bytes of data:&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=10ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=12ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=13ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=14ms TTL=58&lt;br /&gt;
    Ping statistics for 194.126.101.79:&lt;br /&gt;
         Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),&lt;br /&gt;
    Approximate round trip times in milli-seconds:&lt;br /&gt;
         Minimum = 10ms, Maximum = 14ms, Average = 12ms&lt;br /&gt;
&lt;br /&gt;
Uuemate Windowside käsuinterpretaator on pisut võimekam. Järgenev CMD fail töötab kindlasti Windows 2K, XP ja 2K3 keskkonnas. NT4 keskkonnas võiks see asi teoreetiliselt t88tada, kuigi usutavasti ei ole seal seatud keskkonnamuutujaid %TIME% ja %DATE%. Sellisel juhult tuleb vastavad keskkonnamuutujad ise seada:&lt;br /&gt;
 FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`DATE /T`) DO @SET KUUP=%%A&lt;br /&gt;
Seab muutuja KUUP väärtuseks käsu DATE väljundi. Kellaajaga tuleb toimida analoogiliselt.&lt;br /&gt;
Soovitav on faili nimeks panna CMD, mitte BAT, sest siis teab Windows, et faili interpreteerimiseks tuleb kasutada laiendatud võimalustega käsuinterpretaatorit&lt;br /&gt;
&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 host-mida-tahame-pingida ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Annab umbes seesuguse väljundi&lt;br /&gt;
&lt;br /&gt;
 P 11/13/2005 12:08:34,06 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sedasi satub iga vastus ilusasti koos kuupäeva ja kellaajaga oma reale ja seda faili on oluliselt mugavam töödelda. NB! kuna Windowsi tekstiparser on pehmelt öeldes &amp;quot;piiratud&amp;quot;, siis ei tohiks ping käsu n-parameetrit muuta. Kui hosti soovitakse mitu korda pingida tuleks terve ülalviidatud koodilõik asetada käsuskripti (näiteks png.cmd) ja kutsuda välja teisest käsuskriptist FOR tsükli abil. &lt;br /&gt;
&lt;br /&gt;
fail mpng.cmd&lt;br /&gt;
 @FOR /L %%I IN (1,1,3) DO @PNG.CMD&lt;br /&gt;
&lt;br /&gt;
fail png.cmd&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 192.168.1.1 ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot; &amp;gt;&amp;gt; ans.txt&lt;br /&gt;
&lt;br /&gt;
fail ans.txt (tekib meile)&lt;br /&gt;
 P 11/13/2005 12:31:05,37 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,50 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,60 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
&lt;br /&gt;
On siililegi selge, et pingimiskordade arvu muudame me failis mpng mängides IN seti kolmanda parameetriga, mis hetkel omab väärtust &amp;quot;3&amp;quot;. Samuti on soovitav näites toodud IP aadress vahetada selle IP aadressi vastu mida soovime pingida.&lt;br /&gt;
&lt;br /&gt;
Windows 9x seeriale peaks sobima selline fail. NB! Faili EI OLE testitud 9x keskkonnas, kuna puudub selline keskkond.&lt;br /&gt;
&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 :: DateTime.bat&lt;br /&gt;
 :: Set environment variables with current Date, Time and DayOfWeek&lt;br /&gt;
 :: Koodis on kasutatud materjale siit http://www.robvanderwoude.com/index.html&lt;br /&gt;
 :: Muutuja HOST - sisesta host mida soovid pingida&lt;br /&gt;
 &lt;br /&gt;
 SET HOST=192.168.1.1&lt;br /&gt;
 &lt;br /&gt;
 :: Recursion&lt;br /&gt;
 IF NOT &amp;quot;%3&amp;quot;==&amp;quot;&amp;quot; GOTO SecondTime&lt;br /&gt;
 :: Create temporary batch file&lt;br /&gt;
 &amp;gt; TEMPDTT1.BAT ECHO @PROMPT %0 $D $T&lt;br /&gt;
 :: Do _N_O_T_ replace &amp;quot;COMMAND /C&amp;quot; with CALL in the next line&lt;br /&gt;
 &amp;gt; TEMPDTT2.BAT COMMAND /C TEMPDTT1.BAT&lt;br /&gt;
 TEMPDTT2&lt;br /&gt;
 &lt;br /&gt;
 :SecondTime&lt;br /&gt;
 DEL TEMPDTT?.BAT&lt;br /&gt;
 SET DOW=%1&lt;br /&gt;
 SET DATE=%2&lt;br /&gt;
 SET TIME=%3&lt;br /&gt;
 &lt;br /&gt;
 SET CONNECT=vastab&lt;br /&gt;
 PING -n 1 %HOST% | FIND &amp;quot;TTL=&amp;quot; &amp;gt; NUL&lt;br /&gt;
 IF ERRORLEVEL 1 SET CONNECT=ei vasta&lt;br /&gt;
 ECHO %DATE% %TIME% Host %HOST% %CONNECT%&lt;br /&gt;
&lt;br /&gt;
Mis annab umbes sellise tulemuse&lt;br /&gt;
 11-13-2005 20:01:51.73 Host 192.168.1.1 vastab&lt;br /&gt;
või&lt;br /&gt;
 11-13-2005 20:03:05.99 Host 192.168.1.17 ei vasta&lt;br /&gt;
Kui me soovime ka pingi aega näha, siis tuleb veel natukene &amp;quot;trikitada&amp;quot;. Probleem on selles, et &amp;quot;klassikalise&amp;quot; command.com käsuinterpretaatori standardvahenditega ei ole võimalik käsu väljundit keskkonnamuutujasse saada. Selleks kasutatakse &amp;quot;vahefaili häkki&amp;quot;, mida saab näha ülalpool, kuupäeva ja kellaaja määramisel. Kõik on ilus senikaua, kuni meie väljundisse sattuv soga ei sisalda märke mis on command.com jaoks eritähendusega (&amp;lt;&amp;gt;|?* jms.). Paraku, PING käsu tarvitamisel just sedasi võibki juhtuda. Näide:&lt;br /&gt;
&lt;br /&gt;
 C:\DOCUME~1\offf&amp;gt;ping 192.168.1.1&lt;br /&gt;
 Pinging 192.168.1.1 with 32 bytes of data:&lt;br /&gt;
 Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&lt;br /&gt;
&lt;br /&gt;
Nagu me näeme, satub kiire ühenduse korral väljundisse märk &amp;quot;&amp;lt;&amp;quot; mis on command.com jaoks eritähendusega ja seesugust rida enam käsureana tarvitada ei saa. Appi tuleb parameeter -l millega seatakse paketi suurust. Kui kohtvõrgu või ülikiire ühenduse korral paketisuurus piisavalt suureks ajada, läheb pingi aeg piisavalt suureks ja &amp;lt; märki ei kasutata.&lt;br /&gt;
&lt;br /&gt;
 C:\DOCUME~1\offf&amp;gt;ping -n 1 -l 65500 192.168.1.1&lt;br /&gt;
 Pinging 192.168.1.1 with 65500 bytes of data:&lt;br /&gt;
 Reply from 192.168.1.1: bytes=65500 time=13ms TTL=255&lt;br /&gt;
&lt;br /&gt;
See parameeter tuleb igaühel ise katseliselt paika ajada, sest mõned hostid võivad turvakaalutlustel keelduda väga suurele ICMP paketile vastamast (ping käsku saab ka kuritarvitada, ühenduse blokeerimiseks). Igal juhul, kui asendada ülal toodud koodis 4 viimast rida (SET -- ECHO) järgneva koodiga:&lt;br /&gt;
&lt;br /&gt;
 SET PKTSIZE=65500&lt;br /&gt;
 PING -n 1 -l %PKTSIZE% %HOST% | FIND &amp;quot;Reply&amp;quot; &amp;gt; TEMP.BAT &lt;br /&gt;
 &amp;gt;&amp;gt; REPLY.BAT ECHO SET REPLY=%%5 %%6&lt;br /&gt;
 CALL TEMP.BAT&lt;br /&gt;
 IF NOT &amp;quot;%REPLY%&amp;quot;==&amp;quot;&amp;quot; ECHO %DATE% %TIME% Reply form %HOST% %REPLY%&lt;br /&gt;
 IF &amp;quot;%REPLY%&amp;quot;==&amp;quot;&amp;quot; ECHO %DATE% %TIME% %HOST% no reply &lt;br /&gt;
 DEL REPLY.BAT&lt;br /&gt;
 DEL TEMP.BAT&lt;br /&gt;
&lt;br /&gt;
Saame me sellise vastuse&lt;br /&gt;
&lt;br /&gt;
 11-13-2005 20:00:50.05 Reply form 192.168.1.1 time 13ms&lt;br /&gt;
&lt;br /&gt;
Või sellise vastuse, kui meie pingile ei vastata&lt;br /&gt;
&lt;br /&gt;
 11-13-2005 20:00:50.05  192.168.1.17 no reply&lt;br /&gt;
&lt;br /&gt;
Loomulikult saab neid tekste oma maitse kohaselt redigeerida.&lt;br /&gt;
&lt;br /&gt;
==Faili perioodiline käivitamine==&lt;br /&gt;
Perioodiliseks käivitamiseks on mõistlik kasutada Windowsi operatsioonisüsteemis olevat Task Sheduleri.&lt;br /&gt;
Kiirtee seadistaja leidmiseks ja käivitusrutiini loomiseks on järgmine Start menüü &amp;gt; programs &amp;gt; Accessories &amp;gt; System tools &amp;gt; Scheduled Tasks &amp;gt; Add Scheduled Task.&lt;br /&gt;
&lt;br /&gt;
Käivitatavaks programmiks on eelnevalt loodud Batch fail.&lt;br /&gt;
Detailne seadistamine sõltub kasutatavast operatsioonisüsteemist ning sellega tutvumiseks on soovitav kasutada operatsioonisüsteemi spikrit (help).&lt;br /&gt;
&lt;br /&gt;
==Praktilised näpunäited==&lt;br /&gt;
Teenusepakkuja lüüsi pingimine on soovitatav selle pärast, et kui te pingite suvalist hosti internetis ei ole tulemuseks mitte see kas teie ühendus on töökorrast vaid kas see host on töökorras. Samuti ei pruugi see anda ka ikkagi reaalseid tulemusi kuna tegelikuses on teenusepakkuja arvutivõrgu infrastruktuur keerulisem ning viga võib olla ka tekkinud peale esimest lüüsi.&lt;br /&gt;
Testi liiga tihe käivitamine pika ajajooksul (näiteks iga  minuti tagant) ei pruugi anda soovitud tulemusi ning võib hoopis vähendada võrguühenduse läbilaskevõimet või operatsioonisüsteemi jõudlust.&lt;br /&gt;
&lt;br /&gt;
Autor: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=12170 silverk]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2549</id>
		<title>Võrguühenduse kontrollimine</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2549"/>
		<updated>2005-11-13T17:56:54Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Käivitatava faili loomine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategooria:Võrgukihi juhendid]]&lt;br /&gt;
See sobib kasutamiseks siis kui mis iganes põhjustel ei ole võimalik võrguühenduse olemasolu operatsioonisüsteemi seirevahenditega seirata. Mõeldud kasutamiseks Microsoft'i operatsioonisüsteemis.&lt;br /&gt;
==Käivitatava faili loomine==&lt;br /&gt;
Selleks sobib näiteks  [http://en.wikipedia.org/wiki/BAT_file Batch file]&lt;br /&gt;
Batch faili loomiseks on kõige sobivam lihtne tekstiredaktor. Näiteks kas notepad või edit. &lt;br /&gt;
failis peab olema järgmine.&lt;br /&gt;
&lt;br /&gt;
    REM Pingib teenusepakkuja lüüsi lisab pingimise kellaaja ja kuupäeva ning kirjutab tulemused &amp;lt;br&amp;gt; tekstifaili.&lt;br /&gt;
    &lt;br /&gt;
    ping ''[siia kirjuta oma teenusepakkuja lüüsi IP aadress]'' &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    date /T &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    time /T &amp;gt;&amp;gt; tulemus.tst&lt;br /&gt;
&lt;br /&gt;
fail tuleb salvestada laiendiga .bat&lt;br /&gt;
&lt;br /&gt;
Selle toimimist saab kontrollida käivitades faili kas käsurealt või failihaldurist.&lt;br /&gt;
&lt;br /&gt;
Edukal käivitamisel peab tulemus.txt sisu välja nägema umbes selline :&lt;br /&gt;
&lt;br /&gt;
    T 08.11.2005 &lt;br /&gt;
    09:58&lt;br /&gt;
    Pinging neti.ee [194.126.101.79] with 32 bytes of data:&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=10ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=12ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=13ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=14ms TTL=58&lt;br /&gt;
    Ping statistics for 194.126.101.79:&lt;br /&gt;
         Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),&lt;br /&gt;
    Approximate round trip times in milli-seconds:&lt;br /&gt;
         Minimum = 10ms, Maximum = 14ms, Average = 12ms&lt;br /&gt;
&lt;br /&gt;
Uuemate Windowside käsuinterpretaator on pisut võimekam. Järgenev CMD fail töötab kindlasti Windows 2K, XP ja 2K3 keskkonnas. NT4 keskkonnas võiks see asi teoreetiliselt t88tada, kuigi usutavasti ei ole seal seatud keskkonnamuutujaid %TIME% ja %DATE%. Sellisel juhult tuleb vastavad keskkonnamuutujad ise seada:&lt;br /&gt;
 FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`DATE /T`) DO @SET KUUP=%%A&lt;br /&gt;
Seab muutuja KUUP väärtuseks käsu DATE väljundi. Kellaajaga tuleb toimida analoogiliselt.&lt;br /&gt;
Soovitav on faili nimeks panna CMD, mitte BAT, sest siis teab Windows, et faili interpreteerimiseks tuleb kasutada laiendatud võimalustega käsuinterpretaatorit&lt;br /&gt;
&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 host-mida-tahame-pingida ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Annab umbes seesuguse väljundi&lt;br /&gt;
&lt;br /&gt;
 P 11/13/2005 12:08:34,06 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sedasi satub iga vastus ilusasti koos kuupäeva ja kellaajaga oma reale ja seda faili on oluliselt mugavam töödelda. NB! kuna Windowsi tekstiparser on pehmelt öeldes &amp;quot;piiratud&amp;quot;, siis ei tohiks ping käsu n-parameetrit muuta. Kui hosti soovitakse mitu korda pingida tuleks terve ülalviidatud koodilõik asetada käsuskripti (näiteks png.cmd) ja kutsuda välja teisest käsuskriptist FOR tsükli abil. &lt;br /&gt;
&lt;br /&gt;
fail mpng.cmd&lt;br /&gt;
 @FOR /L %%I IN (1,1,3) DO @PNG.CMD&lt;br /&gt;
&lt;br /&gt;
fail png.cmd&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 192.168.1.1 ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot; &amp;gt;&amp;gt; ans.txt&lt;br /&gt;
&lt;br /&gt;
fail ans.txt (tekib meile)&lt;br /&gt;
 P 11/13/2005 12:31:05,37 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,50 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,60 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
&lt;br /&gt;
On siililegi selge, et pingimiskordade arvu muudame me failis mpng mängides IN seti kolmanda parameetriga, mis hetkel omab väärtust &amp;quot;3&amp;quot;. Samuti on soovitav näites toodud IP aadress vahetada selle IP aadressi vastu mida soovime pingida.&lt;br /&gt;
&lt;br /&gt;
Windows 9x seeriale peaks sobima selline fail. NB! Faili EI OLE testitud 9x keskkonnas, kuna puudub selline keskkond.&lt;br /&gt;
&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 :: DateTime.bat&lt;br /&gt;
 :: Set environment variables with current Date, Time and DayOfWeek&lt;br /&gt;
 :: Koodis on kasutatud materjale siit http://www.robvanderwoude.com/index.html&lt;br /&gt;
 :: Muutuja HOST - sisesta host mida soovid pingida&lt;br /&gt;
 &lt;br /&gt;
 SET HOST=192.168.1.1&lt;br /&gt;
 &lt;br /&gt;
 :: Recursion&lt;br /&gt;
 IF NOT &amp;quot;%3&amp;quot;==&amp;quot;&amp;quot; GOTO SecondTime&lt;br /&gt;
 :: Create temporary batch file&lt;br /&gt;
 &amp;gt; TEMPDTT1.BAT ECHO @PROMPT %0 $D $T&lt;br /&gt;
 :: Do _N_O_T_ replace &amp;quot;COMMAND /C&amp;quot; with CALL in the next line&lt;br /&gt;
 &amp;gt; TEMPDTT2.BAT COMMAND /C TEMPDTT1.BAT&lt;br /&gt;
 TEMPDTT2&lt;br /&gt;
 &lt;br /&gt;
 :SecondTime&lt;br /&gt;
 DEL TEMPDTT?.BAT&lt;br /&gt;
 SET DOW=%1&lt;br /&gt;
 SET DATE=%2&lt;br /&gt;
 SET TIME=%3&lt;br /&gt;
 &lt;br /&gt;
 SET CONNECT=vastab&lt;br /&gt;
 PING -n 1 %HOST% | FIND &amp;quot;TTL=&amp;quot; &amp;gt; NUL&lt;br /&gt;
 IF ERRORLEVEL 1 SET CONNECT=ei vasta&lt;br /&gt;
 ECHO %DATE% %TIME% Host %HOST% %CONNECT%&lt;br /&gt;
&lt;br /&gt;
Mis annab umbes sellise tulemuse&lt;br /&gt;
 11-13-2005 20:01:51.73 Host 192.168.1.1 vastab&lt;br /&gt;
või&lt;br /&gt;
 11-13-2005 20:03:05.99 Host 192.168.1.17 ei vasta&lt;br /&gt;
Kui me soovime ka pingi aega näha, siis tuleb veel natukene &amp;quot;trikitada&amp;quot;. Probleem on selles, et &amp;quot;klassikalise&amp;quot; command.com käsuinterpretaatori standardvahenditega ei ole võimalik käsu väljundit keskkonnamuutujasse saada. Selleks kasutatakse &amp;quot;vahefaili häkki&amp;quot;, mida saab näha ülalpool, kuupäeva ja kellaaja määramisel. Kõik on ilus senikaua, kuni meie väljundisse sattuv soga ei sisalda märke mis on command.com jaoks eritähendusega (&amp;lt;&amp;gt;|?* jms.). Paraku, PING käsu tarvitamisel just sedasi võibki juhtuda. Näide:&lt;br /&gt;
&lt;br /&gt;
 C:\DOCUME~1\offf&amp;gt;ping 192.168.1.1&lt;br /&gt;
 Pinging 192.168.1.1 with 32 bytes of data:&lt;br /&gt;
 Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&lt;br /&gt;
&lt;br /&gt;
Nagu me näeme, satub kiire ühenduse korral väljundisse märk &amp;quot;&amp;lt;&amp;quot; mis on command.com jaoks eritähendusega ja seesugust rida enam käsureana tarvitada ei saa. Appi tuleb parameeter -l millega seatakse paketi suurust. Kui kohtvõrgu või ülikiire ühenduse korral paketisuurus piisavalt suureks ajada, läheb pingi aeg piisavalt suureks ja &amp;lt; märki ei kasutata.&lt;br /&gt;
&lt;br /&gt;
 C:\DOCUME~1\offf&amp;gt;ping -n 1 -l 65500 192.168.1.1&lt;br /&gt;
 Pinging 192.168.1.1 with 65500 bytes of data:&lt;br /&gt;
 Reply from 192.168.1.1: bytes=65500 time=13ms TTL=255&lt;br /&gt;
&lt;br /&gt;
See parameeter tuleb igaühel ise katseliselt paika ajada, sest mõned hostid võivad turvakaalutlustel keelduda väga suurele ICMP paketile vastamast (ping käsku saab ka kuritarvitada, ühenduse blokeerimiseks). Igal juhul, kui asendada ülal toodud koodis 4 viimast rida (SET -- ECHO) järgneva koodiga:&lt;br /&gt;
&lt;br /&gt;
 SET PKTSIZE=65500&lt;br /&gt;
 PING -n 1 -l %PKTSIZE% %HOST% | FIND &amp;quot;Reply&amp;quot; &amp;gt; TEMP.BAT &lt;br /&gt;
 &amp;gt;&amp;gt; REPLY.BAT ECHO SET REPLY=%%5 %%6&lt;br /&gt;
 CALL TEMP.BAT&lt;br /&gt;
 IF NOT &amp;quot;%REPLY%&amp;quot;==&amp;quot;&amp;quot; ECHO %DATE% %TIME% Reply form %HOST% %REPLY%&lt;br /&gt;
 IF &amp;quot;%REPLY%&amp;quot;==&amp;quot;&amp;quot; ECHO %DATE% %TIME% %HOST% no reply &lt;br /&gt;
 DEL REPLY.BAT&lt;br /&gt;
 DEL TEMP.BAT&lt;br /&gt;
&lt;br /&gt;
Saame me sellise vastuse&lt;br /&gt;
&lt;br /&gt;
 11-13-2005 20:00:50.05 Reply form 192.168.1.1 time 13ms&lt;br /&gt;
&lt;br /&gt;
Või sellise vastuse, kui meie pingile ei vastata&lt;br /&gt;
&lt;br /&gt;
 11-13-2005 20:00:50.05  192.168.1.17 no reply&lt;br /&gt;
&lt;br /&gt;
Loomulikult saab neid tekste oma maitse kohaselt redigeerida.&lt;br /&gt;
&lt;br /&gt;
==Faili perioodiline käivitamine==&lt;br /&gt;
Perioodiliseks käivitamiseks on mõistlik kasutada Windowsi operatsioonisüsteemis olevat Task Sheduleri.&lt;br /&gt;
Kiirtee seadistaja leidmiseks ja käivitusrutiini loomiseks on järgmine Start menüü &amp;gt; programs &amp;gt; Accessories &amp;gt; System tools &amp;gt; Scheduled Tasks &amp;gt; Add Scheduled Task.&lt;br /&gt;
&lt;br /&gt;
Käivitatavaks programmiks on eelnevalt loodud Batch fail.&lt;br /&gt;
Detailne seadistamine sõltub kasutatavast operatsioonisüsteemist ning sellega tutvumiseks on soovitav kasutada operatsioonisüsteemi spikrit (help).&lt;br /&gt;
&lt;br /&gt;
==Praktilised näpunäited==&lt;br /&gt;
Teenusepakkuja lüüsi pingimine on soovitatav selle pärast, et kui te pingite suvalist hosti internetis ei ole tulemuseks mitte see kas teie ühendus on töökorrast vaid kas see host on töökorras. Samuti ei pruugi see anda ka ikkagi reaalseid tulemusi kuna tegelikuses on teenusepakkuja arvutivõrgu infrastruktuur keerulisem ning viga võib olla ka tekkinud peale esimest lüüsi.&lt;br /&gt;
Testi liiga tihe käivitamine pika ajajooksul (näiteks iga  minuti tagant) ei pruugi anda soovitud tulemusi ning võib hoopis vähendada võrguühenduse läbilaskevõimet või operatsioonisüsteemi jõudlust.&lt;br /&gt;
&lt;br /&gt;
Autor: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=12170 silverk]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2548</id>
		<title>Võrguühenduse kontrollimine</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2548"/>
		<updated>2005-11-13T14:34:32Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: /* Käivitatava faili loomine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategooria:Võrgukihi juhendid]]&lt;br /&gt;
See sobib kasutamiseks siis kui mis iganes põhjustel ei ole võimalik võrguühenduse olemasolu operatsioonisüsteemi seirevahenditega seirata. Mõeldud kasutamiseks Microsoft'i operatsioonisüsteemis.&lt;br /&gt;
==Käivitatava faili loomine==&lt;br /&gt;
Selleks sobib näiteks  [http://en.wikipedia.org/wiki/BAT_file Batch file]&lt;br /&gt;
Batch faili loomiseks on kõige sobivam lihtne tekstiredaktor. Näiteks kas notepad või edit. &lt;br /&gt;
failis peab olema järgmine.&lt;br /&gt;
&lt;br /&gt;
    REM Pingib teenusepakkuja lüüsi lisab pingimise kellaaja ja kuupäeva ning kirjutab tulemused &amp;lt;br&amp;gt; tekstifaili.&lt;br /&gt;
    &lt;br /&gt;
    ping ''[siia kirjuta oma teenusepakkuja lüüsi IP aadress]'' &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    date /T &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    time /T &amp;gt;&amp;gt; tulemus.tst&lt;br /&gt;
&lt;br /&gt;
fail tuleb salvestada laiendiga .bat&lt;br /&gt;
&lt;br /&gt;
Selle toimimist saab kontrollida käivitades faili kas käsurealt või failihaldurist.&lt;br /&gt;
&lt;br /&gt;
Edukal käivitamisel peab tulemus.txt sisu välja nägema umbes selline :&lt;br /&gt;
&lt;br /&gt;
    T 08.11.2005 &lt;br /&gt;
    09:58&lt;br /&gt;
    Pinging neti.ee [194.126.101.79] with 32 bytes of data:&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=10ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=12ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=13ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=14ms TTL=58&lt;br /&gt;
    Ping statistics for 194.126.101.79:&lt;br /&gt;
         Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),&lt;br /&gt;
    Approximate round trip times in milli-seconds:&lt;br /&gt;
         Minimum = 10ms, Maximum = 14ms, Average = 12ms&lt;br /&gt;
&lt;br /&gt;
Uuemate Windowside käsuinterpretaator on pisut võimekam. Järgenev CMD fail töötab kindlasti Windows 2K, XP ja 2K3 keskkonnas. NT4 keskkonnas võiks see asi teoreetiliselt t88tada, kuigi usutavasti ei ole seal seatud keskkonnamuutujaid %TIME% ja %DATE%. Sellisel juhult tuleb vastavad keskkonnamuutujad ise seada:&lt;br /&gt;
 FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`DATE /T`) DO @SET KUUP=%%A&lt;br /&gt;
Seab muutuja KUUP väärtuseks käsu DATE väljundi. Kellaajaga tuleb toimida analoogiliselt.&lt;br /&gt;
Soovitav on faili nimeks panna CMD, mitte BAT, sest siis teab Windows, et faili interpreteerimiseks tuleb kasutada laiendatud võimalustega käsuinterpretaatorit&lt;br /&gt;
&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 host-mida-tahame-pingida ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Annab umbes seesuguse väljundi&lt;br /&gt;
&lt;br /&gt;
 P 11/13/2005 12:08:34,06 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sedasi satub iga vastus ilusasti koos kuupäeva ja kellaajaga oma reale ja seda faili on oluliselt mugavam töödelda. NB! kuna Windowsi tekstiparser on pehmelt öeldes &amp;quot;piiratud&amp;quot;, siis ei tohiks ping käsu n-parameetrit muuta. Kui hosti soovitakse mitu korda pingida tuleks terve ülalviidatud koodilõik asetada käsuskripti (näiteks png.cmd) ja kutsuda välja teisest käsuskriptist FOR tsükli abil. &lt;br /&gt;
&lt;br /&gt;
fail mpng.cmd&lt;br /&gt;
 @FOR /L %%I IN (1,1,3) DO @PNG.CMD&lt;br /&gt;
&lt;br /&gt;
fail png.cmd&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 192.168.1.1 ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot; &amp;gt;&amp;gt; ans.txt&lt;br /&gt;
&lt;br /&gt;
fail ans.txt (tekib meile)&lt;br /&gt;
 P 11/13/2005 12:31:05,37 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,50 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,60 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
&lt;br /&gt;
On siililegi selge, et pingimiskordade arvu muudame me failis mpng mängides IN seti kolmanda parameetriga, mis hetkel omab väärtust &amp;quot;3&amp;quot;. Samuti on soovitav näites toodud IP aadress vahetada selle IP aadressi vastu mida soovime pingida.&lt;br /&gt;
&lt;br /&gt;
Windows 9x seeriale peaks sobima selline fail. NB! Faili EI OLE testitud 9x keskkonnas, kuna puudub selline keskkond.&lt;br /&gt;
&lt;br /&gt;
 @ECHO OFF&lt;br /&gt;
 :: DateTime.bat&lt;br /&gt;
 :: Set environment variables with current Date, Time and DayOfWeek&lt;br /&gt;
 :: Koodis on kasutatud materjale siit http://www.robvanderwoude.com/index.html&lt;br /&gt;
 :: Muutuja HOST - sisesta host mida soovid pingida&lt;br /&gt;
 &lt;br /&gt;
 SET HOST=192.168.1.1&lt;br /&gt;
 &lt;br /&gt;
 :: Recursion&lt;br /&gt;
 IF NOT &amp;quot;%3&amp;quot;==&amp;quot;&amp;quot; GOTO SecondTime&lt;br /&gt;
 :: Create temporary batch file&lt;br /&gt;
 &amp;gt; TEMPDTT1.BAT ECHO @PROMPT %0 $D $T&lt;br /&gt;
 :: Do _N_O_T_ replace &amp;quot;COMMAND /C&amp;quot; with CALL in the next line&lt;br /&gt;
 &amp;gt; TEMPDTT2.BAT COMMAND /C TEMPDTT1.BAT&lt;br /&gt;
 TEMPDTT2&lt;br /&gt;
 &lt;br /&gt;
 :SecondTime&lt;br /&gt;
 DEL TEMPDTT?.BAT&lt;br /&gt;
 SET DOW=%1&lt;br /&gt;
 SET DATE=%2&lt;br /&gt;
 SET TIME=%3&lt;br /&gt;
 &lt;br /&gt;
 SET CONNECT=vastab&lt;br /&gt;
 PING -n 1 %HOST% | FIND &amp;quot;TTL=&amp;quot; &amp;gt; NUL&lt;br /&gt;
 IF ERRORLEVEL 1 SET CONNECT=ei vasta&lt;br /&gt;
 ECHO %DATE% %TIME% Host %HOST% %CONNECT%&lt;br /&gt;
&lt;br /&gt;
==Faili perioodiline käivitamine==&lt;br /&gt;
Perioodiliseks käivitamiseks on mõistlik kasutada Windowsi operatsioonisüsteemis olevat Task Sheduleri.&lt;br /&gt;
Kiirtee seadistaja leidmiseks ja käivitusrutiini loomiseks on järgmine Start menüü &amp;gt; programs &amp;gt; Accessories &amp;gt; System tools &amp;gt; Scheduled Tasks &amp;gt; Add Scheduled Task.&lt;br /&gt;
&lt;br /&gt;
Käivitatavaks programmiks on eelnevalt loodud Batch fail.&lt;br /&gt;
Detailne seadistamine sõltub kasutatavast operatsioonisüsteemist ning sellega tutvumiseks on soovitav kasutada operatsioonisüsteemi spikrit (help).&lt;br /&gt;
&lt;br /&gt;
==Praktilised näpunäited==&lt;br /&gt;
Teenusepakkuja lüüsi pingimine on soovitatav selle pärast, et kui te pingite suvalist hosti internetis ei ole tulemuseks mitte see kas teie ühendus on töökorrast vaid kas see host on töökorras. Samuti ei pruugi see anda ka ikkagi reaalseid tulemusi kuna tegelikuses on teenusepakkuja arvutivõrgu infrastruktuur keerulisem ning viga võib olla ka tekkinud peale esimest lüüsi.&lt;br /&gt;
Testi liiga tihe käivitamine pika ajajooksul (näiteks iga  minuti tagant) ei pruugi anda soovitud tulemusi ning võib hoopis vähendada võrguühenduse läbilaskevõimet või operatsioonisüsteemi jõudlust.&lt;br /&gt;
&lt;br /&gt;
Autor: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=12170 silverk]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2547</id>
		<title>Võrguühenduse kontrollimine</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2547"/>
		<updated>2005-11-13T14:31:57Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategooria:Võrgukihi juhendid]]&lt;br /&gt;
See sobib kasutamiseks siis kui mis iganes põhjustel ei ole võimalik võrguühenduse olemasolu operatsioonisüsteemi seirevahenditega seirata. Mõeldud kasutamiseks Microsoft'i operatsioonisüsteemis.&lt;br /&gt;
==Käivitatava faili loomine==&lt;br /&gt;
Selleks sobib näiteks  [http://en.wikipedia.org/wiki/BAT_file Batch file]&lt;br /&gt;
Batch faili loomiseks on kõige sobivam lihtne tekstiredaktor. Näiteks kas notepad või edit. &lt;br /&gt;
failis peab olema järgmine.&lt;br /&gt;
&lt;br /&gt;
    REM Pingib teenusepakkuja lüüsi lisab pingimise kellaaja ja kuupäeva ning kirjutab tulemused &amp;lt;br&amp;gt; tekstifaili.&lt;br /&gt;
    &lt;br /&gt;
    ping ''[siia kirjuta oma teenusepakkuja lüüsi IP aadress]'' &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    date /T &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    time /T &amp;gt;&amp;gt; tulemus.tst&lt;br /&gt;
&lt;br /&gt;
fail tuleb salvestada laiendiga .bat&lt;br /&gt;
&lt;br /&gt;
Selle toimimist saab kontrollida käivitades faili kas käsurealt või failihaldurist.&lt;br /&gt;
&lt;br /&gt;
Edukal käivitamisel peab tulemus.txt sisu välja nägema umbes selline :&lt;br /&gt;
&lt;br /&gt;
    T 08.11.2005 &lt;br /&gt;
    09:58&lt;br /&gt;
    Pinging neti.ee [194.126.101.79] with 32 bytes of data:&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=10ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=12ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=13ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=14ms TTL=58&lt;br /&gt;
    Ping statistics for 194.126.101.79:&lt;br /&gt;
         Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),&lt;br /&gt;
    Approximate round trip times in milli-seconds:&lt;br /&gt;
         Minimum = 10ms, Maximum = 14ms, Average = 12ms&lt;br /&gt;
&lt;br /&gt;
Uuemate Windowside käsuinterpretaator on pisut võimekam. Järgenev CMD fail töötab kindlasti Windows 2K, XP ja 2K3 keskkonnas. NT4 keskkonnas võiks see asi teoreetiliselt t88tada, kuigi usutavasti ei ole seal seatud keskkonnamuutujaid %TIME% ja %DATE%. Sellisel juhult tuleb vastavad keskkonnamuutujad ise seada:&lt;br /&gt;
 FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`DATE /T`) DO @SET KUUP=%%A&lt;br /&gt;
Seab muutuja KUUP väärtuseks käsu DATE väljundi. Kellaajaga tuleb toimida analoogiliselt.&lt;br /&gt;
Soovitav on faili nimeks panna CMD, mitte BAT, sest siis teab Windows, et faili interpreteerimiseks tuleb kasutada laiendatud võimalustega käsuinterpretaatorit&lt;br /&gt;
&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 host-mida-tahame-pingida ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Annab umbes seesuguse väljundi&lt;br /&gt;
&lt;br /&gt;
 P 11/13/2005 12:08:34,06 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sedasi satub iga vastus ilusasti koos kuupäeva ja kellaajaga oma reale ja seda faili on oluliselt mugavam töödelda. NB! kuna Windowsi tekstiparser on pehmelt öeldes &amp;quot;piiratud&amp;quot;, siis ei tohiks ping käsu n-parameetrit muuta. Kui hosti soovitakse mitu korda pingida tuleks terve ülalviidatud koodilõik asetada käsuskripti (näiteks png.cmd) ja kutsuda välja teisest käsuskriptist FOR tsükli abil. &lt;br /&gt;
&lt;br /&gt;
fail mpng.cmd&lt;br /&gt;
 @FOR /L %%I IN (1,1,3) DO @PNG.CMD&lt;br /&gt;
&lt;br /&gt;
fail png.cmd&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 192.168.1.1 ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot; &amp;gt;&amp;gt; ans.txt&lt;br /&gt;
&lt;br /&gt;
fail ans.txt (tekib meile)&lt;br /&gt;
 P 11/13/2005 12:31:05,37 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,50 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,60 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
&lt;br /&gt;
On siililegi selge, et pingimiskordade arvu muudame me failis mpng mängides IN seti kolmanda parameetriga, mis hetkel omab väärtust &amp;quot;3&amp;quot;. Samuti on soovitav näites toodud IP aadress vahetada selle IP aadressi vastu mida soovime pingida.&lt;br /&gt;
&lt;br /&gt;
Windows 9x seeriale peaks sobima selline fail. NB! Faili EI OLE testitud 9x keskkonnas, kuna puudub selline keskkond.&lt;br /&gt;
&lt;br /&gt;
 :: @ECHO OFF&lt;br /&gt;
 :: DateTime.bat&lt;br /&gt;
 :: Set environment variables with current Date, Time and DayOfWeek&lt;br /&gt;
 :: Koodis on kasutatud materjale siit http://www.robvanderwoude.com/index.html&lt;br /&gt;
 :: Muutuja HOST - sisesta host mida soovid pingida&lt;br /&gt;
 &lt;br /&gt;
 SET HOST=192.168.1.1&lt;br /&gt;
 &lt;br /&gt;
 :: Recursion&lt;br /&gt;
 IF NOT &amp;quot;%3&amp;quot;==&amp;quot;&amp;quot; GOTO SecondTime&lt;br /&gt;
 :: Create temporary batch file&lt;br /&gt;
 &amp;gt; TEMPDTT1.BAT ECHO @PROMPT %0 $D $T&lt;br /&gt;
 :: Do _N_O_T_ replace &amp;quot;COMMAND /C&amp;quot; with CALL in the next line&lt;br /&gt;
 &amp;gt; TEMPDTT2.BAT COMMAND /C TEMPDTT1.BAT&lt;br /&gt;
 TEMPDTT2&lt;br /&gt;
 &lt;br /&gt;
 :SecondTime&lt;br /&gt;
 DEL TEMPDTT?.BAT&lt;br /&gt;
 SET DOW=%1&lt;br /&gt;
 SET DATE=%2&lt;br /&gt;
 SET TIME=%3&lt;br /&gt;
 &lt;br /&gt;
 SET CONNECT=vastab&lt;br /&gt;
 PING -n 1 %HOST% | FIND &amp;quot;TTL=&amp;quot; &amp;gt; NUL&lt;br /&gt;
 IF ERRORLEVEL 1 SET CONNECT=ei vasta&lt;br /&gt;
 ECHO %DATE% %TIME% Host %HOST% %CONNECT%&lt;br /&gt;
&lt;br /&gt;
==Faili perioodiline käivitamine==&lt;br /&gt;
Perioodiliseks käivitamiseks on mõistlik kasutada Windowsi operatsioonisüsteemis olevat Task Sheduleri.&lt;br /&gt;
Kiirtee seadistaja leidmiseks ja käivitusrutiini loomiseks on järgmine Start menüü &amp;gt; programs &amp;gt; Accessories &amp;gt; System tools &amp;gt; Scheduled Tasks &amp;gt; Add Scheduled Task.&lt;br /&gt;
&lt;br /&gt;
Käivitatavaks programmiks on eelnevalt loodud Batch fail.&lt;br /&gt;
Detailne seadistamine sõltub kasutatavast operatsioonisüsteemist ning sellega tutvumiseks on soovitav kasutada operatsioonisüsteemi spikrit (help).&lt;br /&gt;
&lt;br /&gt;
==Praktilised näpunäited==&lt;br /&gt;
Teenusepakkuja lüüsi pingimine on soovitatav selle pärast, et kui te pingite suvalist hosti internetis ei ole tulemuseks mitte see kas teie ühendus on töökorrast vaid kas see host on töökorras. Samuti ei pruugi see anda ka ikkagi reaalseid tulemusi kuna tegelikuses on teenusepakkuja arvutivõrgu infrastruktuur keerulisem ning viga võib olla ka tekkinud peale esimest lüüsi.&lt;br /&gt;
Testi liiga tihe käivitamine pika ajajooksul (näiteks iga  minuti tagant) ei pruugi anda soovitud tulemusi ning võib hoopis vähendada võrguühenduse läbilaskevõimet või operatsioonisüsteemi jõudlust.&lt;br /&gt;
&lt;br /&gt;
Autor: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=12170 silverk]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2546</id>
		<title>Võrguühenduse kontrollimine</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2546"/>
		<updated>2005-11-13T14:31:24Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategooria:Võrgukihi juhendid]]&lt;br /&gt;
See sobib kasutamiseks siis kui mis iganes põhjustel ei ole võimalik võrguühenduse olemasolu operatsioonisüsteemi seirevahenditega seirata. Mõeldud kasutamiseks Microsoft'i operatsioonisüsteemis.&lt;br /&gt;
==Käivitatava faili loomine==&lt;br /&gt;
Selleks sobib näiteks  [http://en.wikipedia.org/wiki/BAT_file Batch file]&lt;br /&gt;
Batch faili loomiseks on kõige sobivam lihtne tekstiredaktor. Näiteks kas notepad või edit. &lt;br /&gt;
failis peab olema järgmine.&lt;br /&gt;
&lt;br /&gt;
    REM Pingib teenusepakkuja lüüsi lisab pingimise kellaaja ja kuupäeva ning kirjutab tulemused &amp;lt;br&amp;gt; tekstifaili.&lt;br /&gt;
    &lt;br /&gt;
    ping ''[siia kirjuta oma teenusepakkuja lüüsi IP aadress]'' &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    date /T &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    time /T &amp;gt;&amp;gt; tulemus.tst&lt;br /&gt;
&lt;br /&gt;
fail tuleb salvestada laiendiga .bat&lt;br /&gt;
&lt;br /&gt;
Selle toimimist saab kontrollida käivitades faili kas käsurealt või failihaldurist.&lt;br /&gt;
&lt;br /&gt;
Edukal käivitamisel peab tulemus.txt sisu välja nägema umbes selline :&lt;br /&gt;
&lt;br /&gt;
    T 08.11.2005 &lt;br /&gt;
    09:58&lt;br /&gt;
    Pinging neti.ee [194.126.101.79] with 32 bytes of data:&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=10ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=12ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=13ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=14ms TTL=58&lt;br /&gt;
    Ping statistics for 194.126.101.79:&lt;br /&gt;
         Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),&lt;br /&gt;
    Approximate round trip times in milli-seconds:&lt;br /&gt;
         Minimum = 10ms, Maximum = 14ms, Average = 12ms&lt;br /&gt;
&lt;br /&gt;
Uuemate Windowside käsuinterpretaator on pisut võimekam. Järgenev CMD fail töötab kindlasti Windows 2K, XP ja 2K3 keskkonnas. NT4 keskkonnas võiks see asi teoreetiliselt t88tada, kuigi usutavasti ei ole seal seatud keskkonnamuutujaid %TIME% ja %DATE%. Sellisel juhult tuleb vastavad keskkonnamuutujad ise seada:&lt;br /&gt;
 FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`DATE /T`) DO @SET KUUP=%%A&lt;br /&gt;
Seab muutuja KUUP väärtuseks käsu DATE väljundi. Kellaajaga tuleb toimida analoogiliselt.&lt;br /&gt;
Soovitav on faili nimeks panna CMD, mitte BAT, sest siis teab Windows, et faili interpreteerimiseks tuleb kasutada laiendatud võimalustega käsuinterpretaatorit&lt;br /&gt;
&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 host-mida-tahame-pingida ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Annab umbes seesuguse väljundi&lt;br /&gt;
&lt;br /&gt;
 P 11/13/2005 12:08:34,06 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sedasi satub iga vastus ilusasti koos kuupäeva ja kellaajaga oma reale ja seda faili on oluliselt mugavam töödelda. NB! kuna Windowsi tekstiparser on pehmelt öeldes &amp;quot;piiratud&amp;quot;, siis ei tohiks ping käsu n-parameetrit muuta. Kui hosti soovitakse mitu korda pingida tuleks terve ülalviidatud koodilõik asetada käsuskripti (näiteks png.cmd) ja kutsuda välja teisest käsuskriptist FOR tsükli abil. &lt;br /&gt;
&lt;br /&gt;
fail mpng.cmd&lt;br /&gt;
 @FOR /L %%I IN (1,1,3) DO @PNG.CMD&lt;br /&gt;
&lt;br /&gt;
fail png.cmd&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 192.168.1.1 ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot; &amp;gt;&amp;gt; ans.txt&lt;br /&gt;
&lt;br /&gt;
fail ans.txt (tekib meile)&lt;br /&gt;
 P 11/13/2005 12:31:05,37 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,50 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,60 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
&lt;br /&gt;
On siililegi selge, et pingimiskordade arvu muudame me failis mpng mängides IN seti kolmanda parameetriga, mis hetkel omab väärtust &amp;quot;3&amp;quot;. Samuti on soovitav näites toodud IP aadress vahetada selle IP aadressi vastu mida soovime pingida.&lt;br /&gt;
&lt;br /&gt;
Windows 9x seeriale peaks sobima selline fail. NB! Faili EI OLE testitud 9x keskkonnas, kuna puudub selline keskkond.&lt;br /&gt;
&lt;br /&gt;
 :: @ECHO OFF&lt;br /&gt;
 :: DateTime.bat&lt;br /&gt;
 :: Set environment variables with current Date, Time and DayOfWeek&lt;br /&gt;
 :: Koodis on kasutatud materjale siit http://www.robvanderwoude.com/index.html&lt;br /&gt;
 :: Muutuja HOST - sisesta host mida soovid pingida&lt;br /&gt;
&lt;br /&gt;
 SET HOST=192.168.1.1&lt;br /&gt;
&lt;br /&gt;
 :: Recursion&lt;br /&gt;
 IF NOT &amp;quot;%3&amp;quot;==&amp;quot;&amp;quot; GOTO SecondTime&lt;br /&gt;
 :: Create temporary batch file&lt;br /&gt;
 &amp;gt; TEMPDTT1.BAT ECHO @PROMPT %0 $D $T&lt;br /&gt;
 :: Do _N_O_T_ replace &amp;quot;COMMAND /C&amp;quot; with CALL in the next line&lt;br /&gt;
 &amp;gt; TEMPDTT2.BAT COMMAND /C TEMPDTT1.BAT&lt;br /&gt;
 TEMPDTT2&lt;br /&gt;
&lt;br /&gt;
 :SecondTime&lt;br /&gt;
 DEL TEMPDTT?.BAT&lt;br /&gt;
 SET DOW=%1&lt;br /&gt;
 SET DATE=%2&lt;br /&gt;
 SET TIME=%3&lt;br /&gt;
&lt;br /&gt;
 SET CONNECT=vastab&lt;br /&gt;
 PING -n 1 %HOST% | FIND &amp;quot;TTL=&amp;quot; &amp;gt; NUL&lt;br /&gt;
 IF ERRORLEVEL 1 SET CONNECT=ei vasta&lt;br /&gt;
 ECHO %DATE% %TIME% Host %HOST% %CONNECT%&lt;br /&gt;
&lt;br /&gt;
==Faili perioodiline käivitamine==&lt;br /&gt;
Perioodiliseks käivitamiseks on mõistlik kasutada Windowsi operatsioonisüsteemis olevat Task Sheduleri.&lt;br /&gt;
Kiirtee seadistaja leidmiseks ja käivitusrutiini loomiseks on järgmine Start menüü &amp;gt; programs &amp;gt; Accessories &amp;gt; System tools &amp;gt; Scheduled Tasks &amp;gt; Add Scheduled Task.&lt;br /&gt;
&lt;br /&gt;
Käivitatavaks programmiks on eelnevalt loodud Batch fail.&lt;br /&gt;
Detailne seadistamine sõltub kasutatavast operatsioonisüsteemist ning sellega tutvumiseks on soovitav kasutada operatsioonisüsteemi spikrit (help).&lt;br /&gt;
&lt;br /&gt;
==Praktilised näpunäited==&lt;br /&gt;
Teenusepakkuja lüüsi pingimine on soovitatav selle pärast, et kui te pingite suvalist hosti internetis ei ole tulemuseks mitte see kas teie ühendus on töökorrast vaid kas see host on töökorras. Samuti ei pruugi see anda ka ikkagi reaalseid tulemusi kuna tegelikuses on teenusepakkuja arvutivõrgu infrastruktuur keerulisem ning viga võib olla ka tekkinud peale esimest lüüsi.&lt;br /&gt;
Testi liiga tihe käivitamine pika ajajooksul (näiteks iga  minuti tagant) ei pruugi anda soovitud tulemusi ning võib hoopis vähendada võrguühenduse läbilaskevõimet või operatsioonisüsteemi jõudlust.&lt;br /&gt;
&lt;br /&gt;
Autor: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=12170 silverk]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2542</id>
		<title>Võrguühenduse kontrollimine</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=V%C3%B5rgu%C3%BChenduse_kontrollimine&amp;diff=2542"/>
		<updated>2005-11-13T12:33:16Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategooria:Võrgukihi juhendid]]&lt;br /&gt;
See sobib kasutamiseks siis kui mis iganes põhjustel ei ole võimalik võrguühenduse olemasolu operatsioonisüsteemi seirevahenditega seirata. Mõeldud kasutamiseks Microsoft'i operatsioonisüsteemis.&lt;br /&gt;
&lt;br /&gt;
'''1.Käivitatava faili loomine''' &lt;br /&gt;
Selleks sobib näiteks  [http://en.wikipedia.org/wiki/BAT_file Batch file]&lt;br /&gt;
Batch faili loomiseks on kõige sobivam lihtne tekstiredaktor. Näiteks kas notepad või edit. &lt;br /&gt;
failis peab olema järgmine.&lt;br /&gt;
&lt;br /&gt;
    REM Pingib teenusepakkuja lüüsi lisab pingimise kellaaja ja kuupäeva ning kirjutab tulemused &amp;lt;br&amp;gt; tekstifaili.&lt;br /&gt;
    &lt;br /&gt;
    ping ''[siia kirjuta oma teenusepakkuja lüüsi IP aadress]'' &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    date /T &amp;gt;&amp;gt; tulemus.txt&lt;br /&gt;
    time /T &amp;gt;&amp;gt; tulemus.tst&lt;br /&gt;
&lt;br /&gt;
fail tuleb salvestada laiendiga .bat&lt;br /&gt;
&lt;br /&gt;
Selle toimimist saab kontrollida käivitades faili kas käsurealt või failihaldurist.&lt;br /&gt;
&lt;br /&gt;
Edukal käivitamisel peab tulemus.txt sisu välja nägema umbes selline :&lt;br /&gt;
&lt;br /&gt;
    T 08.11.2005 &lt;br /&gt;
    09:58&lt;br /&gt;
    Pinging neti.ee [194.126.101.79] with 32 bytes of data:&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=10ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=12ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=13ms TTL=58&lt;br /&gt;
    Reply from 194.126.101.79: bytes=32 time=14ms TTL=58&lt;br /&gt;
    Ping statistics for 194.126.101.79:&lt;br /&gt;
         Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),&lt;br /&gt;
    Approximate round trip times in milli-seconds:&lt;br /&gt;
         Minimum = 10ms, Maximum = 14ms, Average = 12ms&lt;br /&gt;
&lt;br /&gt;
Uuemate Windowside käsuinterpretaator on pisut võimekam. Järgenev CMD fail töötab kindlasti Windows 2K, XP ja 2K3 keskkonnas. NT4 keskkonnas võiks see asi teoreetiliselt t88tada, kuigi usutavasti ei ole seal seatud keskkonnamuutujaid %TIME% ja %DATE%. Sellisel juhult tuleb vastavad keskkonnamuutujad ise seada:&lt;br /&gt;
 FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`DATE /T`) DO @SET KUUP=%%A&lt;br /&gt;
Seab muutuja KUUP väärtuseks käsu DATE väljundi. Kellaajaga tuleb toimida analoogiliselt.&lt;br /&gt;
Soovitav on faili nimeks panna CMD, mitte BAT, sest siis teab Windows, et faili interpreteerimiseks tuleb kasutada laiendatud võimalustega käsuinterpretaatorit&lt;br /&gt;
&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 host-mida-tahame-pingida ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Annab umbes seesuguse väljundi&lt;br /&gt;
&lt;br /&gt;
 P 11/13/2005 12:08:34,06 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Sedasi satub iga vastus ilusasti koos kuupäeva ja kellaajaga oma reale ja seda faili on oluliselt mugavam töödelda. NB! kuna Windowsi tekstiparser on pehmelt öeldes &amp;quot;piiratud&amp;quot;, siis ei tohiks ping käsu n-parameetrit muuta. Kui hosti soovitakse mitu korda pingida tuleks terve ülalviidatud koodilõik asetada käsuskripti (näiteks png.cmd) ja kutsuda välja teisest käsuskriptist FOR tsükli abil. &lt;br /&gt;
&lt;br /&gt;
fail mpng.cmd&lt;br /&gt;
 @FOR /L %%I IN (1,1,3) DO @PNG.CMD&lt;br /&gt;
&lt;br /&gt;
fail png.cmd&lt;br /&gt;
 @FOR /F &amp;quot;usebackq tokens=*&amp;quot; %%A IN (`ping -n 1 192.168.1.1 ^| sort`) DO @SET ANS=%%A&lt;br /&gt;
 @ECHO %DATE% %TIME% &amp;quot;%ANS%&amp;quot; &amp;gt;&amp;gt; ans.txt&lt;br /&gt;
&lt;br /&gt;
fail ans.txt (tekib meile)&lt;br /&gt;
 P 11/13/2005 12:31:05,37 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,50 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
 P 11/13/2005 12:31:05,60 &amp;quot;Reply from 192.168.1.1: bytes=32 time&amp;lt;1ms TTL=255&amp;quot; &lt;br /&gt;
&lt;br /&gt;
On siililegi selge, et pingimiskordade arvu muudame me failis mpng mängides IN seti kolmanda parameetriga, mis hetkel omab väärtust &amp;quot;3&amp;quot;. Samuti on soovitav näites toodud IP aadress vahetada selle IP aadressi vastu mida soovime pingida.&lt;br /&gt;
&lt;br /&gt;
'''2. Faili perioodiline käivitamine'''&lt;br /&gt;
Perioodiliseks käivitamiseks on mõistlik kasutada Windowsi operatsioonisüsteemis olevat Task Sheduleri.&lt;br /&gt;
Kiirtee seadistaja leidmiseks ja käivitusrutiini loomiseks on järgmine Start menüü &amp;gt; programs &amp;gt; Accessories &amp;gt; System tools &amp;gt; Scheduled Tasks &amp;gt; Add Scheduled Task.&lt;br /&gt;
&lt;br /&gt;
Käivitatavaks programmiks on eelnevalt loodud Batch fail.&lt;br /&gt;
Detailne seadistamine sõltub kasutatavast operatsioonisüsteemist ning sellega tutvumiseks on soovitav kasutada operatsioonisüsteemi spikrit (help).&lt;br /&gt;
&lt;br /&gt;
'''Praktilised näpunäited:'''&lt;br /&gt;
Teenusepakkuja lüüsi pingimine on soovitatav selle pärast, et kui te pingite suvalist hosti internetis ei ole tulemuseks mitte see kas teie ühendus on töökorrast vaid kas see host on töökorras. Samuti ei pruugi see anda ka ikkagi reaalseid tulemusi kuna tegelikuses on teenusepakkuja arvutivõrgu infrastruktuur keerulisem ning viga võib olla ka tekkinud peale esimest lüüsi.&lt;br /&gt;
Testi liiga tihe käivitamine pika ajajooksul (näiteks iga  minuti tagant) ei pruugi anda soovitud tulemusi ning võib hoopis vähendada võrguühenduse läbilaskevõimet või operatsioonisüsteemi jõudlust.&lt;br /&gt;
&lt;br /&gt;
Autor: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=12170 silverk]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Linuxi_kerneli_kompileerimine&amp;diff=2217</id>
		<title>Linuxi kerneli kompileerimine</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Linuxi_kerneli_kompileerimine&amp;diff=2217"/>
		<updated>2005-10-23T12:41:54Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategooria:Kasulikud Näpunäited]]&lt;br /&gt;
[[Kategooria:Linux]]&lt;br /&gt;
Järgnev õpetus käsitleb seda, kuidas konfigureerida ja kompileerida Linuxi kernelit versiooninumbriga 2.6.x.&lt;br /&gt;
&lt;br /&gt;
'''Hoiatus:'''&lt;br /&gt;
Juhendi hetkel olemas olev osa käsitleb nn. ametliku, Linus Torvaldsi ja meeskonna poolt loodava kerneli ehk nn. ''vanilla kerneli'' kompileermist ja paigaldamist. Juhendid on üldised, ja ei sisalda  distributiividele spetsiifiliste vahendite kasutamist välja arvatud Debian ja Debianil baseeruvad ja deb pakihaldust kasutavad ditributiivid (Ubuntu, Mepis jt.). Samuti pole käsitletud kernelile &amp;quot;mitteametlike&amp;quot; modifiaktsioonide, ehk ''patchide'' lisamist. NB! ''vanilla kerneli'' kasutamine distributiivdes, mis kernelit tugevasti modifitseerivad (Fedora Core, Suse/Novell Linux jne.) ei ole soovitav ja võib tekitada ettenägematuid tõrkeid. Kindla soovi korral ise kernel kompileerida oleks selliste distributiivde kasutajal soovitav hankida distrospetsiifiline kerneli lähtekood kasutades oma distro pakihaldusvahendeid. Samuti on soovitav meeles pidada, et sedasi käsitisi loodud ja paigaldatud kernel ei ole paikhalduri jaoks enam hallatav, uuendatav, modifitseeritav ega eemaldatav. Samuti pole hetkel veel käsitletud kerneli kompileerimise jaoks vajalikud vahendid: arendusvahendid ja ''libraryd'' ning nende paigaldamine.&lt;br /&gt;
&lt;br /&gt;
==Lähtekoodi hankimine==&lt;br /&gt;
Kõigepealt läheb meil muidugi vaja Linuxi kerneli lähtekoodi, mille leiab selle ametlikult lehelt http://www.kernel.org. Sealt otsi üles rida mis algab nii:&lt;br /&gt;
 The latest stable version of the Linux kernel is:&lt;br /&gt;
Vajuta samal real olevale '''F'''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;ile, et tirida täielik lähtekood (''full source''). Salvesta lähtekoodi ''tarball'' oma kodukausta.&lt;br /&gt;
&lt;br /&gt;
==Eeltöö==&lt;br /&gt;
* Nüüd ava oma lemmik terminaliemulaator (konsole, gnome-terminal, xterm) ning liiguta ''tarball'' õigesse kohta:&lt;br /&gt;
 $ su&lt;br /&gt;
 Password:&lt;br /&gt;
 # mv /home/minukasutaja/linux-*.tar.bz2 /usr/src/&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Järgmisena pakime .tar.bz2 arhiivi lahti:&lt;br /&gt;
 # cd /usr/src&lt;br /&gt;
 # tar xjf linux-&amp;lt;''versioon-mille-tirisid''&amp;gt;.tar.bz2&lt;br /&gt;
Kui ei mäleta täielikku failinime, saad alati poole failinime trükkimise peal kasutada klaviatuuri '''TAB''' klahvi, et failinime automaatselt täiendataks.&amp;lt;br/&amp;gt;&lt;br /&gt;
Nüüd peaks sul olema selline kaust: &amp;lt;code&amp;gt;/usr/src/linux-&amp;lt;''versioon''&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Konfigureerimine==&lt;br /&gt;
Linuxi kerneli kompileerimiseks tuleb ta eelnevalt konfigureerida ehk tuleb valida, millise raudvara jaoks tugi sisse jätta, milliseid failisüsteeme toetada jne.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''NB!''' Kui sa ei ole enda arvuti raudvara tundmise poolelt just väga kogenud, siis oleks vast siin paslik asi pooleli jätta ja rahulduda [[Linux|distributsioonide]] poolt koostatud pakikernelitega, mis iseenesest on vägagi töötavad ja piisavalt head rakendused! Kui aga on huvi ja oled juba kogenum, loe julgelt edasi.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Linuxi kernelil on mitu erinevat konfigureerimise võimalust. Selles juhendis käsitleme neist kolme.&lt;br /&gt;
&lt;br /&gt;
===''menuconfig''===&lt;br /&gt;
Tegemist on ncurses teegi baasil loodud konsoolipõhise konfigureerimiskeskkonnaga.&lt;br /&gt;
[[Pilt:menuconfig_konsole.jpg|thumb|200px|''menuconfig'']]&lt;br /&gt;
''menuconfig''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;i kasutamiseks piisab lahtipakitud kerneli kaustas järgmise käsu jooksutamisest:&lt;br /&gt;
 # make menuconfig&lt;br /&gt;
''menuconfig''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;is on järgmised tingmärgid:&lt;br /&gt;
* [*] - valik kompileeritakse kernelisse&lt;br /&gt;
* [M] - valik kompileeritakse moodulina, mis on kerneli image'st eraldi ja mida saab laadida käsuga ''modprobe''&lt;br /&gt;
* [ ] - valikut ei kaasata kernelisse&lt;br /&gt;
''menuconfig''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;i menüüdel põhinev kasutajaliides on suhteliselt selge ning erilisi probleeme sellega ei tohiks tekkida. Iga valiku abiteksti nägemiseks vajuta klahvi &amp;quot;?&amp;quot;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''NB!''' Väljumisel ära unusta kerneli konfiguratsiooni salvestamast!&lt;br /&gt;
&lt;br /&gt;
===''config''===&lt;br /&gt;
Teine natuke arhailisem ja aeganõudvam viis kernelit konfigureerida, on lasta tööle käsk&lt;br /&gt;
 # make config&lt;br /&gt;
Antud juhul küsitakse sult kõiki valikuid ükshaaval, kus valikuteks on [y/n/m/?] (yes/no/module/help).&amp;lt;br/&amp;gt;&lt;br /&gt;
Seda moodust kerneli kompiilimiseks ei soovita ma kellelegi, kui selle järele just tungivat vajadust ei ole.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Kasutage igal võimalusel ''menuconfig'''it!'''&lt;br /&gt;
&lt;br /&gt;
===''oldconfig''===&lt;br /&gt;
Juhul, kui oled juba ühe korra kerneli vastavalt oma raudvarale konfigureerinud, ei pea sa uut kernelit paigaldades seda täies mahus uuesti tegema. Sa pead ainult kopeerima vana kerneli konfiguratsioonifaili (&amp;lt;code&amp;gt;/usr/src/linux-&amp;lt;''versioon''&amp;gt;/.config&amp;lt;/code&amp;gt;) uue kerneli kausta samuti ning laskma tööle käsu&lt;br /&gt;
 # make oldconfig&lt;br /&gt;
Sellisel juhul küsitakse sinult ainult neid valikuid, mis on vahepeal juurde tulnud.&lt;br /&gt;
&lt;br /&gt;
==Kompileerimine==&lt;br /&gt;
'''NB!''' [[#Tavapärane|Tavapärast moodust]] kasuta '''ainult''' siis, kui selline moodus on sinu distro poolt eelistatud (näiteks [[Gentoo]] arendajad peaksid sellisesse meetodisse suhtuma täiesti normaalselt). Kui sinu valituks distroks on [[Debian]] või mõni Debianil baseeruv distro (Ubuntu, MEPIS jt), siis pöördu punkti &amp;quot;Debiani moodi&amp;quot;!&lt;br /&gt;
&lt;br /&gt;
===Tavapärane===&lt;br /&gt;
Kui oled edukalt kerneli konfiguratsiooniga valmis saanud, kompileeri kernel lastes kerneli kaustas tööle järgnev käsk:&lt;br /&gt;
 # make&lt;br /&gt;
Nüüd pead sa ära ootama pika joru igasugust mõistmatut teksti. Kui asi lõpuks õnnelikku lõppu jõuab ning protseduur ei lõppe mingite erroritega, läks kõik õnneks. Suundu järgmisesse punkti!&lt;br /&gt;
&lt;br /&gt;
===Debiani moodi===&lt;br /&gt;
Seda meetodit kasuta siis, kui sinu distroks on Debian või mõni Debianil põhinev distro (Ubuntu, MEPIS jt). Sellist meetodit isetehtud kernelite installeerimiseks ja kompileerimiseks soovitavad Debiani arendajad!&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Kõigepealt tuleb meil installida mõned pakid, et kompileerimine üldsegi toimuda saaks:&lt;br /&gt;
 # apt-get install build-essential kernel-package&lt;br /&gt;
Sellega installisid sa vajalikud pakid binaaride loomiseks ja vajalikud scriptid kerneli kompileerimiseks ja .deb pakiks muutmiseks.&amp;lt;br/&amp;gt;&lt;br /&gt;
Nüüd mine kerneli kausta ja kerneli koheseks kompileerimiseks ja pakendamiseks .deb arhiivi lase tööle järgnev käsk.&lt;br /&gt;
 # make-kpkg kernel_image&lt;br /&gt;
Rohkem infot &amp;lt;code&amp;gt;make-kpkg&amp;lt;/code&amp;gt; käsu kohta manuaalist (&amp;lt;code&amp;gt;man make-kpkg&amp;lt;/code&amp;gt;).&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Selle käsu eduka tulemusena tekib kausta &amp;lt;code&amp;gt;/usr/src&amp;lt;/code&amp;gt; sinu kerneli pakk nimega näiteks &amp;lt;code&amp;gt;kernel-image-2.6.13.2_10.00.Custom_i386.deb&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Selle paki installimist käsitleme järgmises punktis!&lt;br /&gt;
&lt;br /&gt;
==Moodulite paigaldamine==&lt;br /&gt;
'''NB!''' Kui kasutasid eelmises punktis &amp;quot;Debiani moodust&amp;quot; kerneli kompileerimiseks, jäta see punkt vahele ja suundu [[#Kerneli paika kopeerimine|järgmisesse punkti]].&amp;lt;br/&amp;gt;&lt;br /&gt;
Kui kasutasid tavapärast moodust, on järgnev tekst sulle!&lt;br /&gt;
&lt;br /&gt;
===Tavapärane===&lt;br /&gt;
Kerneli moodulitele on olemas spetsiaalne kaust &amp;lt;code&amp;gt;/lib/modules/&amp;lt;/code&amp;gt;, kuhu nad on vaja paigaldada selleks, et kernel neid korrektselt laadida ja kasutada suudaks. Selle töö teeb sinu eest ära käsk&lt;br /&gt;
 # make modules_install&lt;br /&gt;
Ka selle käsu käivitamiseks pead olema kerneli kaustas (&amp;lt;code&amp;gt;/usr/src/linux-&amp;lt;''versioon''&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==Kerneli paika kopeerimine==&lt;br /&gt;
'''NB!''' Kui kasutasid kerneli kompileerimiseks tavapärast moodust, kasuta seda ka siin.&amp;lt;br/&amp;gt;&lt;br /&gt;
Kui su distroks on aga Debian või mõni Debiani-laadne, pöördu alalõiku &amp;quot;Debiani moodi&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Tavapärane===&lt;br /&gt;
Kui kerneli kompileerimine lõpeb edukalt, siis tuleb sulle ette tühi käsurida ning vahetult eelnevas väljundis pole veateateid, mis viitaksid sellele, et kompileerimine ebaõnnestus.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Otsi viimaste väljundi ridade seast välja selline lõik (väljundi kerimiseks sobib enamkasutatavates terminaliemulaatorites hiirerull või klahvikombinatsioon ''Shift+nool üles/nool alla'':&lt;br /&gt;
 Root device is (3, 4)&lt;br /&gt;
 Boot sector 512 bytes.&lt;br /&gt;
 Setup is 6878 bytes.&lt;br /&gt;
 System is 1862 kB&lt;br /&gt;
 Kernel: arch/i386/boot/bzImage is ready&lt;br /&gt;
Teised read on sinu väljundis tõenäoliselt erinevad, kuid otsi üles viimane rida (&amp;lt;code&amp;gt;Kernel: ... is ready&amp;lt;/code&amp;gt;) , mis peaks olema samasugune (i386 asemel võib olla midagi muud vastavalt protsessori arhitektuurile).&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Kopeeri või trüki see osa, mis jääb pärast &amp;quot;&amp;lt;code&amp;gt;Kernel:&amp;lt;/code&amp;gt;&amp;quot; uuesti käsureale ning pane ette käsk &amp;lt;code&amp;gt;cp&amp;lt;/code&amp;gt; (''copy'') ja lõppu kaust, kuhu me kerneli kopeerime. Tulemus peaks välja nägema selline:&lt;br /&gt;
 # cp arch/i386/boot/bzImage /boot/kernel-&amp;lt;''versioon''&amp;gt;&lt;br /&gt;
Selle käsu tulemuseks on kerneli kopeerimine kausta &amp;lt;code&amp;gt;/boot&amp;lt;/code&amp;gt;, kus asuvad [[GNU/Linux]] süsteemi bootloader, kernelid ja initrd ''image''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;d.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Kui tahad kinnitust sellele, et kopeerimine õnnestus, saad selle leides oma kerneli järgnevast loetelust:&lt;br /&gt;
 # ls /boot/kernel*&lt;br /&gt;
&lt;br /&gt;
===Debiani moodi===&lt;br /&gt;
Kuna kerneli kompileerimisel käsuga &amp;lt;code&amp;gt;make-kpkg&amp;lt;/code&amp;gt; tehakse sulle juba ilus .deb lõpuga pakk, siis saad kasutada tavapärast Debiani pakisüsteemi ''backend''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;i - dpkg'd.&lt;br /&gt;
 # cd /usr/src&lt;br /&gt;
 # dpkg -i kernel-image-&amp;lt;''versioon''&amp;gt;.deb&lt;br /&gt;
Ja ongi kernel koos moodulitega installitud. Selle eemaldamiseks saab edaspidi kasutada apt'i!&lt;br /&gt;
&lt;br /&gt;
==Kerneli kausta puhastamine==&lt;br /&gt;
Kui tekib vajadus kerneli kompileerimist täiesti puhtast kaustast alustada, on võimalik terve lähtekoodi kaust puhastada juba kompileeritud failidest. Selleks tuleb kasutada käsku&lt;br /&gt;
 # make clean&lt;br /&gt;
Kui on vaja viia kaust tagasi sellisele kujule nagu ta enne konfigureerimist ja kompileerimist oli, on ka selleks olemas vastav käsk.&lt;br /&gt;
 # make mrproper&lt;br /&gt;
'''NB!''' &amp;lt;code&amp;gt;make mrproper&amp;lt;/code&amp;gt; kustutab lisaks kompileeritud binaaridele ka .config faili, kus asub kerneli konfiguratsioon. Seda käsku pole tavaliselt vaja käivitada. Kui selleks mingil põhjusel siiski vajadus tekib, tee oma .config failist varukoopia!&lt;br /&gt;
&lt;br /&gt;
==Bootloaderi uuendamine==&lt;br /&gt;
&lt;br /&gt;
===GRUB===&lt;br /&gt;
Tuleb teha!&lt;br /&gt;
&lt;br /&gt;
===LILO===&lt;br /&gt;
Tuleb teha!&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Kurjade_lehek%C3%BClgede_blokeerimine_brauserites&amp;diff=2204</id>
		<title>Kurjade lehekülgede blokeerimine brauserites</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Kurjade_lehek%C3%BClgede_blokeerimine_brauserites&amp;diff=2204"/>
		<updated>2005-10-23T12:26:41Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Kasulikud Näpunäited]]&lt;br /&gt;
[[Category:Turvalisus]]&lt;br /&gt;
Kõige kergem viis blokeerida arvutile kahjulikke lehekülgi (spyware, adware jne.) on muuta hosts faili Windowsi kataloogis.&lt;br /&gt;
&lt;br /&gt;
Ehk siis selle asemel, et hakata kõiki lehekülgi ise sisse toksima on võimalik tõmmata juba valmis kirjutatud hosts fail.&lt;br /&gt;
&lt;br /&gt;
#tõmmata siit leheküljelt vastav tekstifail hosts.zip http://www.mvps.org/winhelp2002/hosts.htm&lt;br /&gt;
#pakkida lahti&lt;br /&gt;
#eemaldada faililaiend&lt;br /&gt;
#kopeerida vastavasse kausta: Windows XP -&amp;gt; C:\WINDOWS\SYSTEM32\DRIVERS\ETC&lt;br /&gt;
&lt;br /&gt;
Hosts faili asukoht sõltub kasutatavast Windowsi või Microsofti võrgukliendi versioonist&lt;br /&gt;
 Windows NT (3.5,3.51,4,2K,XP) %Systemroot%\System32\Drivers\Etc&lt;br /&gt;
 Windows 95                    &amp;lt;drive&amp;gt;\&amp;lt;Windows folder&amp;gt;&lt;br /&gt;
 Windows for Workgroups        &amp;lt;drive&amp;gt;\&amp;lt;Windows folder&amp;gt;&lt;br /&gt;
 Windows 3.1                   &amp;lt;drive&amp;gt;\&amp;lt;Windows folder&amp;gt;&lt;br /&gt;
 MS-Client 3.0                 &amp;lt;Boot volume&amp;gt;\Net&lt;br /&gt;
 Lan Manager 2.2c Client       &amp;lt;Boot volume&amp;gt;\Net&lt;br /&gt;
						&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Töötab mistahes aplikatsiooniga mis kasutab nimede lahendamiseks standardset APIt ja Windowsi TCP/IP stacki.&lt;br /&gt;
Kui vaja lisada mingeid keelatavaid lehekülgi, siis on alati võimalik otsida üles antud fail vastavast kaustast, avada Notepadis ning teiste aadresside näitel lisada blokeeritava lehekülje aadress. Salvestada, eemaldada faililaiend ning kopeerida samasse kausta tagasi.&lt;br /&gt;
&lt;br /&gt;
P.S. Enda lisatavatest lehekülgedest võiks alati panna nii www. versiooni kui ka ilma www. versioonita aadressi.&amp;lt;br&amp;gt;&lt;br /&gt;
P.S. 2. Igaks juhuks jätta alles originaal hosts fail. Just in case...&amp;lt;br&amp;gt;&lt;br /&gt;
P.S. 3. Kui nett peale antud HOSTSi kasutuselevõttu aeglaseks muutub (ja/või kogu masin uimerdama hakkab) siis soovitaks välja lülitada DNS Client nimeline teenus, mille võimetus lahmakate HOSTSidega hakkama saada kõnealuse &amp;quot;lisaefekti&amp;quot; põhjustabki. &lt;br /&gt;
&lt;br /&gt;
Autorid: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=6259 indre329], [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=10164 HaCaX]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Kurjade_lehek%C3%BClgede_blokeerimine_brauserites&amp;diff=2203</id>
		<title>Kurjade lehekülgede blokeerimine brauserites</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Kurjade_lehek%C3%BClgede_blokeerimine_brauserites&amp;diff=2203"/>
		<updated>2005-10-23T12:21:43Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Kasulikud Näpunäited]]&lt;br /&gt;
[[Category:Turvalisus]]&lt;br /&gt;
Kõige kergem viis blokeerida arvutile kahjulikke lehekülgi (spyware, adware jne.) on muuta hosts faili Windowsi kataloogis.&lt;br /&gt;
&lt;br /&gt;
Ehk siis selle asemel, et hakata kõiki lehekülgi ise sisse toksima on võimalik tõmmata juba valmis kirjutatud hosts fail.&lt;br /&gt;
&lt;br /&gt;
#tõmmata siit leheküljelt vastav tekstifail hosts.zip http://www.mvps.org/winhelp2002/hosts.htm&lt;br /&gt;
#pakkida lahti&lt;br /&gt;
#eemaldada faililaiend&lt;br /&gt;
#kopeerida vastavasse kausta: Windows XP -&amp;gt; C:\WINDOWS\SYSTEM32\DRIVERS\ETC&lt;br /&gt;
&lt;br /&gt;
Windows 2K -&amp;gt; C:\WINNT\SYSTEM32\DRIVERS\ETC&lt;br /&gt;
&lt;br /&gt;
Windows 98/ME -&amp;gt; C:\WINDOWS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Töötab mistahes aplikatsiooniga mis kasutab nimede lahendamiseks standardset APIt ja Windowsi TCP/IP stacki.&lt;br /&gt;
Kui vaja lisada mingeid keelatavaid lehekülgi, siis on alati võimalik otsida üles antud fail vastavast kaustast, avada Notepadis ning teiste aadresside näitel lisada blokeeritava lehekülje aadress. Salvestada, eemaldada faililaiend ning kopeerida samasse kausta tagasi.&lt;br /&gt;
&lt;br /&gt;
P.S. Enda lisatavatest lehekülgedest võiks alati panna nii www. versiooni kui ka ilma www. versioonita aadressi.&amp;lt;br&amp;gt;&lt;br /&gt;
P.S. 2. Igaks juhuks jätta alles originaal hosts fail. Just in case...&amp;lt;br&amp;gt;&lt;br /&gt;
P.S. 3. Kui nett peale antud HOSTSi kasutuselevõttu aeglaseks muutub (ja/või kogu masin uimerdama hakkab) siis soovitaks välja lülitada DNS Client nimeline teenus, mille võimetus lahmakate HOSTSidega hakkama saada kõnealuse &amp;quot;lisaefekti&amp;quot; põhjustabki. &lt;br /&gt;
&lt;br /&gt;
Autorid: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=6259 indre329], [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=10164 HaCaX]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Kategooria:V%C3%B5rgukihi_juhendid&amp;diff=1960</id>
		<title>Kategooria:Võrgukihi juhendid</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Kategooria:V%C3%B5rgukihi_juhendid&amp;diff=1960"/>
		<updated>2005-10-20T19:12:30Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Andmeside]]&lt;br /&gt;
Siin Käsitletakse nii või naasugusete võrguseadistuste ja vahendite tööd. Näiteks mitmesugused NAT'id, tulemüürid (ka personal firewall'id, sest ehki need on tavalised aplikatsioonid, nad pigem pakuvad kui kasutavad midagi), routerid, wifi teenused (v.a. antennid ja kaablid) jne. Protokollid (v.a. teenuseprotokollid) ning nende omadused ja seadistamine.&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Wifi_sildamine&amp;diff=1958</id>
		<title>Wifi sildamine</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Wifi_sildamine&amp;diff=1958"/>
		<updated>2005-10-20T18:27:04Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Kasulikud Näpunäited]]&lt;br /&gt;
[[Category:Andmeside]]&lt;br /&gt;
[[Category: Võrgukihi juhendid]]&lt;br /&gt;
[[Category:Andmeside]]&lt;br /&gt;
==Miks on ''client mode's'' WiFi bridge juba oma olemuselt äärmiselt jabur asi ja miks on WRT54G kasutamine sellises kontekstis Halb Mõte ;(==&lt;br /&gt;
&lt;br /&gt;
Häda on lühidalt järgmine:&lt;br /&gt;
[[WiFi]] võrk on '''peaaegu''' nagu [[ethernet]] [[koaksiaalkaablis]], st. paketid, mis võrgus liiguvad, on üsna tavalised etherneti paketid pluss veel pisut [[802.11]] spetsiifilist juttu... Esialgu tunduks, et kõik on väga hea - kui on ethernet, siis saab ju seda ka [[bridge]]da, eks? Wrong!&lt;br /&gt;
&lt;br /&gt;
Kahjuks, erinevalt tavalisest koaksiaal ethernetist, kus ühtegi liiklust vahendavat seadet ei ole (või kui on, siis on need etherneti seisukohalt läbipaistvad, ntx. [[hub]] või [[repeater]]), käib WiFi puhul kogu liiklus [[AP]]'st läbi. AP aga peab nimekirja klientidest, kes on antud võrgu külge assotseerunud, seetõttu on AP jaoks äärmiselt oluline, milliselt [[MAC aadress]]ilt üks või teine pakett tuleb... ning ongi sedasi, et paketti, mille source MAC aadress ei kuulu ühelegi assotseerunud kliendile, lihtsalt ignoreeritakse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ent see on täpselt see olukord, mis tekkib, kui me asetame WiFi võrku client modes bridge (kusjuures ei ole vahet, kas see bridge on lahendatud softiliselt nagu [[WRT54G]] sees või kuidagi raualiselt). Kuna tavaline bridge paketi enese sees mitte midagi ei muuda, siis saabuvad WiFi võrku ja seetõttu ka AP'le paketid, mille source MAC aadressidest ta mitte midagi ei tea - need MAC'id on ju meie bridge taga kuskil kaabli küljes. Loomulikult ignoreerib AP neid pakette ning kogu ilus idee ei kõlba enam pruunkaru pärasoolde kah mitte...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Et sellest hädast üle saada, ongi välja mõeldud selline jubedus nagu [[WET]], mille puhul client modes bridge saadab tema küljes olevast kaabliga etherneti võrgust tulnud paketid välja '''oma''' MAC aadressiga(sellega, mis on AP'le teada kui assotseerunud seadme aadress) ning peab sisemiselt sellise translatsiooni kohta mingit tabelit, kus on ilmselt kirjas, millise MAC aadressi taga on milline [[IPv4]] aadress - kuidagi on ju vaja WiFi võrgule ARP'e valetada (midagi ARP [[proxy| Proxy]] laadset). WET'i võib vaadata kui MAC aadressi põhist source [[NAT]]'i...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ilmselge, et selline koletu lahendus töötab täpselt nii hästi, kui hästi on seadmes aadresside translatsioon lahendatud...&lt;br /&gt;
Üldiselt, tavaline unicast IPv4 liiklus isegi töötab, IPv4 Multicast suure tõenäosusega ei tööta (ei ole viitsinud proovida), [[IPv6]] ei tööta (proovitud) ning ilmselt ei tööta ka [[IPX]] ega muud mitte IPv4 protokollid. Ühesõnaga võib-olla antud võrgus ajab WET asja ära, kuid garanteerida ma küll midagi ei julgeks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tasub märkida veel, et [[client mode]]'s bridgena ei oska WRT54G töötada võrgus, kus on [[WEP]] krüpto - miks ei tööta, ei tea - WiFi'st eetri poole paketid liiguvad, eetrist WiFi poole mitte, samas tcpdumbiga on näha, et softi jaoks kupatatakse pakett interfeissi, kuid õhku midagi ei jõua.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Samuti ei ole WRT54G client mode's kuigi stabiilne (ei bridgena ega ka ilma) - tihedama liiklusega võrgus jookeb nii kord või paar päevas kokku (tõsi, ta teeb sellisel juhul '''alati''' restardi (mingi sisemine watchdog?) ning ühendus taastub üsna pea, ent ebameeldiv ikkagi)... Miks ikaldub, ei tea, miks ikaldub aga vat, ikaldub...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kokkuvõtteks, mitte-bridgena (näiteks [[ruuterina]]) on WRT54G client modes enam-vähem kasutatav seade(kui harvad restardist tekkinud paari sekundilised katkestused ei häiri või kui liiklus ei ole eriti tihe), ent nagu alguses öeldud client modes WiFi bridge on juba oma olemuselt jabur...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tjah, ilmselt on olemas ka seadmed, mis suudavad olla client mode bridged inimlikul viisil - näiteks assotseerides AP vastu iga viimase kui MAC aadressi, mis tahab midagi WiFi võrku rääkida kuid arvatavasti on need seadmed oluliselt kallimiad kui WRT54G. Kuid isegi sellisel juhul ei ole see lahendus kuigi ilus - mis saab siis, kui üle WiFi kokku bridgetavates eetri segmentides on sadu masinaid, mis mingil põhjusel teise segmenti midagi saata tahavad? &lt;br /&gt;
&lt;br /&gt;
Autor: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=20974 wookie]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Wifi_sildamine&amp;diff=1930</id>
		<title>Wifi sildamine</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Wifi_sildamine&amp;diff=1930"/>
		<updated>2005-10-20T18:04:33Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: Miks on ''client mode's'' WiFi bridge juba oma olemuselt äärmiselt jabur asi ja miks on WRT54G kasutamine sellises kontekstis Halb Mõte&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgukihi juhendid]]&lt;br /&gt;
[[Category:Kasulikud Näpunäited]]&lt;br /&gt;
&lt;br /&gt;
==Miks on ''client mode's'' WiFi bridge juba oma olemuselt äärmiselt jabur asi ja miks on WRT54G kasutamine sellises kontekstis Halb Mõte ;(==&lt;br /&gt;
&lt;br /&gt;
Häda on lühidalt järgmine:&lt;br /&gt;
WiFi võrk on _peaaegu_ nagu ethernet koaksiaalkaablis, st. paketid, mis võrgus liiguvad, on üsna tavalised etherneti paketid pluss veel pisut 802.11 spetsiifilist juttu... Esialgu tunduks, et kõik on väga hea - kui on ethernet, siis saab ju seda ka bridgeda, eks? Wrong!&lt;br /&gt;
&lt;br /&gt;
Kahjuks, erinevalt tavalisest koaksiaal ethernetist, kus ühtegi liiklust vahendavat seadet ei ole (või kui on, siis on need etherneti seisukohalt läbipaistvad, ntx. hub või repeater), käib WiFi puhul kogu liiklus AP'st läbi. AP aga peab nimekirja klientidest, kes on antud võrgu külge assotseerunud, seetõttu on AP jaoks äärmiselt oluline, milliselt MAC aadressilt üks või teine pakett tuleb... ning ongi sedasi, et paketti, mille source MAC aadress ei kuulu ühelegi assotseerunud kliendile, lihtsalt ignoreeritakse.&lt;br /&gt;
&lt;br /&gt;
Ent see on täpselt see olukord, mis tekkib, kui me asetame WiFi võrku client modes bridge(kusjuures ei ole vahet, kas see bridge on lahendatud softiliselt nagu WRT54G sees või kuidagi raualiselt). Kuna tavaline bridge paketi enese sees mitte midagi ei muuda, siis saabuvad WiFi võrku ja seetõttu ka AP'le paketid, mille source MAC aadressidest ta mitte midagi ei tea - need MAC'id on ju meie bridge taga kuskil kaabli küljes. Loomulikult ignoreerib AP neid pakette ning kogu ilus idee ei kõlba enam pruunkaru pärasoolde kah mitte...&lt;br /&gt;
&lt;br /&gt;
Et sellest hädast üle saada, ongi välja mõeldud selline jubedus nagu WET, mille puhul client modes bridge saadab tema küljes olevast kaabliga etherneti võrgust tulnud paketid välja _oma_ MAC aadressiga(sellega, mis on AP'le teada kui assotseerunud seadme aadress) ning peab sisemiselt sellise translatsiooni kohta mingit tabelit, kus on ilmselt kirjas, millise MAC aadressi taga on milline IPv4 aadress - kuidagi on ju vaja WiFi võrgule ARP'e valetada (midagi ARP Proxy laadset). WET'i võib vaadata kui MAC aadressi põhist source NAT'i...&lt;br /&gt;
&lt;br /&gt;
On ilmselge, et selline koletu lahendus töötab täpselt nii hästi, kui hästi on seadmes aadresside translatsioon lahendatud...&lt;br /&gt;
Üldiselt, tavaline unicast IPv4 liiklus isegi töötab, IPv4 Multicast suure tõenäosusega ei tööta (ei ole viitsinud proovida), IPv6 ei tööta(proovitud) ning ilmselt ei tööta ka IPX ega muud mitte IPv4 protokollid. Ühesõnaga võib-olla antud võrgus ajab WET asja ära, kuid garanteerida ma küll midagi ei julgeks.&lt;br /&gt;
&lt;br /&gt;
Tasub märkida veel, et client mode's bridgena ei oska WRT54G töötada võrgus, kus on WEP krüpto - miks ei tööta, ei tea - WiFi'st eetri poole paketid liiguvad, eetrist WiFi poole mitte, samas tcpdumbiga on näha, et softi jaoks kupatatakse pakett interfeissi, kuid õhku midagi ei jõua.&lt;br /&gt;
&lt;br /&gt;
Samuti ei ole WRT54G client mode's kuigi stabiilne (ei bridgena ega ka ilma) - tihedama liiklusega võrgus jookeb nii kord või paar päevas kokku (tõsi, ta teeb sellisel juhul _alati_ restardi (mingi sisemine watchdog?) ning ühendus taastub üsna pea, ent ebameeldiv ikkagi)... Miks ikaldub, ei tea, miks ikaldub aga vat, ikaldub...&lt;br /&gt;
&lt;br /&gt;
Kokkuvõtteks, mitte-bridgena (näiteks routerina) on WRT54G client modes enam-vähem kasutatav seade(kui harvad restardist tekkinud paari sekundilised katkestused ei häiri või kui liiklus ei ole eriti tihe), ent nagu alguses öeldud client modes WiFi bridge on juba oma olemuselt jabur...&lt;br /&gt;
&lt;br /&gt;
Tjah, ilmselt on olemas ka seadmed, mis suudavad olla client mode bridged inimlikul viisil - näiteks assotseerides AP vastu iga viimase kui MAC aadressi, mis tahab midagi WiFi võrku rääkida, kuid arvatavasti on need seadmed oluliselt kallimiad kui WRT54G. Kuid isegi sellisel juhul ei ole see lahendus kuigi ilus - mis saab siis, kui üle WiFi kokku bridgetavates eetri segmentides on sadu masinaid, mis mingil põhjusel teise segmenti midagi saata tahavad? &lt;br /&gt;
&lt;br /&gt;
Autor: [http://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&amp;amp;u=20974 wookie]&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
	<entry>
		<id>http://wiki.hinnavaatlus.ee/index.php?title=Linuxi_kerneli_kompileerimine&amp;diff=1916</id>
		<title>Linuxi kerneli kompileerimine</title>
		<link rel="alternate" type="text/html" href="http://wiki.hinnavaatlus.ee/index.php?title=Linuxi_kerneli_kompileerimine&amp;diff=1916"/>
		<updated>2005-10-20T17:45:53Z</updated>

		<summary type="html">&lt;p&gt;194.204.62.228: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategooria:Kasulikud Näpunäited]]&lt;br /&gt;
[[Kategooria:Linux]]&lt;br /&gt;
Järgnev õpetus käsitleb seda, kuidas konfigureerida ja kompileerida Linuxi kernelit versiooninumbriga 2.6.x.&lt;br /&gt;
&lt;br /&gt;
'''Hoiatus:'''&lt;br /&gt;
Juhendi hetkel olemas olev osa käsitleb nn. ametliku, Linus Torvaldsi ja meeskonna poolt loodava kerneli ehk nn. ''vanilla kerneli'' kompileermist ja paigaldamist. Juhendid on üldised, ja ei sisalda  distributiividele spetsiifiliste vahendite kasutamist. Samuti pole käsitletud kernelile &amp;quot;mitteametlike&amp;quot; modifiaktsioonide, ehk ''patchide'' lisamist. NB! ''vanilla kerneli'' kasutamine distributiivdes, mis kernelit tugevasti modifitseerivad (Fedora Core, Suse/Novell Linux jne.) ei ole soovitav ja võib tekitada ettenägematuid tõrkeid. Kindla soovi korral ise kernel kompileerida oleks selliste distributiivde kasutajal soovitav hankida distrospetsiifiline kerneli lähtekood kasutades oma distro pakihaldusvahendeid. Samuti on soovitav meeles pidada, et sedasi käsitisi loodud ja paigaldatud kernel ei ole paikhalduri jaoks enam hallatav, uuendatav, modifitseeritav ega eemaldatav. Samuti pole hetkel veel käsitletud kerneli kompileerimise jaoks vajalikud vahendid: arendusvahendid ja ''libraryd'' ning nende paigaldamine.&lt;br /&gt;
&lt;br /&gt;
==Lähtekoodi hankimine==&lt;br /&gt;
Kõigepealt läheb meil muidugi vaja Linux'i kerneli lähtekoodi, mille leiab selle ametlikult lehelt http://www.kernel.org. Sealt otsi üles rida mis algab nii:&lt;br /&gt;
 The latest stable version of the Linux kernel is:&lt;br /&gt;
Vajuta samal real olevale '''F'''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;ile, et tirida täielik lähtekood (''full source''). Salvesta lähtekoodi ''tarball'' oma kodukausta.&lt;br /&gt;
&lt;br /&gt;
==Eeltöö==&lt;br /&gt;
* Nüüd ava oma lemmik terminaliemulaator (konsole, gnome-terminal, xterm) ning liiguta ''tarball'' õigesse kohta:&lt;br /&gt;
 $ su&lt;br /&gt;
 Password:&lt;br /&gt;
 # mv /home/minukasutaja/linux-*.tar.bz2 /usr/src/&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Järgmisena pakime .tar.bz2 arhiivi lahti:&lt;br /&gt;
 # cd /usr/src&lt;br /&gt;
 # tar xjf linux-&amp;lt;''versioon-mille-tirisid''&amp;gt;.tar.bz2&lt;br /&gt;
Kui ei mäleta täielikku failinime, saad alati poole failinime trükkimise peal kasutada klaviatuuri '''TAB''' klahvi, et failinime automaatselt täiendataks.&amp;lt;br/&amp;gt;&lt;br /&gt;
Nüüd peaks sul olema selline kaust: &amp;lt;code&amp;gt;/usr/src/linux-&amp;lt;''versioon''&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Konfigureerimine==&lt;br /&gt;
Linux'i kerneli kompileerimiseks tuleb ta eelnevalt konfigureerida ehk tuleb valida, millise raudvara jaoks tugi sisse jätta, milliseid failisüsteeme toetada jne.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''NB!''' Kui sa ei ole enda arvuti raudvara tundmise poolelt just väga kogenud, siis oleks vast siin paslik asi pooleli jätta ja rahulduda [[Linux|distributsioonide]] poolt koostatud pakikernelitega, mis iseenesest on vägagi töötavad ja piisavalt head rakendused! Kui aga on huvi ja oled juba kogenum, loe julgelt edasi.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Linux'i kernelil on mitu erinevat konfigureerimise võimalust. Selles juhendis käsitleme neist kolme.&lt;br /&gt;
===''menuconfig''===&lt;br /&gt;
Tegemist on ncurses teegi baasil loodud konsoolipõhise konfigureerimiskeskkonnaga.&lt;br /&gt;
[[Pilt:menuconfig_konsole.jpg|thumb|200px|menuconfig]]&lt;br /&gt;
''menuconfig'''i kasutamiseks piisab lahtipakitud kerneli kaustas järgmise käsu jooksutamisest:&lt;br /&gt;
 # make menuconfig&lt;br /&gt;
''menuconfig'''is on järgmised tingmärgid:&lt;br /&gt;
* [*] - valik kompileeritakse kernelisse&lt;br /&gt;
* [M] - valik kompileeritakse moodulina, mis on kerneli image'st eraldi ja mida saab laadida käsuga ''modprobe''&lt;br /&gt;
* [ ] - valikut ei kaasata kernelisse&lt;br /&gt;
''menuconfig'''i menüüdel põhinev kasutajaliides on suhteliselt selge ning erilisi probleeme sellega ei tohiks tekkida. Iga valiku abiteksti nägemiseks vajuta klahvi &amp;quot;?&amp;quot;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''NB!''' Väljumisel ära unusta kerneli konfiguratsiooni salvestamast!&lt;br /&gt;
===''config''===&lt;br /&gt;
Teine natuke arhailisem ja aeganõudvam viis kernelit konfigureerida, on lasta tööle käsk&lt;br /&gt;
 # make config&lt;br /&gt;
Antud juhul küsitakse sult kõiki valikuid ükshaaval, kus valikuteks on [y/n/m/?] (yes/no/module/help).&amp;lt;br/&amp;gt;&lt;br /&gt;
Seda moodust kerneli kompiilimiseks ei soovita ma kellelegi, kui selle järele just tungivat vajadust ei ole.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Kasutage igal võimalusel menuconfig'it!'''&lt;br /&gt;
===''oldconfig''===&lt;br /&gt;
Juhul, kui oled juba ühe korra kerneli vastavalt oma raudvarale konfigureerinud, ei pea sa uut kernelit paigaldades seda täies mahus uuesti tegema. Sa pead ainult kopeerima vana kerneli konfiguratsioonifaili (&amp;lt;code&amp;gt;/usr/src/linux-&amp;lt;''versioon''&amp;gt;/.config&amp;lt;/code&amp;gt;) uue kerneli kausta samuti ning laskma tööle käsu&lt;br /&gt;
 # make oldconfig&lt;br /&gt;
Sellisel juhul küsitakse sinult ainult neid valikuid, mis on vahepeal juurde tulnud.&lt;br /&gt;
&lt;br /&gt;
==Kompileerimine==&lt;br /&gt;
Kui oled edukalt kerneli konfiguratsiooniga valmis saanud, kompileeri kernel lastes kerneli kaustas tööle järgnev käsk:&lt;br /&gt;
 # make&lt;br /&gt;
Nüüd pead sa ära ootama pika joru igasugust mõistmatut teksti. Kui asi lõpuks õnnelikku lõppu jõuab ning protseduur ei lõppe mingite erroritega, läks kõik õnneks. Suundu järgmisesse punkti!&lt;br /&gt;
==Moodulite paigaldamine==&lt;br /&gt;
Kerneli moodulitele on olemas spetsiaalne kaust &amp;lt;code&amp;gt;/lib/modules/&amp;lt;/code&amp;gt;, kuhu nad on vaja paigaldada selleks, et kernel neid korrektselt laadida ja kasutada suudaks. Selle töö teeb sinu eest ära käsk&lt;br /&gt;
 # make modules_install&lt;br /&gt;
Ka selle käsu käivitamiseks pead olema kerneli kaustas (&amp;lt;code&amp;gt;/usr/src/linux-&amp;lt;''versioon''&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==Kerneli paika kopeerimine==&lt;br /&gt;
Kui kerneli kompileerimine lõpeb edukalt, siis tuleb sulle ette tühi käsurida ning vahetult eelnevas väljundis pole veateateid, mis viitaksid sellele, et kompileerimine ebaõnnestus.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Otsi viimaste väljundi ridade seast välja selline lõik (väljundi kerimiseks sobib enamkasutatavates terminaliemulaatorites hiirerull või klahvikombinatsioon ''Shift+nool üles/nool alla'':&lt;br /&gt;
 Root device is (3, 4)&lt;br /&gt;
 Boot sector 512 bytes.&lt;br /&gt;
 Setup is 6878 bytes.&lt;br /&gt;
 System is 1862 kB&lt;br /&gt;
 Kernel: arch/i386/boot/bzImage is ready&lt;br /&gt;
Teised read on sinu väljundis tõenäoliselt erinevad, kuid otsi üles viimane rida (&amp;lt;code&amp;gt;Kernel: ... is ready&amp;lt;/code&amp;gt;) , mis peaks olema samasugune (i386 asemel võib olla midagi muud vastavalt protsessori arhitektuurile).&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Kopeeri või trüki see osa, mis jääb pärast &amp;quot;&amp;lt;code&amp;gt;Kernel:&amp;lt;/code&amp;gt;&amp;quot; uuesti käsureale ning pane ette käsk &amp;lt;code&amp;gt;cp&amp;lt;/code&amp;gt; (''copy'') ja lõppu kaust, kuhu me kerneli kopeerime. Tulemus peaks välja nägema selline:&lt;br /&gt;
 # cp arch/i386/boot/bzImage /boot/kernel-&amp;lt;''versioon''&amp;gt;&lt;br /&gt;
Selle käsu tulemuseks on kerneli kopeerimine kausta &amp;lt;code&amp;gt;/boot&amp;lt;/code&amp;gt;, kus asuvad [[GNU/Linux]] süsteemi bootloader, kernelid ja initrd ''image''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;d.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
* Kui tahad kinnitust sellele, et kopeerimine õnnestus, saad selle leides oma kerneli järgnevast loetelust:&lt;br /&gt;
 # ls /boot/kernel*&lt;br /&gt;
&lt;br /&gt;
==Kerneli kausta puhastamine==&lt;br /&gt;
Kui tekib vajadus kerneli kompileerimist täiesti puhtast kaustast alustada, on võimalik terve lähtekoodi kaust puhastada juba kompileeritud failidest. Selleks tuleb kasutada käsku&lt;br /&gt;
 # make clean&lt;br /&gt;
Kui on vaja viia kaust tagasi sellisele kujule nagu ta enne konfigureerimist ja kompileerimist oli, on ka selleks olemas vastav käsk.&lt;br /&gt;
 # make mrproper&lt;br /&gt;
'''NB!''' &amp;lt;code&amp;gt;make mrproper&amp;lt;/code&amp;gt; kustutab lisaks kompileeritud binaaridele ka .config faili, kus asub kerneli konfiguratsioon. Seda käsku pole tavaliselt vaja käivitada. Kui selleks mingil põhjusel siiski vajadus tekib, tee oma .config failist varukoopia!&lt;br /&gt;
&lt;br /&gt;
==Bootloaderi uuendamine==&lt;br /&gt;
===GRUB===&lt;br /&gt;
Tuleb teha!&lt;br /&gt;
===LILO===&lt;br /&gt;
Tuleb teha!&lt;/div&gt;</summary>
		<author><name>194.204.62.228</name></author>
	</entry>
</feed>