Gebruik van de opdrachtprompt/Batchbestanden
Commando's die je intikt in de opdrachtprompt, kan je ook typen in een tekstbestand (bv. in Kladblok). Door dit tekstbestand vervolgens te bewaren als bat-bestand, i.p.v. txt-bestand wordt het gewone tekstbestand een batchbestand. Door het uitvoeren van dit batchbestand (door de naam in te tikken in de opdrachtprompt of door erop te dubbelklikken) worden de reeks opdrachten één na één uitgevoerd. Zulke batchbestanden zijn handig als er routines uitgevoerd moeten worden.
Een eerste batchbestand
[bewerken]mkdir c:\backup
copy c:\boot.* c:\backup
copy c:\windows\win.ini c:\backup
copy c:\windows\system.ini c:\backup
copy c:\windows\system32\config\*.sav c:\backup
Commentaar
[bewerken]Commentaar in programmacode laat toe om extra uitleg te verschaffen. Bij batchbestanden kan dit door "rem" voor de commentaar te plaatsen dit kan ook door "::" te typen. Ons voorbeeld van daarnet wordt dan:
REM Het onderstaande bestand kan je gebruiken om een reservekopie te maken
:: van enkele vitale bestanden.
mkdir c:\backup
copy c:\boot.* c:\backup
copy c:\windows\win.ini c:\backup
copy c:\windows\system.ini c:\backup
copy c:\windows\system32\config\*.sav c:\backup
Commentaar op het einde van een commandoregel is niet toegelaten. Zo zou "mkdir c:\backup REM mkdir = make directory" ervoor zorgen dat er ook een map REM, md, make en directory wordt aangemaakt.
echo
[bewerken]Als bovenstaand batchbestand wordt uitgevoerd in de opdrachtprompt komt er (te)veel informatie op het scherm. Zelfs onze commentaar (met REM) wordt weergegeven. Om dit te vermijden wordt "echo off" gebruikt. Alle commandoregels die volgen op "echo off" worden niet op het scherm getoond, ook hun uitvoer niet (alhoewel ze achter de schermen wel worden uitgevoerd). Om te vermijden dat het commando "echo off" zelf ook niet op het scherm wordt getoond, wordt "@echo off" gebruikt.
Waar we eerste teveel informatie hadden, kan het nu zijn dat er te weinig informatie is. Met het echo-commando kan ook commentaar op het scherm geschreven worden. In onderstaande betekent "echo." een lege regel (merk op dat er geen spatie tussen echo en punt staat).
@echo off
REM Het onderstaande bestand kan je gebruiken om een reservekopie te maken
REM van enkele vitale bestanden.
echo Aanmaken backup-map
mkdir c:\backup
echo.
echo Start van het back-uppen
copy c:\boot.* c:\backup
copy c:\windows\win.ini c:\backup
copy c:\windows\system.ini c:\backup
copy c:\windows\system32\config\*.sav c:\backup
Als ergens in een batchbestand toch terug die uitvoer op het scherm nodig is, kan "echo on" gebruikt worden. Alle opdrachtregels die daar op volgend, worden dan wel op het scherm getoond.
Variabelen
[bewerken]Als we in bovenstaand voorbeeld de back-upmap willen wijzigen, dan moeten we dat op vier plaatsen doen. Dat kan efficiënter door variabelen te gebruiken. Een gegevenstype hoeft niet te worden opgegeven, enkel een variabelenaam en een waarde.
set BACMAP=c:\backup
Om de variabelenaam te gebruiken, kunnen we niet zomaar BACMAP gebruiken, omdat er dan zal gezocht worden naar een map met als naam BACMAP. Om aan te geven dat we de variabele BACMAP bedoelen, wordt deze variabelenaam bij gebruik "omsingeld" door %-tekens. Ons voorbeeld wordt dan:
@echo off
REM Het onderstaande bestand kan je gebruiken om een reservekopie te maken
REM van enkele vitale bestanden.
set BACMAP="c:\backup"
echo Aanmaken backup-map
mkdir %BACMAP%
echo.
echo Start van het back-uppen
copy c:\boot.* %BACMAP%
copy c:\windows\win.ini %BACMAP%
copy c:\windows\system.ini %BACMAP%
copy c:\windows\system32\config\*.sav %BACMAP%
Omgevingsvariabelen
[bewerken]Je doet er ook altijd goed aan om je batchbestand zo "portable" als mogelijk te schrijven. De situatie op jouw eigen pc, kan namelijk anders zijn dan de pc('s) waarop het batchbestand moet worden uitgevoerd. Hiervoor zijn omgevingsvariabelen bedacht. Zo zal de omgevingsvariabele SystemRoot
altijd verwijzen naar de Windows-map, wat bij de meeste pc's c:\windows
. De manier waarom cmd en PowerShell werken verschilt wel!
C:\Documents and Settings\Administrator>echo %SystemRoot%
C:\WINDOWS
C:\Documents and Settings\Administrator>
PS C:\Users\Bill>$env:SystemRoot
C:\WINDOWS
PS C:\Users\Bill>
Om een volledige lijst te verkrijgen kan het commando set (zonder parameters) worden opgegeven.
C:\Documents and Settings\Administrator>set
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\Mattias\Application Data
CLIENTNAME=Console
CommonProgramFiles=C:\Program Files\Common Files
...etc...
We merken dat we met de omgevingsvariabelen SystemDrive en SystemRoot ons batchbestand meer portable kunnen maken:
@echo off
REM Het onderstaande bestand kan je gebruiken om een reservekopie te maken
REM van enkele vitale bestanden.
set BACMAP=%SystemDrive%"\backup"
echo Aanmaken backup-map
mkdir %BACMAP%
echo.
echo Start van het back-uppen
copy %SystemDrive%\boot.* %BACMAP%
copy %SystemRoot%\win.ini %BACMAP%
copy %SystemRoot%\system.ini %BACMAP%
copy %SystemRoot%\system32\config\*.sav %BACMAP%
Parameters
[bewerken]In sommige situaties wil je niet zomaar je batchbestand klakkeloos uitvoeren, maar wil je nog invloed kunnen uitoefenen. In ons back-up voorbeeld kan het zijn dat je als eindgebruiker zelf de back-upmap wil kunnen opgeven. Dan kan je natuurlijk steeds het batchbestand aanpassen, maar dit is nogal omslachtig. Handiger zou zijn:
C:\Documents and Settings\Administrator>backup.bat "C:\back-up map"
Om een parameter aan te spreken moet je het %-teken gebruiken en daarna een cijfer opgeven. Zo verwijst %0 naar de naam van het batchbestand (bv. backup.bat), %1 naar de eerste parameter (bv. C:\back-up map), %2 naar de tweede parameter,... Let op de aanhalingstekens in bovenstaand voorbeeld, zonder deze zou %1=c:\back-up en %2=map!
Dan wordt ons voorbeeld:
@echo off
REM Het onderstaande bestand kan je gebruiken om een reservekopie te maken
REM van enkele vitale bestanden.
set BACMAP=%1
echo Aanmaken backup-map
mkdir %BACMAP%
echo.
echo Start van het back-uppen
copy %SystemDrive%\boot.* %BACMAP%
copy %SystemRoot%\win.ini %BACMAP%
copy %SystemRoot%\system.ini %BACMAP%
copy %SystemRoot%\system32\config\*.sav %BACMAP%
Pause
[bewerken]De uitvoering van het batchbestand kan met "pause" worden onderbroken. Dan verschijnt de boodschap "Druk op een toets om door te gaan...". Na het drukken op een willekeurige toets, wordt de uitvoering van het batchbestand vervolgd.
@echo off
REM Het onderstaande bestand kan je gebruiken om een reservekopie te maken
REM van enkele vitale bestanden.
set BACMAP=%1
echo De back-up zal worden aangemaakt in %BACMAP%
pause
echo Aanmaken backup-map
mkdir %BACMAP%
echo.
echo Start van het back-uppen
copy %SystemDrive%\boot.* %BACMAP%
copy %SystemRoot%\win.ini %BACMAP%
copy %SystemRoot%\system.ini %BACMAP%
copy %SystemRoot%\system32\config\*.sav %BACMAP%
Toepassingen
[bewerken]Een zoektocht naar alle bat-bestanden op je pc leert dat batchbestanden soms meer worden gebruikt, dan je in eerste instantie zou denken. Enkele voorbeelden:
- Areca Backup is een back-upprogramma dat zelf geen scheduler aan boord heeft om back-ups te plannen. Het biedt wel een wizard aan, waar batchbestanden automatisch gegenereerd kunnen worden, die Areca aanroepen. Deze batchbestanden kunnen dan gepland worden met de Windows takenplanner, zodat deze automatisch worden uitgevoerd.
- Als een gebruiker zich aanmeldt in een Windows-domein, kan het noodzakelijk zijn om bepaalde routines te laten plaatsvinden. Hiervoor kan een batchbestand aangeroepen worden.
- Als je veel en vaak software moet installeren op verschillende computers, dan is het vervelend dat je dat één-per-één moet doen en altijd die wizard moet doorlopen. Sommige installatieprogramma's bieden echter schakelopties aan, waarmee een silent installatie mogelijk is. Met de schakelopties kan je instellingen doen (bv. waar het programma moet worden geïnstalleerd), zonder dat een wizard nodig is. Door dit op te nemen in een batchbestand, kan je zo een geautomatiseerde silent install doen van meerdere programma's.
Voor meer geavanceerde toepassingen zou het kunnen dat de gewone opdrachtprompt ontoereikend is. In dat geval is het de moeite om de mogelijkheden van Windows PowerShell te bekijken: dit is een objectgeörienteerde shell- en scripttaal voor Microsoft Windows. Hier hebben shell-scripts een ps1-extensie t.o.v. de bat-bestanden bij de gewone opdrachtprompt.