Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Gesicherte Ordnergröße in Log schreiben

Frage Entwicklung Batch & Shell

Mitglied: pbelcl

pbelcl (Level 1) - Jetzt verbinden

08.02.2012, aktualisiert 18.10.2012, 3752 Aufrufe, 12 Kommentare

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

01.
DIRUSE.EXE /s /m /, /* p:\Daten
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!

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
Mitglied: bastla
08.02.2012, aktualisiert 18.10.2012
Hallo pbelcl!
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 ...
Bitte warten ..
Mitglied: pbelcl
08.02.2012, aktualisiert 18.10.2012
Zitat von bastla:
Eigentlich nicht anders, als eine VOL-Ausgabe - nur noch
einfacher ...
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 ...
Bitte warten ..
Mitglied: pbelcl
08.02.2012, aktualisiert 18.10.2012
Zitat von bastla:
P.S.: Wir hätten da was ...
Tja, und damit hab ich es nun auch schon geschafft

01.
FOR /F "tokens=1 delims= " %%i in (DIRUSE.EXE /s /m p:\daten ^|findstr "TOTAL"') do set groesse=%%i
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...
Bitte warten ..
Mitglied: bastla
08.02.2012 um 21:41 Uhr
Hallo pbelcl!
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
Bitte warten ..
Mitglied: pbelcl
08.02.2012 um 22:15 Uhr
Zitat von bastla:
Übrigens sind "tokens=1 delims= " ebenfalls Default und könnten daher weggelassen werden ...
DANKE!!

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 werds mal versuchen, wenn ich's nicht schaffe dann FRAGE ich

lg
Paul
Bitte warten ..
Mitglied: pbelcl
09.02.2012 um 19:40 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 ??
Bitte warten ..
Mitglied: bastla
09.02.2012 um 20:26 Uhr
Hallo pbelcl!

Etwa so:
if "%var:~-1%"==" " set "var=%var:~,-1%"
Grüße
bastla
Bitte warten ..
Mitglied: pbelcl
10.02.2012 um 14:09 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 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=%%i
Da 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??
Bitte warten ..
Mitglied: bastla
10.02.2012 um 14:47 Uhr
Hallo pbelcl!

Versuch es so:
01.
FOR /F %%i in ('DIRUSE.EXE -s -m -, "p:\Software\" ^|findstr "TOTAL"') do set "groesse=                       %%i" 
02.
echo %groesse:~-16%
Grüße
bastla
Bitte warten ..
Mitglied: pbelcl
11.02.2012 um 09:19 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?
Bitte warten ..
Mitglied: bastla
11.02.2012 um 21:03 Uhr
Hallo pbelcl!

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
Bitte warten ..
Mitglied: pbelcl
12.02.2012 um 07:56 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.

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.
:exit
Aufgerufen 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.
:exit
Die 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

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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Ubuntu
gelöst Status Kopiervorgang mit dd in log schreiben (3)

Frage von caspi-pirna zum Thema Ubuntu ...

Batch & Shell
gelöst Kl. Frage: Log-File schreiben per Batch (3)

Frage von Yauhun zum Thema Batch & Shell ...

Batch & Shell
gelöst Loginzeiten aus dem Ereignisprotokoll in Excel schreiben (1)

Frage von l-Ne0n zum Thema Batch & Shell ...

Batch & Shell
gelöst Selected Gridview Value in Variable schreiben (4)

Frage von reissaus73 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...