faq:batch [Sven-Of-Nine]

Batch Funktionen

Umfangreiche Funktionssammlung

@SET MYSELF=%CD%\%0
@CALL :CONSTANTS

@REM ########################################################
@REM #
@REM # Hier das eigene Programm
@REM #
@REM ########################################################


@IF (%1) EQU (UNITTEST) @CALL :UNITTEST
@IF (%1) EQU (FUZZERTEST) @CALL :FUZZERTEST
@GOTO :EOF
REM ########################################################
REM #
REM # Funktionssammlung für Batchdateien
REM #
REM # (c) 2008 Borg@Sven-of-Nine.de
REM #
REM ########################################################
REM # :CONSTANTS
REM # setzt die gängigsten Konstanten
REM #
REM # :STRLEFT result input size
REM # Gibt den linken Teil von Input zurück
REM # :STRRIGHT result input size
REM # Gibt den rechten Teil von Input zurück
REM # :STRMID result input offset size
REM # Schneidet einen Teil aus input heraus
REM # :STRLEN result input
REM # gibt die Länge eines Strings zurück
REM # :STRADD result input tail
REM # Fügt tail hinzu, wenn es fehlt
REM # :STRSTRIP result input tail
REM # Fügt tail hinzu, wenn es fehlt
REM # :STRREPLACE result input needle haystack
REM # Ersetzt einzelne Zeichen in einem String
REM # :STRTRIM result input
REM # Entfernt Space vom Anfang und Ende
REM # :STRUP result input
REM # Alles in Großschrift
REM # :STRLOW result input
REM # Alles in Kleinschrift
REM # :STRLOW result input
REM # Alles in Kleinschrift
REM # :INPUT result size
REM # Holt Eingaben vom Benutzer
REM #
REM # :GETDRIVE result input
REM # gibt den Laufwerksbuchstaben eines Pfades zurück
REM # :GETDIR result input
REM # gibt das Verzeichnis eines Pfades zurück
REM # :GETFILE result input
REM # gibt die Datei eines Pfades zurück
REM # :GETDRIVENAME result driveletter
REM # gibt den namen eines Laufwerkes zurück
REM # :ISDIR result pfad
REM # Prüft ob der Pfad ein Verzeichnis ist [%TRUE%/%FALSE%]
REM #
REM # :SHELL DLL Command
REM # Führt den RunDLL-Befehl mit der DLL und dem CMD aus
REM # Einige Beispiele :
REM # Den Bildschirmschoner-Dialog öffnen
REM # CALL :SHELL %MYSYS%\Shell32.DLL Control_RunDLL desk.cpl,,1
REM # CALL :SHELL %SHELL32% ShellAboutA
REM # Shell32,Control_RunDLL - Systemsteuerung
REM # Shell32,Control_RunDLL desk.cpl - Einstellung "Anzeige" aufrufen
REM # Shell32,Control_RunDLL main.cpl,@0 - Einstellung "Maus" aufrufen
REM # Shell32,Control_RunDLL main.cpl,@1 - Einstellung "Tastatur" aufrufen
REM # Shell32,Control_RunDLL main.cpl,@2 - Einstellung "Drucker" aufrufen
REM # Shell32,Control_RunDLL main.cpl,@3 - Einstellung "Schriftarten" aufrufen
REM # Shell32,Control_RunDLL main.cpl,@4 - Einstellung "Energie" aufrufen
REM # Shell32,Control_RunDLL appwiz.cpl,,0 - Software (Entfernen/Hinzufügen neuer Programme)
REM # Shell32,Control_RunDLL desk.cpl,,0 - Eigenschaften von Anzeige (Hintergrund)
REM # Shell32,Control_RunDLL desk.cpl,,1 - Eigenschaften von Anzeige (Bildschirmschoner)
REM # Shell32,Control_RunDLL desk.cpl,,2 - Eigenschaften von Anzeige (Darstellung)
REM # Shell32,Control_RunDLL intl.cpl,,0 - Ländereinstellungen (Allgemein)
REM # Shell32,Control_RunDLL mmsys.cpl,,0 - Eigenschaften von Sounds und Multimedia (Sounds)
REM # Shell32,Control_RunDLL mmsys.cpl,,1 - Eigenschaften von Sounds und Multimedia (Audio)
REM # Shell32,Control_RunDLL modem.cpl - Telefon- und Modemoptionen (Modems)
REM # Shell32,Control_RunDLL sysdm.cpl,,0 - Systemeigenschaften (Allgemein)
REM # Shell32,Control_RunDLL timedate.cpl,,0 - Eigenschaften von Datum/Uhrzeit (Datum und Uhrzeit)
REM # Shell32,OpenAs_RunDLL - Dialogfenster "Öffnen mit" aufrufen
REM # Shell32,SHFormatDrive - Dialogfenster "Diskette formatieren" aufrufen
REM # Shell32,ShellAboutA - Infobox (Nutzer, Arbeitsspeicher etc - eine weitere vordefinierte MsgBox)
REM # Shell32,Control_RunDLL hotplug.dll - Hardwareauswerfen-Dialog
REM # User32,LockWorkStation - Die Arbeitsstation sperren
REM # devmgr,DeviceManager_Execute - Den Gerätemanager starten
REM # RUNDLL32 DESK.CPL,InstallScreenSaver C:\WINNT\SYSTEM32\Default.scr - Einen Bildschirmschoner installieren
REM #
REM #
REM # :ADDLOG text [logfile]
REM # Schreibt einen Logeintrag in logfile
REM # 
REM #
REM # :FILEEXIST result datei
REM # Prüft ob eine Datei existiert result=%TRUE%|%FALSE%
REM #
REM # :RND result [min max]
REM # gibt eine Zufallszahl zurück
REM # :RNDWORD result size
REM # gibt einen Zufallsstring aus Buchstaben zurück
REM # :RNDDIGIT result size
REM # gibt einen Zufallsstring aus Zahlen zurück
REM #
REM # :PRINTHTML file
REM # Druckt eine HTML-Datei aus
REM #
REM # :PING result URL/IP
REM # Prüft, ob ein Rechner im Netzwerk vorhanden ist
REM # Rückgabe ist entweder %TRUE% oder %FALSE%
REM ########################################################
:CONSTANTS

@REM Globale Einstellungen
@SET DEBUG=0

@REM Booleans
@SET YES=1
@SET NO=0
@SET TRUE=%YES%
@SET FALSE=%NO%
@SET ON=%YES%
@SET OFF=%NO%

@REM Strings
@REM Date und Time
@SET MYDATE=%date:~-10%
@SET DAY=%date:~3,2%
@SET MONTH=%date:~6,2%
@SET YEAR=%date:~-4%

@SET SECONDS=%time:~7,2%
@SET MINUTES=%time:~3,2%
@SET HOURS=%time:~1,2%
@SET MYTIME=%HOURS%:%MINUTES%:%SECONDS%

@REM Disk and Drive
@SET MYPATH=%CD%
@SET MYDRIVE=%CD:~0,2%
@SET MYDIR=%CD:~2,8192%
@SET MYWIN=%WINDIR%
@SET MYROOT=%SystemRoot%
@SET MYSYS=%MYWIN%\system32
@SET MYSYSDRIVE=%SystemDrive%
@SET MYPROG=%ProgramFiles%
@SET MYTEMP=%TEMP%
@SET MYCMD=%ComSpec%

@REM Pfade
@SET MYLOG=%MYSELF%_%MYDATE%.log

@REM User
@SET MYUSER=%USERNAME%
@SET MYDOMAIN=%USERDOMAIN%
@SET MYPROFILE=%USERPROFILE%

@REM System
@SET HTMLDLL=%MYSYS%\mshtml.dll
@SET RUNDLL=%MYSYS%\rundll32.exe
@SET SHELL32=%MYSYS%\shell32.dll
@SET USER32=%MYSYS%\user32.dll


@REM Fehlzuordnungen löschen
@IF NOT EXIST %HTMLDLL% SET HTMLDLL=
@IF NOT EXIST %RUNDLL% SET RUNDLL=
@IF NOT EXIST %SHELL32% SET SHELL32=
@IF NOT EXIST %USER32% SET USER32=



@REM Im Debugmode geben wir alle Konstanten aus
@IF (%DEBUG%) NEQ (%TRUE%) GOTO :EOF
@echo.
@CALL :LINEFEED
@echo ------------------------
@echo YES : %YES%
@echo NO : %NO%
@echo TRUE : %TRUE%
@echo FALSE : %FALSE%
@echo ON : %ON%
@CALL :LINEFEED
@echo Time / Date
@echo ------------------------
@echo MYDATE : %MYDATE%
@echo DAY : %DAY%
@echo MONTH : %MONTH%
@echo YEAR : %YEAR%
@echo MYTIME : %MYTIME%
@echo SECONDS : %SECONDS%
@echo MINUTES : %MINUTES%
@echo HOURS : %HOUR%
@CALL :LINEFEED
@echo Disk and Drive
@echo ------------------------
@echo MYSELF : %MYSELF%
@echo MYROOT : %MYROOT%
@echo MYPATH : %MYPATH%
@echo MYDRIVE : %MYDRIVE%
@echo MYDIR : %MYDIR%
@echo MYWIN : %MYWIN%
@echo MYSYS : %MYSYS%
@echo MYPROG : %MYPROG%
@echo MYTEMP : %MYTEMP%
@echo MYCMD : %MYCMD%
@echo User
@CALL :LINEFEED
@echo ------------------------
@echo MYUSER : %MYUSER%
@echo MYDOMAIN : %MYDOMAIN%
@echo MYPROFILE : %MYPROFILE%
@CALL :LINEFEED
@echo System
@echo ------------------------
@ECHO HTMLDLL : %HTMLDLL%
@ECHO RUNDLL : %RUNDLL%
@ECHO SHELL32 : %SHELL32%
@ECHO USER32 : %USER32%
@GOTO :EOF

@REM ########################################################
@REM #
@REM # Test der Funktionen
@REM #
@REM # Die Funktionen führen einige einfache Zusicherungstests
@REM # durch. Es stehen drei Funktionen zur verfügung
@REM # _TESTCOMP ErwarteterWert Funktionsname [parameter...]
@REM # Vergleich die Rückgabe der Funktion mit dem erwarteten
@REM # Wert
@REM # _TESTSIZE ErwarteterWert Funktionsname [parameter...]
@REM # Vergleich der Länge der Rückgabe der Funktion mit dem erwarteten
@REM # Wert
@REM # _TESTRANGE ErwarteterWertMin ErwarteterWertMax Funktionsname [parameter...]
@REM # Vergleich der Rückgabe der Funktion mit dem erwarteten
@REM # Bereich (Nur für Zahlen)
@REM #
@REM ########################################################
:UNITTEST
@CALL :RNDWORD _TESTFILE 20
@ECHO 1234567890 > %_TESTFILE%

@ECHO ========= Strings =========
@CALL :_TESTCOMP abc STRLEFT "abcdef abcdef" 3
@CALL :_TESTCOMP abcdef STRLEFT "abcdef abcdef" 6

@CALL :_TESTCOMP def STRRIGHT "abcdef abcdef" 3
@CALL :_TESTCOMP abcdef STRRIGHT "abcdef abcdef" 6

@CALL :_TESTCOMP def STRMID "abcdef abcdef" 3 3
@CALL :_TESTCOMP abc STRMID "abcdef abcdef" 0 3
@CALL :_TESTCOMP "abc " STRMID "abc def abcdef" 0 4
@CALL :_TESTCOMP abcdef STRMID "abcdef abcdef" 0 6
@CALL :_TESTCOMP bcde STRMID "abcdef abcdef" 1 4
@CALL :_TESTCOMP d STRMID "abcdef abcdef" 3 1

@CALL :_TESTCOMP 0 STRLEN ""
@CALL :_TESTCOMP 1 STRLEN " "
@CALL :_TESTCOMP 6 STRLEN abcdef
@CALL :_TESTCOMP 7 STRLEN "abc def"

@CALL :_TESTCOMP abcdef STRADD abc def
@CALL :_TESTCOMP "ab cdef" STRADD "ab c" "def"
@CALL :_TESTCOMP abcdef STRADD abcdef def
@CALL :_TESTCOMP "abc def" STRADD "abc def" def

@CALL :_TESTCOMP "abc " STRSTRIP "abc def" def
@CALL :_TESTCOMP "abc" STRSTRIP "abc " " "
@CALL :_TESTCOMP "abc" STRSTRIP "abc" "d"

@CALL :_TESTCOMP "abcdef" STRREPLACE abcdef x a
@CALL :_TESTCOMP "abxdef" STRREPLACE abcdef c x
@CALL :_TESTCOMP "xxxxxx" STRREPLACE aaaaaa a x

@CALL :_TESTCOMP "abcdef" STRTRIM "abcdef"
@CALL :_TESTCOMP "abcdef" STRTRIM " abcdef "
@CALL :_TESTCOMP "abc def" STRTRIM " abc def "

@CALL :_TESTCOMP "ABCDEFGHIJKLMNOPQRSTUVWXYZ" STRUP "abcdefghijklmnopqrstuvwxyz"
@CALL :_TESTCOMP " A B C D E F G H I J K LMNOPQRSTUVWXYZ" STRUP " a b c d e f g h i j k lmnopqrstuvwxyz"
@CALL :_TESTCOMP "ABC DEF " STRUP "abc def "
@CALL :_TESTCOMP "1234567" STRUP "1234567"

@CALL :_TESTCOMP "abcdefghijklmnopqrstuvwxyz" STRDOWN "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
@CALL :_TESTCOMP " a b c d e f g h i j k lmnopqrstuvwxyz" STRDOWN " A B C D E F G H I J K LMNOPQRSTUVWXYZ"
@CALL :_TESTCOMP "abc def " STRDOWN "ABC DEF "
@CALL :_TESTCOMP "1234567" STRDOWN "1234567"

@CALL :_TESTCOMP "-----" STRFILL - 5
@CALL :_TESTCOMP "ababab" STRFILL ab 3

@CALL :_TESTCOMP "---abc" STRLPAD "abc" - 6
@CALL :_TESTCOMP "abcabc" STRLPAD "abcabc" - 6
@CALL :_TESTCOMP "abc" STRLPAD "abc" - 0
@CALL :_TESTCOMP "abc---" STRRPAD "abc" - 6
@CALL :_TESTCOMP "abcabc" STRRPAD "abcabc" - 6
@CALL :_TESTCOMP "abc" STRRPAD "abc" - 0

@ECHO ========= Pathfunctions =========
@CALL :_TESTCOMP c: GETDRIVE c:\test\datei.log
@CALL :_TESTCOMP \test\ GETDIR c:\test\datei.log
@CALL :_TESTCOMP datei.log GETFILE c:\test\datei.log
@CALL :_TESTCOMP %TRUE% ISDIR %MYWIN%
@CALL :_TESTCOMP %FALSE% ISDIR %MYWIN%\win.ini
@CALL :_TESTCOMP 13 GETSIZE %_TESTFILE%
@CALL :_TESTCOMP %MYDATE% GETDATE %_TESTFILE%

@ECHO ========= Random =========
@CALL :_TESTSIZE 5 RNDWORD 5
@CALL :_TESTSIZE 32 RNDWORD 32
@CALL :_TESTSIZE 5 RNDDIGIT 5
@CALL :_TESTSIZE 32 RNDDIGIT 32
@CALL :_TESTRANGE 5 10 RND 5 10
@CALL :_TESTRANGE 0 30000 RND

@DEL %_TESTFILE%

@GOTO :EOF
@REM ########################################################
@REM Hier werden die Zusicherungen getestet
@REM Identisch
:_TESTCOMP
@SET _TCOMP="%1"
@SET _TCOMP=%_TCOMP:"=%
@CALL :%2 result %3 %4 %5 %6 %7 %8 %9
@SET result=%result:"=%
@IF "%_TCOMP%" EQU "%result%" (ECHO %2 OK) ELSE (ECHO %2 FAILED [%result% NEQ %_TCOMP%])
@GOTO :EOF

:_TESTSIZE
@REM Gleiche Größe
@CALL :%2 result %3 %4 %5 %6 %7 %8 %9
@CALL :STRLEN len %result%
@IF "%1" EQU "%len%" (ECHO %2 OK) ELSE (ECHO %2 FAILED FAILED [%result% NEQ %result%])
@GOTO :EOF

:_TESTRANGE
@REM Im Bereich
@SET /A _RANGELOOP=200
:_TESTRANGE1
@CALL :%3 result %4 %5 %6 %7 %8 %9
@SET /A _rlo=%1
@SET /A _rhi=%2
@SET /A result=%result%
@IF %result% LSS %_rlo% GOTO _TESTRANGE2
@IF %result% GTR %_rhi% GOTO _TESTRANGE2
@SET /A _RANGELOOP=%_RANGELOOP% - 1
@IF %_RANGELOOP% GTR 0 GOTO :_TESTRANGE1
@ECHO %3 OK
@GOTO :EOF
:_TESTRANGE2
@ECHO %3 FAILED
@GOTO :EOF


@REM Die Funktionen mit Zufallswerten bombardieren
:FUZZERTEST
@ECHO ========= Strings =========
@CALL :_FUZZER STRLEFT
@CALL :_FUZZER STRRIGHT
@CALL :_FUZZER STRMID
@CALL :_FUZZER STRLEN
@CALL :_FUZZER STRADD
@CALL :_FUZZER STRSTRIP
@CALL :_FUZZER STRREPLACE
@CALL :_FUZZER STRTRIM
@CALL :_FUZZER STRUP
@CALL :_FUZZER STRDOWN
@ECHO ========= Pathfunctions =========
@CALL :_FUZZER GETDRIVE
@CALL :_FUZZER GETDIR
@CALL :_FUZZER GETFILE
@ECHO ========= Random =========
@CALL :_FUZZER RNDWORD
@CALL :_FUZZER RNDDIGIT
@CALL :_FUZZER RND
@ECHO Done
GOTO :EOF

:_FUZZER
@ECHO fuzzing %1
@SET /A _FUZZLOOP=10
:_FUZZER1
@CALL :RND rnd255 0 50
@CALL :RNDWORD rndw1 %rnd255%
@CALL :RNDWORD rndw2 %rnd255%
@CALL :RNDWORD rndw3 %rnd255%
@CALL :RNDDIGIT rndd1 %rnd255%
@CALL :RNDDIGIT rndd2 %rnd255%
@CALL :RNDDIGIT rndd3 %rnd255%

@CALL :%1 result "%rndw1%" "%rndw2%" "%rndw3%" "%rndw1%" "%rndw2%" "%rndw3%" "%rndw2%"
@CALL :%1 result "%rndd1%" "%rndd2%" "%rndd3%" "%rndd1%" "%rndd2%" "%rndd3%" "%rndd2%"
@CALL :%1 result "%rnd255%" "%rnd255%" "%rnd255%" "%rnd255%" "%rnd255%" "%rnd255%" "%rnd255%"
@CALL :%1 result "%RANDOM%" "%RANDOM%" "%RANDOM%" "%RANDOM%" "%RANDOM%" "%RANDOM%" "%RANDOM%"

@ECHO .

@SET /A _FUZZLOOP=%_FUZZLOOP% - 1
@IF %_FUZZLOOP% GTR 0 GOTO :_FUZZER1

@GOTO :EOF


@REM ########################################################
@REM #
@REM # Stringfunktionen
@REM #
@REM ########################################################

@REM ########################################################
@REM # Leftstring
@REM # %1 = Rückgabe
@REM # %2 = Eingabe
@REM # %3 Länge
:STRLEFT
@SET _LEFT="%2"
@SET _LEFT=%_LEFT:"=%
@SET _LRESULT=
@SET /A _LINDEX=%3

:_STRLLP
@IF "%_LEFT%" EQU "" GOTO :STRLEFT1

@SET _LSUB=%_LEFT:~0,1%
@SET _LEFT=%_LEFT:~1,8192%

@SET _LRESULT=%_LRESULT%%_LSUB%
@SET /A _LINDEX=%_LINDEX% - 1
@IF %_LINDEX% GTR 0 GOTO :_STRLLP

:STRLEFT1
@SET %1=%_LRESULT%
@SET _LEFT=
@SET _LRESULT=
@SET _LINDEX=
@GOTO :EOF

@REM ########################################################
@REM # Rightstring
@REM # %1 = Rückgabe
@REM # %2 = Eingabe
@REM # %3 Länge
:STRRIGHT
@SET _RIGHT="%2"
@SET _RIGHT=%_RIGHT:"=%
@SET _RRESULT=
@SET /A _RINDEX=%3

:_STRRLP
@SET _RSUB=%_RIGHT:~-1%
@SET _RIGHT=%_RIGHT:~0,-1%

@SET _RRESULT=%_RSUB%%_RRESULT%
@SET /A _RINDEX=%_RINDEX% - 1

@IF "%_RIGHT%" EQU "" GOTO :STRRIGHT1
@IF %_RINDEX% GTR 0 GOTO :_STRRLP

@:STRRIGHT1
@SET %1=%_RRESULT%
@SET _RIGHT=
@SET _RRESULT=
@SET _RSUB=
@SET _RINDEX=
@GOTO :EOF

@REM ########################################################
@REM # Midstring
@REM # %1 = Rückgabe
@REM # %2 = Eingabe
@REM # %3 Offset
@REM # %4 Länge
:STRMID
@SET _MINPUT="%2"
@SET _MINPUT=%_MINPUT:"=%
@SET /A _MTEMP=%3 + %4
@CALL :STRLEFT _MID "%_MINPUT%" %_MTEMP%
@CALL :STRRIGHT result "%_MID%" %4
@SET _MTEMP=
@GOTO :EOF

@REM ########################################################
@REM # AddString
@REM # %1 = Rückgabe
@REM # %2 = Eingabe
@REM # %3 = Tail
:STRADD
@SET _AINPUT="%2"
@SET _AINPUT=%_AINPUT:"=%
@SET _ATAIL="%3"
@SET _ATAIL=%_ATAIL:"=%
@CALL :STRLEN _ATAILLEN %_ATAIL%
@CALL :STRRIGHT _ARIGHT "%_AINPUT%" %_ATAILLEN%
@IF "%_ARIGHT%" EQU "%_ATAIL%" (SET %1=%_AINPUT%) ELSE (SET %1=%_AINPUT%%_ATAIL%)
@SET _AINPUT=
@SET _ATAIL=
@SET _ATAILLEN=
@GOTO :EOF

@REM ########################################################
@REM # StripString
@REM # %1 = Rückgabe
@REM # %2 = Eingabe
@REM # %3 = Tail
:STRSTRIP
@SET _AINPUT="%2"
@SET _AINPUT=%_AINPUT:"=%
@SET _ATAIL="%3"
@SET _ATAIL=%_ATAIL:"=%
@CALL :STRLEN _ATAILLEN "%_ATAIL%"
@CALL :STRLEN _ALEN "%_AINPUT%"
@CALL :STRRIGHT _ARIGHT "%_AINPUT%" %_ATAILLEN%
@SET /A _ALEN=%_ALEN% - %_ATAILLEN%
@IF "%_ARIGHT%" EQU "%_ATAIL%" (CALL :STRMID %1 "%_AINPUT%" 0 %_ALEN%) ELSE (SET %1=%_AINPUT%)
@SET _ARESULT=
@SET _ATAIL=
@SET _ATAILLEN=
@GOTO :EOF

@REM ########################################################
@REM # StrLen
@REM # %1 = Rückgabe
@REM # %2 = Eingabe
:STRLEN
@SET /A _lresult=0
@SET _LEN="%2"
@SET _LEN=%_LEN:"=%
@IF "%_LEN%" EQU "" GOTO :STRLEN2
:STRLEN1
@IF "%_LEN%" NEQ "" SET /A _lresult=%_lresult% + 1
@SET _LEN=%_LEN:~1,8192%
@IF "%_LEN%" NEQ "" GOTO STRLEN1
@SET _LEN=
:STRLEN2
@SET %1=%_lresult%
@SET _lresult=
@GOTO :EOF

@REM ########################################################
@REM # StrTrim
@REM # %1 = Rückgabe
@REM # %2 = Eingabe
:STRTRIM
@SET result=
@SET _TINPUT="%2"
@SET _TINPUT=%_TINPUT:"=%
:STRTRIM1
@SET _TLEFT=%_TINPUT:~0,1%
@IF "%_TLEFT%" EQU " " SET _TINPUT=%_TINPUT:~1,8192%
@IF "%_TLEFT%" EQU " " GOTO :STRTRIM1
:STRTRIM2
@SET _TRIGHT=%_TINPUT:~-1%
@IF "%_TRIGHT%" EQU " " SET _TINPUT=%_TINPUT:~0,-1%
@IF "%_TRIGHT%" EQU " " GOTO :STRTRIM2
@SET %1=%_TINPUT%
@SET _TLEFT=
@SET _TRIGHT=
@SET _TINPUT=
@GOTO :EOF

@REM ########################################################
@REM # StrReplace
@REM # %1 = Rückgabe
@REM # %2 = Eingabe
@REM # %3 = Needle
@REM # %4 = Haystack
:STRREPLACE
@SET _RINPUT="%2"
@SET _RINPUT=%_RINPUT:"=%
@SET _RRESULT=
:STRREPLACE1
@SET _RTEMP=%_RINPUT:~0,1%
@SET _RINPUT=%_RINPUT:~1,8192%
@IF (%_RTEMP%) EQU (%3) (SET _RRESULT=%_RRESULT%%4) ELSE (set _RRESULT=%_RRESULT%%_RTEMP%)
@IF "%_RINPUT%" NEQ "" GOTO :STRREPLACE1
@SET %1=%_RRESULT%
@SET _RTEMP=
@SET _RINPUT=
@GOTO :EOF

@REM ########################################################
@REM # StringFill
@REM # %1 = Rückgabe
@REM # %2 = Zeichen
@REM # %3 = Size
:STRFILL
@IF %3 LEQ 0 GOTO :EOF
@SET _FINPUT=%2
@SET _FINPUT=%_FINPUT:"=%
@SET /A _FSIZE=0
@SET _FRESULT=
:STRFILL1
@SET _FRESULT=%_FRESULT%%_FINPUT%
@SET /A _FSIZE=%_FSIZE% + 1
@IF %_FSIZE% LSS %3 GOTO :STRFILL1
@SET %1=%_FRESULT%
@SET _FRESULT=
@SET _FINPUT=
@GOTO :EOF

@REM ########################################################
@REM # StringLeftPad
@REM # %1 = Rückgabe
@REM # %2 = Eingabe
@REM # %3 = Zeichen
@REM # %4 = Size
:STRLPAD
@SET _PINPUT=%2
@SET _PINPUT=%_PINPUT:"=%
@SET _PFILL=%3
@SET _PFILL=%_PFILL:"=%
@CALL :STRLEN _PLEN "%_PINPUT%"
@SET /A _PLEN=%4 - %_PLEN%
@CALL :STRFILL _PRESULT %_PFILL% %_PLEN%
@SET %1=%_PRESULT%%_PINPUT%
@SET _PRESULT=
@SET _PINPUT=
@SET PLEN=
@GOTO :EOF

@REM ########################################################
@REM # StringRightPad
@REM # %1 = Rückgabe
@REM # %2 = Eingabe
@REM # %3 = Zeichen
@REM # %3 = Size
:STRRPAD
@SET _PINPUT=%2
@SET _PINPUT=%_PINPUT:"=%
@SET _PFILL=%3
@SET _PFILL=%_PFILL:"=%
@CALL :STRLEN _PLEN "%_PINPUT%"
@SET /A _PLEN=%4 - %_PLEN%
@CALL :STRFILL _PRESULT %_PFILL% %_PLEN%
@SET %1=%_PINPUT%%_PRESULT%
@SET _PRESULT=
@SET _PINPUT=
@SET PLEN=
@GOTO :EOF


@REM ########################################################
@REM # StingUppercase
@REM # %1 = Rückgabe
@REM # %2 = Eingabe
:STRUP
@SET _UINPUT="%2"
@SET _UINPUT=%_UINPUT:"=%
@SET _URESULT=
:STRUP1
@SET _UCHAR=%_UINPUT:~0,1%
@SET _UINPUT=%_UINPUT:~1,8192%
@CALL :_STRUP _UCHAR %_UCHAR%
@SET _URESULT=%_URESULT%%_UCHAR%
@IF "%_UINPUT%" NEQ "" GOTO STRUP1
@SET %1=%_URESULT%
@SET _URESULT=
@SET _UCHAR=
@GOTO :EOF

:_STRUP
@IF [%2] EQU [] GOTO :EOF
@IF "%2" EQU "a" (SET %1=A
@GOTO :EOF)
@IF "%2" EQU "b" (SET %1=B
@GOTO :EOF)
@IF "%2" EQU "c" (SET %1=C
@GOTO :EOF)
@IF "%2" EQU "d" (SET %1=D
@GOTO :EOF)
@IF "%2" EQU "e" (SET %1=E
@GOTO :EOF)
@IF "%2" EQU "f" (SET %1=F
@GOTO :EOF)
@IF "%2" EQU "g" (SET %1=G
@GOTO :EOF)
@IF "%2" EQU "h" (SET %1=H
@GOTO :EOF)
@IF "%2" EQU "i" (SET %1=I
@GOTO :EOF)
@IF "%2" EQU "j" (SET %1=J
@GOTO :EOF)
@IF "%2" EQU "k" (SET %1=K
@GOTO :EOF)
@IF "%2" EQU "l" (SET %1=L
@GOTO :EOF)
@IF "%2" EQU "m" (SET %1=M
@GOTO :EOF)
@IF "%2" EQU "n" (SET %1=N
@GOTO :EOF)
@IF "%2" EQU "o" (SET %1=O
@GOTO :EOF)
@IF "%2" EQU "p" (SET %1=P
@GOTO :EOF)
@IF "%2" EQU "q" (SET %1=Q
@GOTO :EOF)
@IF "%2" EQU "r" (SET %1=R
@GOTO :EOF)
@IF "%2" EQU "s" (SET %1=S
@GOTO :EOF)
@IF "%2" EQU "t" (SET %1=T
@GOTO :EOF)
@IF "%2" EQU "u" (SET %1=U
@GOTO :EOF)
@IF "%2" EQU "v" (SET %1=V
@GOTO :EOF)
@IF "%2" EQU "w" (SET %1=W
@GOTO :EOF)
@IF "%2" EQU "x" (SET %1=X
@GOTO :EOF)
@IF "%2" EQU "y" (SET %1=Y
@GOTO :EOF)
@IF "%2" EQU "z" (SET %1=Z
@GOTO :EOF)
@SET %1=%2
@GOTO :EOF

@REM ########################################################
@REM # StingLowercase
@REM # %1 = Rückgabe
@REM # %2 = Eingabe
:STRDOWN
@SET _DINPUT="%2"
@SET _DINPUT=%_DINPUT:"=%
@SET _DRESULT=
:STRDOWN1
@SET _DCHAR=%_DINPUT:~0,1%
@SET _DINPUT=%_DINPUT:~1,8192%
@CALL :_STRDOWN _DCHAR %_DCHAR%
@SET _DRESULT=%_DRESULT%%_DCHAR%
@IF "%_DINPUT%" NEQ "" GOTO STRDOWN1
@SET %1=%_DRESULT%
@SET _DRESULT=
@SET _DCHAR=
@GOTO :EOF

:_STRDOWN
@IF [%2] EQU [] GOTO :EOF
@IF "%2" EQU "A" (SET %1=a
@GOTO :EOF)
@IF "%2" EQU "B" (SET %1=b
@GOTO :EOF)
@IF "%2" EQU "C" (SET %1=c
@GOTO :EOF)
@IF "%2" EQU "D" (SET %1=d
@GOTO :EOF)
@IF "%2" EQU "E" (SET %1=e
@GOTO :EOF)
@IF "%2" EQU "F" (SET %1=f
@GOTO :EOF)
@IF "%2" EQU "G" (SET %1=g
@GOTO :EOF)
@IF "%2" EQU "H" (SET %1=h
@GOTO :EOF)
@IF "%2" EQU "I" (SET %1=i
@GOTO :EOF)
@IF "%2" EQU "J" (SET %1=j
@GOTO :EOF)
@IF "%2" EQU "K" (SET %1=k
@GOTO :EOF)
@IF "%2" EQU "L" (SET %1=l
@GOTO :EOF)
@IF "%2" EQU "M" (SET %1=m
@GOTO :EOF)
@IF "%2" EQU "N" (SET %1=n
@GOTO :EOF)
@IF "%2" EQU "O" (SET %1=o
@GOTO :EOF)
@IF "%2" EQU "P" (SET %1=p
@GOTO :EOF)
@IF "%2" EQU "Q" (SET %1=q
@GOTO :EOF)
@IF "%2" EQU "R" (SET %1=r
@GOTO :EOF)
@IF "%2" EQU "S" (SET %1=s
@GOTO :EOF)
@IF "%2" EQU "T" (SET %1=t
@GOTO :EOF)
@IF "%2" EQU "U" (SET %1=u
@GOTO :EOF)
@IF "%2" EQU "V" (SET %1=v
@GOTO :EOF)
@IF "%2" EQU "W" (SET %1=w
@GOTO :EOF)
@IF "%2" EQU "X" (SET %1=x
@GOTO :EOF)
@IF "%2" EQU "Y" (SET %1=y
@GOTO :EOF)
@IF "%2" EQU "Z" (SET %1=z
@GOTO :EOF)
@SET %1=%2
@GOTO :EOF


@REM ########################################################
@REM # Linefeed
:LINEFEED
@ECHO.
@GOTO :EOF

@REM ########################################################
@REM #
@REM # Dateinamenfunktionen
@REM #
@REM ########################################################

@REM ########################################################
@REM # Das Laufwerk extrahieren
@REM # %1 = Rückgabe
@REM # %2 = Pfad
:GETDRIVE
@SET _TEMP=%2
@SET %1=%_TEMP:~0,2%
@SET _TEMP=
@GOTO :EOF

@REM ########################################################
@REM # Das Verzeichnis extrahieren
@REM # %1 = Rückgabe
@REM # %2 = Pfad
:GETDIR
@FOR %%a in (%2) DO @SET %1=%%~pa
@GOTO :EOF

@REM ########################################################
@REM # Den Dateinamen extrahieren
@REM # %1 = Rückgabe
@REM # %2 = Pfad
:GETFILE
@FOR %%a in (%2) DO @SET %1=%%~nxa
@GOTO :EOF

@REM ########################################################
@REM # Name eines Laufwerkes holen
@REM # %1 = Rückgabe
@REM # %2 = Laufwerk
:GETDRIVENAME
@FOR /F "tokens=6" %%a in ('vol %2') DO @SET %1=%%a
@GOTO :EOF

@REM ########################################################
@REM # Größe einer Datei holen
@REM # %1 = Rückgabe
@REM # %2 = Pfad
:GETSIZE
@FOR %%a in (%2) DO @SET %1=%%~za
@GOTO :EOF

@REM ########################################################
@REM # Datum einer Datei holen
@REM # %1 = Rückgabe
@REM # %2 = Pfad
:GETDATE
@FOR %%a in (%2) DO @SET _DTEMP=%%~ta
@CALL :STRLEFT _DTEMP "%_DTEMP%" 8
@CALL :STRTRIM _DTEMP "%_DTEMP%
@CALL :STRLEFT _DLEFT "%_DTEMP%" 6
@CALL :STRRIGHT _DRIGHT "%_DTEMP%" 2
@SET %1=%_DLEFT%20%_DRIGHT%
@SET _DTEMP=
@GOTO :EOF

@REM ########################################################
@REM # Logfunktionen
@REM # %1 = Text
@REM # %2 = Dateiname (Optional)
:ADDLOG
@IF (%2) EQU () SET _LOG=%MYSELF%.log
@ECHO %YEAR%-%DAY%-%MONTH% %time% ; %1 >> "%_LOG%"
@GOTO :EOF

@REM ########################################################
@REM #
@REM # Dateifunktionen
@REM #
@REM ########################################################

@REM ########################################################
@REM # Prüfen ob eine Datei existiert
@REM # %1 = Rückgabe
@REM # %2 = Dateiname
:FILEEXIST
@IF EXIST %2 (SET %1=%TRUE%) ELSE (SET %1=%FALSE%)
@GOTO :EOF

@REM ########################################################
@REM # Prüfen ein Verzeichnis existiert
@REM # %1 = Rückgabe
@REM # %2 = Name
:DIREXIST
@IF EXIST %2\NUL (SET %1=%TRUE%) ELSE (SET %1=%FALSE%)
@GOTO :EOF

@REM ########################################################
@REM # Dateityp prüfen
@REM # %1 = Rückgabe (TRUE / FALSE)
@REM # %2 = Name
:ISDIR
@IF EXIST %2\NUL (SET %1=%TRUE%) ELSE (SET %1=%FALSE%)
@GOTO :EOF

@REM ########################################################
@REM #
@REM # Shellfunktionen ausführen
@REM #
@REM ########################################################
:SHELL
SET _DLL=%1
SET _DLL=%_DLL:"=%
IF NOT EXIST "%_DLL%" GOTO :EOF
IF NOT EXIST "%RUNDLL%" GOTO :EOF
"%RUNDLL%" "%_DLL%",%2 %3 %4 %5 %6 %7 %8 %9
@GOTO :EOF


@REM ########################################################
@REM #
@REM # Zufallsfunktionen
@REM #
@REM ########################################################

@REM ########################################################
@REM # Eine Zufallszahl zwischen %2 und %3 zurückgeben
@REM # Werden keine Grenzen angegeben wird eine Zahl
@REM # zwischen 0 und 30000 zurückgegeben
@REM # %1 = Rückgabevariable
@REM # %2 = Minimum
@REM # %2 = Maxmimum
:RND
@IF (%2) EQU () (SET /A _MIN=0) ELSE (SET /A _MIN=%2)
@IF (%3) EQU () (SET /A _MAX=30000) ELSE (SET /A _MAX=%3)

@REM Werte übergeben
@SET /A %1=%RANDOM% %% (%_MAX% - %_MIN%) + %_MIN%
@SET _MIN=
@SET _MAX=

@GOTO :EOF

@REM ########################################################
@REM # Einen Zufallsstring aus Buchstaben erzeugen
@REM # %1 = Rückgabevariable
@REM # %2 = Länge des Strings
:RNDWORD
@SET _RND=

@REM Defaultwert ist fünf
@IF (%2) EQU () (SET /A _SIZE=5) ELSE (SET /A _SIZE=%2)

:RNDWLP
@SET /A CHR=%RANDOM% %% 26

@IF %CHR% == 0 SET _RND=%_RND%a
@IF %CHR% == 1 SET _RND=%_RND%b
@IF %CHR% == 2 SET _RND=%_RND%c
@IF %CHR% == 3 SET _RND=%_RND%d
@IF %CHR% == 4 SET _RND=%_RND%e
@IF %CHR% == 5 SET _RND=%_RND%f
@IF %CHR% == 6 SET _RND=%_RND%g
@IF %CHR% == 7 SET _RND=%_RND%h
@IF %CHR% == 8 SET _RND=%_RND%i
@IF %CHR% == 9 SET _RND=%_RND%j
@IF %CHR% == 10 SET _RND=%_RND%k
@IF %CHR% == 11 SET _RND=%_RND%l
@IF %CHR% == 12 SET _RND=%_RND%m
@IF %CHR% == 13 SET _RND=%_RND%n
@IF %CHR% == 14 SET _RND=%_RND%o
@IF %CHR% == 15 SET _RND=%_RND%p
@IF %CHR% == 16 SET _RND=%_RND%q
@IF %CHR% == 17 SET _RND=%_RND%r
@IF %CHR% == 18 SET _RND=%_RND%s
@IF %CHR% == 19 SET _RND=%_RND%t
@IF %CHR% == 20 SET _RND=%_RND%u
@IF %CHR% == 21 SET _RND=%_RND%v
@IF %CHR% == 22 SET _RND=%_RND%w
@IF %CHR% == 23 SET _RND=%_RND%x
@IF %CHR% == 24 SET _RND=%_RND%y
@IF %CHR% == 25 SET _RND=%_RND%z

@SET /A _SIZE=%_SIZE% - 1
@IF %_SIZE% GTR 0 GOTO RNDWLP

@REM Ergebnis übernehmen
@SET %1=%_RND%
@SET _RND=
@SET _SIZE=

@GOTO :EOF

; ########################################################
@REM # Einen Zufallsstring aus Zahlen erzeugen
@REM # %1 = Rückgabevariable
@REM # %2 = Länge des Strings
:RNDDIGIT
@SET /A _SIZE=%2
@SET _RND=
@REM Defaultwert ist fünf
@IF (%2) EQU () SET /A _SIZE=5
:RNDDLP
@SET /A CHR=%RANDOM% %% 10
@SET _RND=%_RND%%CHR%
@SET /A _SIZE=%_SIZE% - 1
@IF %_SIZE% GTR 0 GOTO RNDDLP
@REM Ergebnis übernehmen
@SET %1=%_RND%
@SET _RND=
@SET _SIZE=
@GOTO :EOF

@REM ########################################################
@REM # Fensterfunktionen
@REM ########################################################
@REM Windows Infos ausgeben
:SYSINFO
CALL :SHELL %MYSYS%\Shell32.dll ShellAboutA
@GOTO :EOF

@REM ########################################################
@REM # Eingeben holen
:INPUT
@SET /P _ITEMP=
@CALL :STRLEFT %1 "%_ITEMP%" %2
@SET _ITEMP=
@GOTO :EOF

@REM ########################################################
@REM # Druckfunktionen
@REM ########################################################
:PRINTHTML file
SET _FILE=%1
SET _FILE=%_FILE:"=%
IF NOT EXIST %1 GOTO :EOF
CALL :SHELL %HTMLDLL% PrintHTML "%_FILE%"
@GOTO :EOF

@REM ########################################################
@REM # Netzwerkfunktionen
@REM ########################################################
:PING
@SET %1=%FALSE%
@FOR /F "tokens=6*" %%x in ('ping %2 -n 1') DO @SET %1=%TRUE%
@GOTO :EOF

faq/batch.txt · Zuletzt geändert: 2010/06/22 14:30 von Sven of Nine