22 en , eigen vertaling uit het Engels
“De DOS-box?? Gebruik je nog steeds de DOS-box? Ben je een dinosaurus of zo?”
Ja, in feite wel. En een fossiel, ook. Maar dat vind ik prettig.
Op een Windows-systeem (Windows 95 en nieuwer, alles na Windows 3.11), is wat mensen meestal een DOS-box noemen, in feite een 32-bits commandoregel, waarin je 16- en 32-bits programma’s kunt draaien.
Deze Windows-commandoregel – met de naam cmd
– is niet half zo krachtig als een Unix-shell (sh, bash, ksh, csh,
tcsh etc.).
Maar bijvoorbeeld onder Windows Vista worden wel lange namen ondersteund,
en het jokerteken * mag ook aan het begin en in het midden van een naam
staan, niet alleen maar aan het eind, zoals dat bij oudere versies nog
het geval was.
In een commandoregel start je een programma door de naam ervan in te tikken, gevolgd door de ‘enter’-toets (soms ook aangeduid als ‘return’ of aangegeven met het symbool ⏎).
In plaats van alleen de naam te gebruiken, kan het nodig zijn
het volledige pad in te geven, naar de locatie waar het
programma (het commando, het script of de batch file,
hoe je het maar noemen wilt) op de schijf is opgeslagen.
Maar dat is onhandig. Zo is xcopybat
het
commando (een zelfgemaakt batchbestand) waar ik het in het
volgende artikel over ga hebben.
Op mijn Windows-computer is het volledige pad daarvan:
c:\ruud\bin\xcopybat.bat
.
Ik wil dat hele pad niet elke keer hoeven intikken als ik
het commando gebruik.
Gewoon xcopybat⏎
moet genoeg zijn.
Dat is mogelijk door de PATH-variabele in te stellen.
(Onder MSDOS en Windows hebben
bestandsnaamextensies als .bat
en
.exe
een speciale status, waardoor ze
ook weggelaten mogen worden. Op Unix-systemen hebben
programma’s normaal niet zulke naamuitgangen.
Maar als een programmabestand toch zo’n extensie
heeft, dan moet je dat onder Unix bij de aanroep
vanaf de commandoregel ook echt vermelden.)
De omgevingsvariabele PATH ziet er in mijn systeem zo uit (nou ja, eigenlijk staat er meer in, maar we houden het even simpel):
PATH=.;c:\bin;c:\ruud\bin;c:\windows\system32;
Zoals je ziet staan in PATH een paar paden, gescheiden door puntkomma’s (;). Dit verschilt van wat op Unix-systemen gebruikelijk is, want daar is de dubbele punt (:) in deze situatie het scheidingsteken. Programma- of scriptbestanden in de opgegeven paden (mappen, folders, directories) zijn nu aan te roepen met alleen hun naam, zonder het complete pad.
De commandoprocessor zal de paden in PATH afgaan in de aangegeven volgorde, om te zien of het commando (script, programma) waarvan de naam in de commandoregel is getypt om het uit te voeren, ergens voorkomt.
In mijn voorbeeld bevat PATH de volgende zoekpaden:
De current directory (huidige map), aangegeven
door een punt, ‘.
’.
Als ik me goed herinner is de current directory onder
DOS en Windows impliciet onderdeel van het PATH, zodat
de punt niet apart hoeft te worden vermeld. Onder Unix
moet dat echter wel.
Ik heb ervaring met beide typen systemen, daarom heb
ik me aangewend de current directory altijd expliciet
in het pad te zetten, dan werkt het altijd.
c:\bin
is de plek waar wat Unix-utilities
staan, geïmplementeerd voor DOS, die wel eens van pas
komen.
c:\ruud\bin
is mijn eigen
privé-bin
-directory, waar ik zelfgeschreven
scripts en programma’s heb staan.
Een daarvan is het eerdergenoemde xcopybat
.
c:\windows\system32
is waar de
commando’s staan, die standaard bij het
besturingssysteem zitten. In mijn geval is dat:
MS Windows Vista.
Het woord bin
in sommige padnamen geeft
aan dat de directories bedoeld zijn voor binaire bestanden,
d.w.z. uitvoerbare programma’s.
In deze context vallen onder ‘binaries’ ook
scripts, dat zijn niet-binaire tekstbestanden waren
diverse andere programma-aanroepen en commando’s
samengebracht zijn. Bij DOS en Windows worden die
batch files genoemd. Vandaar hun naamextensie
.bat
.
(Er bestaan natuurlijk Engelse
woordcombinaties als
‘trash bin’,
‘dust bin’ en
‘garbage bin’. Dus misschien is
dit Unix-idee ‘bin’ wel een woordspeling,
met de goedbedoelde suggestie aan programmeurs, zo
van ‘gooi dat stomme programma dat je net
geschreven heb maar in de vuilnisbak, daar doet het
misschien nog wat nuttigs.’
Unix-spullen zitten vol met zulk soort grappen.
Aan de andere kant schijnen die woordcombinaties
vooral Brits Engels te zijn, en het vroege Unix
was meer een Amerikaanse ontwikkeling.)
Net zoals ik niet bij elk commando het volledige pad wil
intikken, zo wil ik ook niet elke keer dat ik een DOS-box
start, de PATH-variabele moeten instellen.
Die variabele moet eens en voor altijd gezet kunnen worden.
De traditie was dat dat gebeurde in een bestand met de naam
c:\autoexec.bat
.
Dat en c:\Config.sys
waren de opstartbestanden
voor een MSDOS-systeem. Dat was jaren geleden, toen MSDOS
het besturingssysteem was, en Windows (versies 3.10 en 3.11)
alleen een grafische schil, die als programma onder DOS
draaide.
In zijn oneindige wijsheid, in het belang van ons onwetende
gebruikers, heeft Microsoft echter besloten om de bestanden
c:\autoexec.bat
en c:\config.sys
af te schaffen.
Vanaf Windows Millennium ging Microsoft zelfs zo ver,
dat als je de brutaliteit had toch weer een
c:\autoexec.bat
en
c:\config.sys
aan te maken, die bij de start van het systeem een
andere naam kregen, zodat wat erin stond geen uitwerking
meer had.
Kennelijk wilde Microsoft dat niemand meer met de commandoregel werkte en alles in de grafische Windows-omgeving deed. Ik ben het daar niet mee eens. Ook ik gebruik Windows veel zoals het de bedoeling is. Maar voor sommige dingen, of zelfs veel dingen, is de commandoregel zo veel handiger, flexibeler, rechtstreekser en krachtiger. Ook vaak duidelijker: je ziet wat je doet en wat er gebeurt.
Misschien is het een kwestie van smaak, of van waar je aan gewend bent. Zoals ik al zei, ik ben een dinosaurus. Ik werk al met computers vanaf 1975 en met de Unix-commandoregel vanaf 1985. Mijn eerste ervaring met DOS was in 1990 – en dat was een grote teleurstelling! Pas in 1994 of zo begon ik geleidelijk ook de grafische interface van Windows te gebruiken.
Omdat Microsoft het zetten van de PATH-variabele in
autoexec.bat
ontmoedigt en frustreert,
zocht ik naar een manier om deze kwalijke blokkade
te omzeilen. En die vond ik ook: het is mogelijk het
opstartbestand van de commandoregel op te geven
in de eigenschappen van het startpictogram.
Dat werkt zo:
Je gaat naar het pictogram waarmee je de DOS-dox start. Dat staat bijvoorbeeld op het ‘bureaublad’ van de computer, of in een submap daarin. De DOS-box is ook te bereiken vanuit het startmenu van het systeem. Daarin zit die normaal onder Alle programma’s, Bureau-accessoires, Opdrachtprompt.
Op zo’n startpictogram klik je met de rechtermuisknop. Onderaan het menu dat dan uitklapt, kies je Eigenschappen en daarbinnen klik je (zo nodig) op de tab Snelkoppeling. Daar zie je een veld met de naam Doel. Op mijn systeem staat daarin:
%SystemRoot%\system32\cmd.exe /k c:\ruud\bin\auto.bat
Dit betekent dat het pictogram de Windows commandoregel
opstart, via het volledige pad (hier gedeeltelijk aangeduid
via de variabele SystemRoot
), en de naam
(cmd
).
Ik weet niet uit mijn hoofd wat /k
betekent,
dus dat heb ik nu voor het artikel weer even opgezocht,
met behulp van het commando
cmd /?
in de commandoregel.
Daaruit bleek dat /k
betekent:
“Voert de opdracht uit die
is opgegeven met tekenreeks en blijft actief”.
Dit klinkt misschien vreemd, maar dat
“en blijft actief”
is in tegenstelling tot ‘en stopt dan’,
d.w.z. dat cmd
bij de schakeloptie
/c
zichzelf beëindigt nadat het script, dat
genoemd staat na die schakeloptie, is uitgevoerd.
Dus met /k
in plaats van /c
,
gaat cmd
door, totdat het programma wordt
beëindigd door het commando exit⏎
.
Hier is het vooraf uit te voeren commando:
c:\ruud\bin\auto.bat
.
Dat is een tekstbestand, aangemaakt met een teksteditor zoals Notepad. Wie per se wil, kan zo’n tekstbestand ook wel maken met een tekstverwerker als MS Word. Maar let op: je moet het bestand dan wel opslaan als tekstbestand, niet als een Word-document.
Het tekstbestand c:\ruud\bin\auto.bat
bevat,
naast dingen die er voor dit artikel even niet toe doen,
de eerdergenoemde instelling voor de omgevingsvariabele
genaamd PATH, als volgt:
PATH=.;c:\bin;c:\ruud\bin;c:\windows\system32;
Daardoor kan ik nu mijn eigen lokale commando’s draaien
zonder het volledige pad te hoeven opgeven. Een van die lokale
opdrachten is xcopybat
, het onderwerp van mijn
volgende artikel.
Copyright © 2012 van R. Harmsen, alle rechten voorbehouden, all rights reserved.