@echo off setlocal enabledelayedexpansion rem ############################################################## rem ## ## rem ## logwert.cmd version. 1.2 ## rem ## ## rem ## Dies ist ein Hilfsscript fuer _shares_spiegeln.bat ## rem ## Es wertet die Robologfile aus und fast diese zusammen ## rem ## ## rem ## @param %1 Pfadangabe-Logdatei ## rem ## ## rem ## @author: Martin.Huber@stbaro.bayern.de ## rem ## ## rem ############################################################## rem Einstellungen rem Dividierender Faktor der Groe�enausgabe (GB=1073741824,...) set Log_Copy_Size_Einheit=1073741824 rem ########################################################################################## rem ########################### Beginn des eigendlichen Programms ############################ rem ########################################################################################## rem rem Hilfsvariablen NICHT editieren rem set Log_Path=%1 set Log_Copy_errors=0 set Log_Copy_Size=0 set Log_Copy_real_Size=0 set Log_Copy_item=0 set Log_Copy_real_item=0 rem ########################################################################################## :Start rem pruefen ob auszuwertendes Logfile Existiert if not exist "%Log_Path%" set errorlevel=1&echo Wrong Log Path&goto exit for /f "delims=# tokens=3" %%c in ('echo %random%') do call :WichCase Dauer xy rem Logfile Auswerten rem Jede Zeile mit !!!MAIN!!! einzeln Auswerten for /f "tokens=*" %%a in (%Log_Path%) do call :Main %%a rem Umrechnen und Runden der Gr��enausgabe call :calc "%Log_Copy_Size%/%Log_Copy_Size_Einheit%" Log_Copy_Size set result= call :round %Log_Copy_Size% set Log_Copy_Size=%result% call :calc "%Log_Copy_real_Size%/%Log_Copy_Size_Einheit%" Log_Copy_real_Size set result= call :round %Log_Copy_real_Size% set Log_Copy_real_Size=%result% echo Insgesamt: %Log_Copy_real_item% von %Log_Copy_item% Dateien kopiert, %Log_Copy_errors% Fehler, %Log_Copy_real_Size% g von %Log_Copy_Size% g kopiert set "result=%Log_Copy_real_item% von %Log_Copy_item% Dateien kopiert, %Log_Copy_errors% Fehler, %Log_Copy_real_Size% g von %Log_Copy_Size% g kopiert" rem bis drei stellen nach dem komma rem 4 ziffern rem g goto Exit Rem ############################################################################################ Rem Zeilenweise Auswertung :Main set Log_Line=%* Rem Entfernen Problematischer Zeichen und setzen des Trennzeichens (#) set Log_Line=%Log_Line:"=#% set Log_Line=%Log_Line:,=#% set Log_Line=%Log_Line:)=+% set Log_Line=%Log_Line:(=+% rem Abschnitte einzeln weiter Auswerten for /f "delims=# tokens=2" %%b in ('echo %Log_Line%') do ( set tempvar=%%b call :WichCase !tempvar! ) for /f "delims=# tokens=3" %%c in ('echo %Log_Line%') do call :WichCase %%c for /f "delims=# tokens=4" %%d in ('echo %Log_Line%') do call :WichCase %%d for /f "delims=# tokens=5" %%e in ('echo %Log_Line%') do call :WichCase %%e goto Exit Rem ################################################################################################## :WichCase Rem herausfinden der Informations Art (Item, Error, Size) rem und starten der zugehoerigen auswerte Funktion set var_a=%* if not defined var_a goto exit Rem Lehre Ordner werden so uebersprungen for /f "tokens=1" %%g in ('echo !var_a!') do if "%%g" == "Dauer" goto exit rem zaehlen der Dateien for /f "tokens=1,3,4" %%h in ('echo !var_a!') do if "%%j" == "Dateien" ( call :calc "%Log_Copy_item%+%%i" Log_Copy_item call :calc "%Log_Copy_real_item%+%%h" Log_Copy_real_item goto exit ) rem zaehlen der Fehler for /f "tokens=1,2" %%i in ('echo !var_a!') do if "%%j" == "Fehler" ( call :calc "%Log_Copy_errors%+%%i" Log_Copy_errors goto exit ) rem aufrufen der additions Funktion der Groe�enangaben for /f "tokens=1,2,4,5,6" %%k in ('echo !var_a!') do if "%%o" == "kopiert" ( call :count_real_Size %%k %%l call :count_Size %%m %%n goto exit ) goto exit rem ############################################################################################### Rem erstellen aehnlicher Funktionen um "setlocal enabledelayedexpansion" zu Umgehen :count_real_Size set result= call :convert_to_bytes %1 %2 result call :calc "%result%+%Log_Copy_real_Size%" Log_Copy_real_Size goto exit :count_Size set result= call :convert_to_bytes %1 %2 result call :calc "%result%+%Log_Copy_Size%" Log_Copy_Size goto exit rem ############################################################################################## rem konfertieren der unterschiedlichen Groe�enangaben in bytes (umrechnungseinheit= 1024) rem b (=Bytes), k (=Kilobytes), m (=Megabytes), g (=Gigabytes) und t (=Terabytes) :convert_to_bytes rem convert_to_bytes [zahl] [einheit] (r�ckgabe-variable) set convert_to_bytes_zahl=%1 set convert_to_bytes_einheit=%2 set convert_to_bytes_var=%3 if not defined convert_to_bytes_var set convert_to_bytes_var=result rem "Select Case convert_to_bytes_einheit" goto :convert_to_bytes_%convert_to_bytes_einheit% :convert_to_bytes_b set %convert_to_bytes_var%=%convert_to_bytes_zahl% goto exit :convert_to_bytes_k call :calc "%convert_to_bytes_zahl%*1024" %convert_to_bytes_var% goto exit :convert_to_bytes_m call :calc "%convert_to_bytes_zahl%*1048576" %convert_to_bytes_var% goto exit :convert_to_bytes_g call :calc "%convert_to_bytes_zahl%*1073741824" %convert_to_bytes_var% goto exit :convert_to_bytes_t call :calc "%convert_to_bytes_zahl%*1099511627776" %convert_to_bytes_var% goto exit :convert_to_bytes_0 echo Kein Sharezugriff! set %convert_to_bytes_var%=0 goto exit rem ############################################################################################### rem auslagern der Rechenfunktion in die PowerShell :calc rem calc ["berechnung"] (r�ckgabe-variable) set result=%1 if not defined result goto exit rem herausfiltern unerlaubter Zeichen set result=%result:,=.% set result=%result:(=^(% set result=%result:)=^)% set result=%result:"=% set result=%result:[=^(% set result=%result:]=^)% set var_name=%2 if not defined var_name set var_name=result for /f %%a in ('powershell -C "%result%"') do set result=%%a set result=%result:,=.% set %var_name%=%result% goto exit rem ############################################################################################# rem die Funktion round konnte nicht in die PowerShell ausgelagert werden, rem da der befehl Klammern enth�llt! rem Rundet immer auf zwei Stellen nach dem Komma :round rem round [zahl] set result=%* if not defined result goto exit set result=%result:,=.% set result=%result:"=% call :calc "%result%*1000" result set result=%result:.=#% set result=%result:,=#% for /f "delims=# tokens=1" %%a in ('echo %result%') do set result=%%a set last_number=%result:~-1% if "%last_number%" GTR "5" (set round_zahl=1) else (set round_zahl=0) call :calc "%result:~,-1%+%round_zahl%" result call :calc "%result%/100" result set last_number= set round_zahl= goto exit rem ############################################################################################# :exit