User Tools

Site Tools


os:windows:batch

Batch

Pseudo-Funktionen

Aufbau

Mit Batch lässt sich eine primitive Form einer Funktion nachstellen. Dies sieht wie folgt aus:

@echo off

call :r
call :p %read%

pause
goto:eof

:p
echo %1
goto:eof

:r
set /p read=Eingabe: 
goto:eof

Der Ablauf:

  1. call wird ausgeführt, zu Sprungpunkt :r
  2. :r liest wert von Tastatur ein uns speichert ihn in in die Variable “read”.
  3. :r wird beendet mit goto:eof
  4. call wird ausgeführt, zu Sprungpunkt :p, übergeben wird die Variable read
  5. das erste Argument, welche dem Sprungpunkt über die Call-Funktion mitgegeben wird, wird ausgegeben
  6. :p wird beendet mit goto:eof
  7. pause wird ausgeführt
  8. batch-file wird beendet

Beispiele

sleep

Beschreibung:

Mit sleep wird im Script eine Pause angelegt. Als Parameter wird eine Zahl benötigt, welche der Dauer der Pause entspricht.

Funktion:

goto:eof
:sleep
ping -n 1 -w %1000 192.0.2.0 >nul 2>&1
goto:eof

Anwendung:

call:sleep 5

IP-Adressse: RFC5737

counter

Beschreibung:

Will man innerhalb einer for-Schleife Zahlen zusammen Zählen, ist dies nur über eine Funktion möglich, da die Veränderung der Variable nur innerhalb der Schleife übernommen wird.

Funktion:

goto:eof
:Counter
set /a counter=%counter% + %1
goto:eof

Anwendung:

set counter=0
for /l %%a in (1,1,5) do call:Counter %%a

echo.%counter%

GetFolderSize

Beschreibung:

Mit hauseigenen Tools lässt sich die Grösse eines Folder mit cmd.exe nicht ermitteln, es muss auf externe Tools zurückgegriffen werden, wie z.B. du.exe (Sysinternals), VBS, PowerShell. In der Beispiel-Funktion wird PowerShell verwendet.

Funktion:

goto:eof
:GetFolderSize
powershell "\"{0:N0}\" -f ((Get-ChildItem -Recurse -Force %1 | Measure-Object -Property Length -Sum).Sum / 1MB)"
goto:eof

Anwendung:

call:GetFolderSize C:\Windows\Temp

ExecPSQL

Beschreibung:

Werden in einem Batch-File Daten aus einer PostgreSQL-Datenbank benötigt, kann der Funktion ExecPSQL das gewünschte Statement übergeben werden und diese liefert den Wert zurück.

Funktion:

goto:eof
:ExecPSQL
psql -h %SRV% -p %PRT% -U %USR% -d %DB% -A -t -c %1
goto:eof

Anwendung: Vor dem Aufruf der Funktion müssen die Benötigten Variablen der DB gesetzt werden. Zudem wird die Path-Variable um den Pfad zum psql-Binary ergänzt (für x86 und AMD64).

set SRV=localhost
set PRT=5432
set USR=DBUser
set PW=DBPassword
set DB=DBName
set PGPASSWORD=%PW%

where psql.exe >nul 2>&1 || set PATH=%PATH%;C:\Program Files (x86)\PostgreSQL\bin;C:\Program Files\PostgreSQL\bin

call:ExecPSQL "SELECT COUNT(procpid) FROM pg_stat_activity"

Tipps

Zugriff auf externe Tools

Wird in einem Batch-File ein externes Tool verwendet, muss dieses - sofern nicht über die PATH-Variable erreichbar - über den direkten Pfad aufgerufen werden. Es gibt verschiedene Gründe, warum das Anpassen der PATH-Variable bevorzugt werden sollte.32-Bit-Software, welche sich in das ProgramFiles-Verzeichnis installiert, liegt bei 32-Bit-Systemen unter C:\Program Files und bei 64-Bit-Systemen unter C:\Program Files (x86). Fügt man nun beide Pfade - auch wenn das eine Verzeichnis existiert - der Variable hinzu, entfällt das Auswerten der OS-Architektur.

wzzip.exe (WinZIP CLI):

where wzzip.exe >nul 2>&1 || set PATH=%PATH%;C:\Program Files (x86)\Winzip;C:\Program Files\Winzip

pg_dump.exe (PostgreSQL Dump):

where pg_dump.exe >nul 2>&1 || set PATH=%PATH%;C:\Program Files (x86)\PostgreSQL\bin;C:\Program Files\PostgreSQL\bin
NAS Netzlaufwerk Sortierung mit dir

Wird ein Share eines NAS, wie zum Beispiel Q-NAP TS-210 als Netzlaufwerk gemappt, bemerkt man schnell, dass beim Ausführen von dir eine willkürliche Sortierung verwendet wird:

M:\Betontod\Schwarzes Blut>dir
 Volume in drive M is MP3
 Volume Serial Number is BD65-0021

 Directory of M:\Betontod\Schwarzes Blut

09.12.2009  14:49    <DIR>          .
01.03.2010  21:42    <DIR>          ..
21.03.2010  12:26         3'644'186 09-Betontod - Vielleicht wird alles gut.mp3
21.03.2010  12:26         4'108'174 10-Betontod - Viva Punk!.mp3
21.03.2010  12:26         3'797'211 11-Betontod - Wind.mp3
21.03.2010  12:26         3'773'773 01-Betontod - Generation X.mp3
21.03.2010  12:26         6'164'432 07-Betontod - Kinder des Zorns.mp3
21.03.2010  12:26         2'546'439 08-Betontod - Im Sumpf des Verbrechens.mp3
21.03.2010  12:26         3'080'891 02-Betontod - Schwarzes Blut.mp3
21.03.2010  12:26         2'944'279 12-Betontod - All die Jahre.mp3
21.03.2010  12:26         3'870'026 06-Betontod - Glück auf.mp3
21.03.2010  12:26         3'132'548 05-Betontod - Zweifel.mp3
21.03.2010  12:26         3'229'667 03-Betontod - Feuer Frei!.mp3
21.03.2010  12:26         2'936'122 04-Betontod - Stillstand.mp3
              12 File(s)     43'227'748 bytes
               2 Dir(s)  174'093'758'464 bytes free

Mit dem Parameter /o wird eine Sortierung erzwungen. Will man jedoch nicht bei jedem dir-Command diesen Parameter anhängen, kann man diesen in der dircmd-Variable definieren:

set dircmd=/o

In folgendem Beispiel wird nochmals der Befehl dir ausgeführt, jedoch mit der zuvor definierten dircmd-Variable:

M:\Betontod\Schwarzes Blut>dir
 Volume in drive M is MP3
 Volume Serial Number is BD65-0021

 Directory of M:\Betontod\Schwarzes Blut

09.12.2009  14:49    <DIR>          .
01.03.2010  21:42    <DIR>          ..
21.03.2010  12:26         3'773'773 01-Betontod - Generation X.mp3
21.03.2010  12:26         3'080'891 02-Betontod - Schwarzes Blut.mp3
21.03.2010  12:26         3'229'667 03-Betontod - Feuer Frei!.mp3
21.03.2010  12:26         2'936'122 04-Betontod - Stillstand.mp3
21.03.2010  12:26         3'132'548 05-Betontod - Zweifel.mp3
21.03.2010  12:26         3'870'026 06-Betontod - Glück auf.mp3
21.03.2010  12:26         6'164'432 07-Betontod - Kinder des Zorns.mp3
21.03.2010  12:26         2'546'439 08-Betontod - Im Sumpf des Verbrechens.mp3
21.03.2010  12:26         3'644'186 09-Betontod - Vielleicht wird alles gut.mp3
21.03.2010  12:26         4'108'174 10-Betontod - Viva Punk!.mp3
21.03.2010  12:26         3'797'211 11-Betontod - Wind.mp3
21.03.2010  12:26         2'944'279 12-Betontod - All die Jahre.mp3
              12 File(s)     43'227'748 bytes
               2 Dir(s)  174'093'758'464 bytes free
os/windows/batch.txt · Last modified: 2016-05-25 08:54 by root