Categorieën
Windows-DOS

Sjabloon batch file

Een sjabloon als uitgangspunt voor te maken batch files.

Doel

We maken een batch file die als sjabloon kan worden gebruikt.

Aanleiding/overwegingen

Telkens bedacht ik dezelfde dingen weer net even anders bij het maken van nieuwe batch files. Het is handig om een vaste basis te hebben. Dat zorgt ervoor dat je niet telkens dezelfde basis taken hoeft in te vullen en een standaardisatie hebt van hoe je je scripts opbouwt. Standaard is logging ingebouwd en wordt de huidige taak op de titelbalk getoond. Dat is vooral handig bij taken met veel output naar het scherm geven en die veel tijd in beslag nemen

Voorbereiding

  • Ik plaats de voorbeeld batchfiles standaard in C:\ICTWebUtils\Batch
  • Voor een nieuwe taak maak je een kopie van de Template.bat file naar een nieuw bestand voor de taak die uitgevoerd moet worden.
  • Download het bestand: Template.txt en hernoem de extensie .txt tot .bat.

Uitvoering

  • Voor betere leesbaarheid is het venster hieronder te vergroten. Selecteer de rechter onder hoek en versleep deze om het breder te maken.
  • Ik documenteer al mijn bestanden met steenkolen Engels.
  • Verdere uitleg en tips worden onder het venster gegeven met verwijzing naar de regelnummers.
@Echo off
::: Template batchfile with some default functionality
::: Jan Peppink - https://ict.peppink.nl
::: Prepare  ::::::::::::::::::::::::::::::::::::::::::::::
::: %~0   - Remove any surrounding quotes (")
::: %~f0  - expands to fully qualIfied pathname with filename.
::: %~d0  - expands to drive letter
::: %~p0  - expands to path
::: %~n0  - expands to filname without extension
 Set ThisBatch=%~0
 Set LogFile=%~d0%~p0%~n0.log
 Set OldLogFile=%~d0%~p0%~n0-old.log 
 If exist "%LogFile%" Echo Save %LogFile% to %OldLogFile%
 If exist "%LogFile%" Move /y "%LogFile%" "%OldLogFile%" >nul

::: Start new empty logfile :::::::::::::::::::::::::::::::
 Echo %date% %time:~0,5% ::: Start %ThisBatch%
 Echo %date% %time:~0,5% ::: Start %ThisBatch% > %LogFile%

::: Set Environment :::::::::::::::::::::::::::::::::::::::
 Set RoboCmd="C:\Windows\System32\RoboCopy"

:::: Color First Background Second ForeGround
::: 0 = Black	 	8 = Gray
::: 1 = Blue		9 = Light Blue
::: 2 = Green		A = Light Green
::: 3 = Aqua		B = Light Aqua
::: 4 = Red 		C = Light Red
::: 5 = Purple	 	D = Light Purple
::: 6 = Yellow		E = Light Yellow
::: 7 = White		F = Bright White
 Set MyColor=0E
 Set MyWarningColor=CE
 Color %MyColor%

::: Start to do something :::::::::::::::::::::::::::::::::
 Title %date% %time:~0,5% MyJob
 Echo %date% %time:~0,5% ::: Start MyJob
 Echo %date% %time:~0,5% ::: Start MyJob >> %LogFile%

::: Your code comes here ::::::::::::::::::::::::::::::::::


::: In case of an error continue to Error. Else Goto End
 If %ERRORLEVEL% EQU 0 Goto End

::: We have a problem :::::::::::::::::::::::::::::::::::::
:Error
 Color %MyWarningColor%
 Echo %date% %time:~0,5% ::: Error detected in %ThisBatch%
 Echo %date% %time:~0,5% ::: Error detected in %ThisBatch% >> %LogFile%
Goto Quit

::: We are done :::::::::::::::::::::::::::::::::::::::::::
:End
 Echo %date% %time:~0,5% ::: Ready is Case for %ThisBatch%
 Echo %date% %time:~0,5% ::: Ready is Case for %ThisBatch% >> %LogFile%

:Quit
 Echo Hit any key to quit . . . & pause >nul
::: That's All ::::::::::::::::::::::::::::::::::::::::::::

Toelichting bij de regels

  • 01: @Echo off stelt in dat de gegeven commando’s niet getoond worden bij de uitvoer.
  • 02-03: Geeft doel en maker van het bestand.
  • 04: Start gedeelte waarin de voorbereidingen worden getroffen.
  • 05-09: ::: 3 maal dubbele punt start commentaar regels. Hier wordt uitleg gegeven over hoe %0 (is huidige bestandsnaam “C:\ICTWebUtils\Batch\Template.bat”) gemanipuleerd kan worden.
  • 10: Variabele ThisBatch wordt aangemaakt. Daarin de naam van het bestand dat gestart is door dubbelklik op de bestandsnaam om het uit te voeren. Met %~0 wordt het van de dubbele aanhalingstekens ontdaan.
  • 11: Gezien bovenstaande uitleg, wordt hier de variabele LogFile gezet en gevuld met achtereenvolgens drive letter \pad naar directory\ bestandsnaam (zonder extensie .bat, die wordt vervangen door .log) resulterend in C:\ICTWebUtils\Batch\Template.log.
  • 12: Op dezelfde wijze wordt de naam voor de C:\ICTWebUtils\Batch\Template-old.log gezet.
  • 13 Als de Logfile bestaat tonen we (Echo) op scherm wat we gaan doen.
  • 14: Als C:\ICTWebUtils\Batch\Template.log bestaat, wordt deze verplaatst naar C:\ICTWebUtils\Batch\Template-old.log. De toevoeging >nul zorgt ervoor dat output van dit commando niet wordt getoond.
  • 16: Een nieuw gedeelte wordt gestart, waarin logfile wordt voorbereid.
  • 17: We tonen op scherm datum en tijd
  • 18: We melden dat ook in de nieuwe logfile. NB. de enkele > geeft aan dat het navolgende bestand indien aanwezig wordt overschreven.
  • 20-21: Een nieuw gedeelte wordt gestart waarin verder te gebruiken variabelen worden gezet. Dat houdt het overzichtelijk bij elkaar. RoboCmd heb ik hier standaard in staan, omdat ik nogal wat kopieer acties via het commando RoboCopy uitvoer.
  • 23-31: Voorbeelden voor de code die gebruikt kan worden om voor en achtergrond kleur in te stellen.
  • 32-34 Stel de variabele Mycolor in als standaard kleur (Geel op Zwart) en stel MyWarningColor in voor waarschuwingen (Geel op licht Rood). Vervolgens activeert de laatste regel de standaard kleur.
  • 36: Een nieuw gedeelte wordt gestart waarin we eigenlijk pas echt wat van plan zijn om te doen.
  • 37: Op de Titelbalk van het DOS venster, wordt de tijd getoond met daarachter wat de batchfile sinds die tijd aan het uitvoeren is. In dit geval “MyJob”. Zie ook in bovenstaand plaatje.
  • 38: Dit wordt ook op het scherm getoond, maar scrolt uit beeld indien het gegeven commando veel output naar het scherm geeft.
  • 39: En het wordt ook naar de LogFile geschreven en via de dubbele >> hieraan toegevoegd.
  • 41: Een nieuw gedeelte wordt gestart, waarin de code moet komen van de uit te voeren taak zoals bijvoorbeeld het maken van een back-up, het kopiëren van bestanden. In het voorbeeld doet het bestand feitelijk niets dan het één en ander aan tekst op het scherm en in de logfile tonen.
  • 44: Een nieuw gedeelte wordt gestart waarin eventuele error kan worden afgevangen.
  • 45: Indien een opdracht eindigt met ERRORLEVEL gelijk aan 0 is alles goed verlopen en springen we met de code GoTo naar het label :End op regel 54. Merk op dat het label begint met een enkele dubbele punt.
    Indien ERRORLEVEL groter dan 0 is, dan is er iets mis gegaan, dat afhankelijk van het soort commando al of niet gespecificeerd kan zijn. Dan vindt de sprong naar End niet plaats en komen we vanzelf bij het label :Error.
  • 47-52 Onder het label Error wordt eerst de kleur gewijzigd in onze waarschuwing kleur en vervolgens getoond en gelogd dat er iets misgegaan is.
  • 54-57: Een nieuw gedeelte wordt gestart waarin we de taken met vermelding van de eindtijd afronden.
  • 59-60: Tot slot wordt met het pause commando gewacht tot een toets wordt ingedrukt. Anders zou het DOS venster wanneer het door dubbelklik in de Windows Verkenner is gestart aan het eind vanzelf sluiten.
    >nul zorgt ervoor dat de standaard melding “Press any key to continue . . .” niet wordt getoond. We zijn immers klaar en er wordt niets meer gecontinueerd. In plaats daarvan komt eerst de tekst “Hit any key to quit . . .” en wordt na het & teken vervolgens het pause commando uitgevoerd.
  • 61: ::::: That’s All ::::::::::::::::::::::::::::::::::::::::

Resultaat

Schermuitvoer van Template.bat

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *