PATH en de DOS-box

22 en , eigen vertaling uit het Engels

DOS-box??

“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.

Een programma aanroepen

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.)

PATH

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:

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.)

Autoexec.bat

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.

Eigenschappen van pictogram

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.

PATH automatisch gezet

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.