Frage ist gelöstGesicherte Ordnergröße in Log schreiben
08.02.2012
18:30:41 Uhr430 Aufrufe
12 Antworten
18:30:41 Uhr
12 Antworten
Noch nicht bewertet
Ich möchte nach Robocopy Job die Ordnergröße des Zielpfades in ein LOG schreiben
Hi Leute,
Ich habe mir mit Robocopy einige Sicherungsjobs gebastelt die mir die Meldungen von Robocopy in eine Logdatei schreiben.
Nun würde ich auch noch gerne die Größe der gesicherten Zielverzeichnisse in diese Logdatei dazuschreiben.
Eine Suche hier hat viele Fundstellen ergeben, aber nichts was für mich passt.
Alledings habe ich einen Hinweis auf das kleine Tool DIRUSE.exe aus dem Recourcekit gefunden.
Ein Test mit
befördert eigentlich schon das gewünschte Ergebnis zu Tage, denn das Programm gibt in der letzten Zeile die gewünschte Gesamtgröße des Ordners aus!
Die Frage ist nur, wie bekomme ich den Wert "78.913.76" ohne grossen Aufwand in eine Variable rein ??
Kann mir vielleicht jemand ein paar Codeschnipsel posten?
Grus Paul
Ich habe mir mit Robocopy einige Sicherungsjobs gebastelt die mir die Meldungen von Robocopy in eine Logdatei schreiben.
Nun würde ich auch noch gerne die Größe der gesicherten Zielverzeichnisse in diese Logdatei dazuschreiben.
Eine Suche hier hat viele Fundstellen ergeben, aber nichts was für mich passt.
Alledings habe ich einen Hinweis auf das kleine Tool DIRUSE.exe aus dem Recourcekit gefunden.
Ein Test mit
01.
DIRUSE.EXE /s /m /, /* p:\Datenbefördert eigentlich schon das gewünschte Ergebnis zu Tage, denn das Programm gibt in der letzten Zeile die gewünschte Gesamtgröße des Ordners aus!
78.913.76 32607 TOTAL
Die Frage ist nur, wie bekomme ich den Wert "78.913.76" ohne grossen Aufwand in eine Variable rein ??
Kann mir vielleicht jemand ein paar Codeschnipsel posten?
Grus Paul
bastla schreibt am 08.02.2012 um 18:48:11 Uhr
Hallo pbelcl!

Grüße
bastla
P.S.: Wir hätten da was ...
Die Frage ist nur, wie bekomme ich den Wert "78.913.76" ohne grossen Aufwand in eine Variable rein ??
Eigentlich nicht anders, als eine VOL-Ausgabe - nur noch einfacher ... Grüße
bastla
P.S.: Wir hätten da was ...
pbelcl schreibt am 08.02.2012 um 19:26:48 Uhr
Da hast du absolut recht!!!!
Ich hab's eh gesucht, nur konnte ich nicht mehr genau erinnern....
Werd mal versuchen ob ich das alleine hinbekomme ...
Ich hab's eh gesucht, nur konnte ich nicht mehr genau erinnern....
Werd mal versuchen ob ich das alleine hinbekomme ...
pbelcl schreibt am 08.02.2012 um 20:33:38 Uhr
Tja, und damit hab ich es nun auch schon geschafft 
Jetzt hat mein Perfektionismus nur noch ein Ziel:
Die Größe der Ordner hat oft unterschiedliche Länge.
Jetzt muss ich das nur noch so mit Leerzeichen füllen dass die Zahl im LOG immer rechts an der gleichen Stelle steht...
01.
FOR /F "tokens=1 delims= " %%i in (DIRUSE.EXE /s /m p:\daten ^|findstr "TOTAL"') do set groesse=%%iJetzt hat mein Perfektionismus nur noch ein Ziel:
Die Größe der Ordner hat oft unterschiedliche Länge.
Jetzt muss ich das nur noch so mit Leerzeichen füllen dass die Zahl im LOG immer rechts an der gleichen Stelle steht...
bastla schreibt am 08.02.2012 um 21:41:58 Uhr
Hallo pbelcl!
Übrigens sind "tokens=1 delims= " ebenfalls Default und könnten daher weggelassen werden ...
Grüße
bastla
Jetzt muss ich das nur noch so mit Leerzeichen füllen dass die Zahl im LOG immer rechts an der gleichen Stelle steht...
Ich fasse das noch nicht als Frage auf - aber vielleicht trotzdem ein Hinweis: set /? (etwa 4. Seite bei defaultmäßiger Größe des CMD-Fensters)Übrigens sind "tokens=1 delims= " ebenfalls Default und könnten daher weggelassen werden ...
Grüße
bastla
pbelcl schreibt am 08.02.2012 um 22:15:19 Uhr
Zitat von bastla:
Übrigens sind "tokens=1 delims= " ebenfalls Default und könnten daher weggelassen werden ...
DANKE!!Übrigens sind "tokens=1 delims= " ebenfalls Default und könnten daher weggelassen werden ...
Zitat von bastla:
Ich fasse das noch nicht als Frage auf - aber vielleicht trotzdem ein Hinweis: set /? (etwa 4. Seite bei defaultmäßiger Größe des CMD-Fensters)
Danke für den Tipp!Ich fasse das noch nicht als Frage auf - aber vielleicht trotzdem ein Hinweis: set /? (etwa 4. Seite bei defaultmäßiger Größe des CMD-Fensters)
Ich werds mal versuchen, wenn ich's nicht schaffe dann FRAGE ich
lg
Paul
pbelcl schreibt am 09.02.2012 um 19:40:52 Uhr
Hi bastla,
Ich habe in meiner ganzen Sache leider schon vor einiger Zeit einen Bug einbauen müssen, der mir leider jetzt auf dem Kopf fällt.
Um nicht die ganze Sache unnätig kompliziert zu machen:
Kann ich aus einer Variable irgendwie ein Leerzeichen am Ende rausbekommen, aber nur wenn da auch eines ist ??
Ich habe in meiner ganzen Sache leider schon vor einiger Zeit einen Bug einbauen müssen, der mir leider jetzt auf dem Kopf fällt.
Um nicht die ganze Sache unnätig kompliziert zu machen:
Kann ich aus einer Variable irgendwie ein Leerzeichen am Ende rausbekommen, aber nur wenn da auch eines ist ??
pbelcl schreibt am 10.02.2012 um 14:09:36 Uhr
> Zitat von bastla:
> Ich fasse das noch nicht als Frage auf - aber vielleicht trotzdem ein Hinweis: set /? (etwa 4. Seite bei defaultmäßiger Größe des CMD-Fensters)
> Ich fasse das noch nicht als Frage auf - aber vielleicht trotzdem ein Hinweis: set /? (etwa 4. Seite bei defaultmäßiger Größe des CMD-Fensters)
Ich habe mich nun schon einen halben Tag gespielt, komm aber nicht drauf!
Inzwischen ist es mir gelungen jeden beliebigen Bereich aus der Variable zu extrahieren, aber MEHR als drinnen steht kann ich nicht bekommen ;-(
01.
FOR /F %%i in ('DIRUSE.EXE -s -m -, "p:\Software\" ^|findstr "TOTAL"') do set groesse=%%iDa kommen unterschiedliche Werte zurück. Der längste ist "217336.75"
Ich will nun diese Zahl in eine Variable reinbringen und mit Leerzeichen DAVOR sagen wir 15 Stück auffüllen. Wären in diesem Fall 7 Leerzeichen
Wenn die Zahl nur "22.55" ist sollen 11 Leerzeichen davor. sodass es in meinem Log dann immer so aussieht:
10.02.2012 um 14:07:51 keine veraenderten Dateien gefunden. 217336.75 MB S:\ nach Y:\S\
10.02.2012 um 14:07:55 keine veraenderten Dateien gefunden. ........45.66 MB P:\daten\Access nach Y:\P\daten\Access
(stell dir statt der "." Leerzeichen vor
Das bring ich einfach nicht zusammen...
geht das denn überhaupt??
pbelcl schreibt am 11.02.2012 um 09:19:39 Uhr
Hallo bastla,
Klar auf die Lösung hätt ich auch selber kommen können.
Danke dass du mir immer wieder hilfst im Wald die Bäume zu sehen
Hat übrigens geklappt, habs gereits eingebaut....
lg
Paul
PS: Seid ihr hier eigentlich daran interessiert das gesamte "Projekt" als Demobeispiel zu haben?
Wenn ja wohin soll ich's posten?
Klar auf die Lösung hätt ich auch selber kommen können.
Danke dass du mir immer wieder hilfst im Wald die Bäume zu sehen
Hat übrigens geklappt, habs gereits eingebaut....
lg
Paul
PS: Seid ihr hier eigentlich daran interessiert das gesamte "Projekt" als Demobeispiel zu haben?
Wenn ja wohin soll ich's posten?
bastla schreibt am 11.02.2012 um 21:03:38 Uhr
Hallo pbelcl!
Freut mich, wenn's passt ...

Grüße
bastla
Freut mich, wenn's passt ...
Seid ihr hier eigentlich daran interessiert das gesamte "Projekt" als Demobeispiel zu haben?
Kann ja nicht schaden ... Wenn ja wohin soll ich's posten?
Wenn Du es entsprechend erklärst und kommentierst könnte das ein Tipp oder eine Anleitung (natürlich hier unter "Batch & Shell") werden ...Grüße
bastla
pbelcl schreibt am 12.02.2012 um 07:56:30 Uhr
Na dann probier ich's mal hier:
1.) Ich hab mir vor einiger Zeit ein universelles Backuptool geschrieben welches mit 4 Parametern beschickt wird. Dieses Tool macht Nachts immer Datensicherung mit Robocopy auf eine Sicherungsplatte.
2.) Habe ich dieses Tool unlängst um 2 Funktionen erweitert.
2a.) Die vielen unterschiedlichen Festplatten "wissen" was auf ihnen gesichert werden soll
2b.) Das tool schreibt eine Logdatei was gesichert wird und informiert mich per Email wenn was schief läuft.
Aufgerufen wird die Routine entweder sehr simpel durch diesen Befehl:
Oder über diesen Aufruf, wenn die Platte eine sicherungsliste.txt beinhaltet:
Die Textdatei "sicherungsliste.txt" sieht so aus:
Ich hoffe damit kann ich ein paar Ideen fördern
PS: Profis werden rausfinden dass die ganze Sache einen kleinen Schönheitsfehler hat!
Wenn ich ganze Laufwerke sichern möchte MUSS ich ein Leerzeichen nach dem Laufwerksbuchstaben angeben
Dieses Leerzeichen muss ich dann im Backup Hauptprogramm für DIRUSAGE.EXE wieder entfernen da es sonst die Dateigröße nicht richtig bestimmen kann.
Deshalb gibt es im Hauptprgramm die Variable %Z_V% zweimal.
Das ist dieser Codeteil:
Sonst bin ich mit dem Ergebnis recht zufrieden
1.) Ich hab mir vor einiger Zeit ein universelles Backuptool geschrieben welches mit 4 Parametern beschickt wird. Dieses Tool macht Nachts immer Datensicherung mit Robocopy auf eine Sicherungsplatte.
2.) Habe ich dieses Tool unlängst um 2 Funktionen erweitert.
2a.) Die vielen unterschiedlichen Festplatten "wissen" was auf ihnen gesichert werden soll
2b.) Das tool schreibt eine Logdatei was gesichert wird und informiert mich per Email wenn was schief läuft.
01.
@echo off 02.
cls 03.
04.
rem hier werden die Variablen übergeben... 05.
set "Z_LW=%~1" 06.
set "Z_V=%~2" 07.
set "Q_LW=%~3" 08.
set "Q_V=%~4" 09.
set "Z_V1= 10.
if "%Z_V:~-1%"==" " set "Z_V1=%Z_V:~,-1%" 11.
if not "%Z_V:~-1%"==" " set "Z_V1=%Z_V%" 12.
echo. 13.
14.
:var_pruef 15.
rem hier wird geprüft ob die Variablen auch alle gefüllt sind 16.
call %Workdir%\time_set silent 17.
rem Timeset schreibt das Datum und die Zeit in die Variable %Zeitstempel%, wird fürs LOG gebraucht!! 18.
if "X%Q_LW%X"=="XX" set Meldung=eine der vier Variablen ist leer !!! & goto Fehler 19.
rem diese Prüfung deaktiviert, damit man auch ganze Laufwerke ohne Ordner kopieren kann 20.
rem if "X%Q_V%X"=="XX" set Meldung=eine der vier Variablen ist leer !!! & goto Fehler 21.
if "X%Z_LW%X"=="XX" set Meldung=eine der vier Variablen ist leer !!! & goto Fehler 22.
if "X%Z_V%X"=="XX" set Meldung=eine der vier Variablen ist leer !!! & goto Fehler 23.
rem prüft ob Ziellaufwerk existiert... 24.
if not exist %Z_LW% set meldung=Ziel-Laufwerk %Z_LW% existiert nicht&goto Fehler 25.
rem Prüft ob auf dem Ziellaufwerk auch eine Sicherungsliste ist! 26.
if exist %Z_LW%\sicherungsliste.txt set LOGFILE="%Z_LW%\%VOLBEZ%.log" 27.
if not exist %Z_LW%\sicherungsliste.txt set LOGFILE="%WORKDIR%\Backup\%~n0.log" 28.
if not exist "%Z_LW%\%Z_V%" goto Z_V_fehler 29.
goto kopieren 30.
31.
:Z_V_fehler 32.
rem erstellt Zielordner falls nicht vorhanden... 33.
echo Auf dem Laufwerk %Z_LW% ist kein Ordner: %Z_V% zu finden! 34.
echo. 35.
echo Ordner %Z_LW%\%Z_V% wird erstellt, OK ?? 36.
call ping localhost -n 4 >NUL 37.
if not exist "%Z_LW%\%Z_V%" md "%Z_LW%\%Z_V%" 38.
goto kopieren 39.
40.
:kopieren 41.
rem hier wird kopiert... 42.
%utildir%\robocopy "%Q_LW%\%Q_V%" "%Z_LW%\%Z_V%" /COPY:DAT /R:1 /w:1 /FFT /TEE /NDL /NFL /mir /XO /NP /XD "System Volume Information" "$recycle.bin" "Recycler" "X_l”schen" /LOG+:%WORKDIR%\Backup\%~n0_%jahr%_%Monat%.log 43.
if errorlevel 16 set Meldung=FEHLER: kritischer Fehler, abgebrochen !!! & goto Fehler 44.
if errorlevel 8 set Meldung=FEHLER: einige Dateien sind fehlerhaft !!! & goto Fehler 45.
if errorlevel 4 set Meldung=FEHLER: einige Dateien sind unterschiedlich & goto Fehler 46.
if errorlevel 2 set Meldung=Kopieren erfolgreich, Ziel-Dateien geloescht. & goto OK 47.
if errorlevel 1 set Meldung=Kopieren erfolgeich. & goto OK 48.
if errorlevel 0 set Meldung=keine veraenderten Dateien gefunden. & goto OK 49.
set Meldung=kein errorlevel zurückgegeben! & goto Fehler 50.
51.
:OK 52.
call %Workdir%\time_set silent 53.
FOR /F "tokens=1 delims= " %%i in ('%utildir%\DIRUSE.EXE -s-m "%Z_LW%\%Z_V1%" ^|findstr "TOTAL"') do set "groesse= %%i" 54.
rem Diruse.exe ermittelt die gesicherte Größe am Ziel und schreibt sie in die Variamle %groesse% 55.
echo %Zeitstempel% %meldung% %groesse:~-10% Megabyte %Q_LW%\%Q_V% nach %Z_LW%\%Z_V% >>%LOGFILE% 56.
echo %Q_LW%\%Q_V% kopiert - %meldung% 57.
goto end 58.
59.
:Fehler 60.
call %Workdir%\time_set silent 61.
echo Fehler aufgetreten: 62.
echo in %~n0.bat 63.
echo %Meldung% 64.
65.
echo Z_LW: %1 66.
echo Z_V: %2 67.
echo Q_LW: %3 68.
echo Q_V: %4 69.
call ping localhost -n 5 >NUL 70.
echo. 71.
FOR /F "tokens=1 delims= " %%i in ('%utildir%\DIRUSE.EXE -s-m "%Z_LW%\%Z_V1%" ^|findstr "TOTAL"') do set "groesse= %%i" 72.
echo %Zeitstempel% %meldung% %groesse:~-10% Megabyte %Q_LW%\%Q_V% nach %Z_LW%\%Z_V% >>%LOGFILE% 73.
rem gbmail schickt ein Email mit dem Fehler an eine gewünschte Emailadresse 74.
%utildir%\gbmail -to max@mustermann.at -h smtp.mustermann.at -from %~n0@mustermann.at -s "%Zeitstempel% Backup von: %Q_LW%\%Q_V% nach %Z_LW%\%Z_V% meldet: %meldung%" 75.
goto exit 76.
77.
:end 78.
echo fertig.... 79.
:exitAufgerufen wird die Routine entweder sehr simpel durch diesen Befehl:
01.
Call %WorkDir%\Backup\BACKUP_Job.bat "%Z_LW%" "P\Daten" "P:" "Daten"Oder über diesen Aufruf, wenn die Platte eine sicherungsliste.txt beinhaltet:
01.
@echo off 02.
rem Sichert Daten auf eine externe Festplatte Y:\ 03.
rem verwendet die sicherungsliste.txt auf der Zielplatte zur Auswahl der zu sichernden Ordner! 04.
05.
if exist Y:\Sicherungsliste.txt set Z_LW=Y:&goto LW_OK 06.
if not %1!==! set Z_LW=%1 07.
if exist %Z_LW%\sicherungsliste.txt goto LW_OK 08.
goto LW_Fehler 09.
10.
:LW_OK 11.
echo Ziellaufwerk: %Z_LW% 12.
for /f "tokens=5*" %%i in ('vol %Z_LW% ^|findstr "Laufwerk"') do @set "Volbez=%%j" 13.
call %Workdir%\time_set silent 14.
rem hier wird das Backup Kernprogramm aufgerufen (siehe oben im Post) 15.
For /F "eol=; delims=, tokens=1-2" %%i in (%Z_LW%\sicherungsliste.txt) do call %Workdir%\Backup\BACKUP_Job.bat "%Z_LW%" "%%i\%%j" "%%i:" "%%j" 16.
goto end 17.
18.
:LW_Fehler 19.
echo Fehler in %~n0.bat aufgetreten: 20.
echo kein Sicherungslaufwerk oder keine Sicherungsliste in %Z_LW% gefunden!! 21.
pause 22.
goto exit 23.
24.
:end 25.
echo fertig... 26.
:exitDie Textdatei "sicherungsliste.txt" sieht so aus:
p,
L,P_Fotos
L,P_Monatssicherung
L,P_Tagessicherung
V,1 - Videobibliothek/2 - Serien
V,1 - Videobibliothek/4 - Reportagen
L,P_Fotos
L,P_Monatssicherung
L,P_Tagessicherung
V,1 - Videobibliothek/2 - Serien
V,1 - Videobibliothek/4 - Reportagen
Ich hoffe damit kann ich ein paar Ideen fördern
PS: Profis werden rausfinden dass die ganze Sache einen kleinen Schönheitsfehler hat!
Wenn ich ganze Laufwerke sichern möchte MUSS ich ein Leerzeichen nach dem Laufwerksbuchstaben angeben
> p,
sonst kommt mir Robocopy mit einem Fehler dass kein Ziellaufwerk existiert.Dieses Leerzeichen muss ich dann im Backup Hauptprogramm für DIRUSAGE.EXE wieder entfernen da es sonst die Dateigröße nicht richtig bestimmen kann.
Deshalb gibt es im Hauptprgramm die Variable %Z_V% zweimal.
Das ist dieser Codeteil:
01.
set "Z_V1= 02.
if "%Z_V:~-1%"==" " set "Z_V1=%Z_V:~,-1%" 03.
if not "%Z_V:~-1%"==" " set "Z_V1=%Z_V%"Sonst bin ich mit dem Ergebnis recht zufrieden







