mick111
Goto Top

Mit xCopy kopierte Verzeichnisse im Logfile nur den Verzeichnisnamen dokumentieren

Hallo Leute,

ich habe hier aus verschiedenen Beiträgen mir bereits ein paar Codes zusammenkopiert.
Ich möchte per xCopy größere Verzeichnisse, ca. 80GB groß, kopieren.
Mich interessiert in einer Logdatei nicht der Inhalt der Verzeichnisse, sondern nur der Verzeichnisname selbst (der enthält alle relevanten Informationen, wie Datum und Uhrzeit).
Nach dem Kopieren wird eine Routine gestartet, die das älteste Backup von insgesamt 4 Backups löscht. Das funktioniert.
Das Kopieren haben wir so gelöst (Bsp. 1) allerdings stehen in der Logdatei mehrere MB an Daten.
In Beispiel 1 würde ich gerne den xCopy Befehl so anwenden, sodass in der Logdatei nicht die kompletten Daten, sondern nur die Verzeichnisnamen aufgelistet oder dargestellt werden.
Wie kann man dies realisieren?

Grüße
Mick

Bsp. 1

--SICHERN DER DATEN--

rem @echo off

Set Quelle=D:\Daten
Set Ziel1=D:\Verzeichnis1
Set Ziel2=D:\Verzeichnis2
Set Log=D:\Backup.log

echo. >>%log%
echo. >>%log%

echo ------------------------------------------------------ >>%log%
echo. >>%log%
%Log% Echo Datum: %date% %time%


echo ------------------------------------------------------ >>%log%
echo. >>%log%
%Log% Echo Datum: %date% %time% %Ziel1%
%Log% Xcopy "%Quelle%%1" "%Ziel1%" /I /H /E /Y
echo. >>%log%
%Log% Echo Datum: %date% %time% %Ziel2%
%Log% Xcopy "%Quelle%%1" "%Ziel2%" /I /H /E /Y

IF %Errorlevel% EQU 0 (
>>%Log% Echo %time% Datei %1 erfolgreich kopiert
) Else (
>>%Log% Echo %time% Datei %1 NICHT kopiert, Fehler %Errorlevel%
)

Goto :Eof

Content-ID: 245182

Url: https://administrator.de/contentid/245182

Ausgedruckt am: 25.11.2024 um 14:11 Uhr

emeriks
emeriks 31.07.2014 um 13:02:53 Uhr
Goto Top
Hi,
ich würde einfach statt xcopy das robocopy benutzen und hier mit Parameter /NFL arbeiten.

E.
mick111
mick111 31.07.2014 um 13:13:51 Uhr
Goto Top
Nein Danke, kein Robocopy, nur Windows Boardmittel.
emeriks
emeriks 31.07.2014 um 14:26:38 Uhr
Goto Top
http://de.wikipedia.org/wiki/Robocopy

Zitat:
"Es ist weit flexibler als das mit älteren Windows/DOS-Versionen ausgelieferte copy oder xcopy. Während es früher über das „Windows Resource Kit“ nachinstalliert werden musste, ist es in den Windows-Versionen ab Vista – auch in Windows Servern ab Version 2008 – standardmäßig enthalten und kann direkt aus der Kommandozeile heraus bzw. in der Powershell verwendet werden."

Gut. Dieser Artikel ist jetzt nicht der Oberhammer. Aber kurz und präzise.

F.
mick111
mick111 31.07.2014 um 15:05:34 Uhr
Goto Top
Wusste ich nicht, ich kannte es nur von früher, wo man extra downloaden musste.
Wir möchten es aber trotzdem gerne mit xCopy realisieren, respektive der Kunde.
Und bei uns ist der Kunde KIK.

Trotzdem Danke.

Mick
mick111
mick111 31.07.2014 aktualisiert um 16:01:55 Uhr
Goto Top
Hallo Emeriks,

rein interessehalber haben wir uns das Robocopy mit NFL angeschaut. Hier listet er uns ebenfalls alle Unterverzeichnisse auf und das sind bei 2 GB an Daten schon soviele Unterverzeichnisse, dass man den Überblick verliert. Ich brauche nur das oberste Verzeichnis.

z. B.:

DatenBackup_2014_07_31_15_39_20 (das ist das oberste Verzeichnis, diese Info brauchen wir, keine Unterverzeichnisse)

Ich mache mal einen Auszug, wie es z. B. mit Robocopy kommt:
Wie würde man in Robocopy oder xCopy die Unterverzeichnisse im Log nicht dokumentiert bekommen?

2 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\101\
1 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\105\
2 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\107\
1 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\109\
2 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\111\
1 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\113\
2 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\115\
1 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\117\
2 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\119\
1 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\121\
2 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\123\
1 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\125\
2 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\127\
1 D:\Sicherung\DatenBackup_2014_07_31_15_39_20\FileStores\Test\000\000\000\000\000\000\129\


Mick
Endoro
Endoro 31.07.2014 um 22:17:55 Uhr
Goto Top
Hey,
du könntest xcopy mit geeigneten Delimitern in eine For-f-Schleife packen, etwa so:
for /f "tokens=1-3delims=\" %a in ('xcopy "%cd%" "%temp%" /I /H /E /Y') do @echo(%~a\%~b\%~c  
Gruss, Endoro
mick111
mick111 31.07.2014 um 22:30:01 Uhr
Goto Top
Hallo Endoro,

danke.
Kann es sein, das Dir da etwas beim Kopieren abhanden gekommen ist?
Ich bin da nicht so der Ober Guru face-wink

Gruss
Mick
Endoro
Endoro 01.08.2014 um 08:54:12 Uhr
Goto Top
Hey, es ist kein fertiges Programm, nur ein Hinweis zum Weiterkommen.
Du kennst die Syntax? Gruss, Endoro
mick111
mick111 01.08.2014 um 09:51:15 Uhr
Goto Top
Hallo Endoro,

ich weiss, das das kein fertiges Script ist face-wink
Nein, nicht so vertraut mit der Syntax...., leider.
Grundlegende Dinge, ok.
Ich habe oben in meinem Beitrag, das was ich bisher habe.
(Ich habe etwas ähnliches noch mit DIR und automatischem Löschen von Sicherungen, die mehr als x Verzeichnisse im Laufwerk enthalten.
Nur das umzusetzen auf xcopy macht mir Probleme.
Wäre schön, wenn Du noch paar Infos mehr hättest für mich.
Danke im Voraus.
Gruss
Mick
Endoro
Endoro 03.08.2014 um 15:07:34 Uhr
Goto Top
Hey,
so könnte es in dein Script eingebaut werden:
@echo off &setlocal
Set "Quelle=D:\Daten"  
Set "Ziel1=D:\Verzeichnis1"  
Set "Ziel2=D:\Verzeichnis2"  
Set "Log=D:\Backup.log"  
    
>>%log% echo(
>>%log% echo(

>>%log% echo ------------------------------------------------------
>>%log% echo(
>>%Log% Echo Datum: %date% %time%

>>%log% echo ------------------------------------------------------
>>%log% echo(
>>%Log% Echo Datum: %date% %time% %Ziel1%
for /f "tokens=1-3delims=\" %%a in ('xcopy "%Quelle%%1" "%Ziel1%" /I /H /E /Y') do >>%log% echo(%%~a\%%~b\%%~c  
>>%log% echo(
>>%Log% Echo Datum: %date% %time% %Ziel2%
for /f "tokens=1-3delims=\" %%a in ('xcopy "%Quelle%%1" "%Ziel2%" /I /H /E /Y') do >>%log% echo(%%~a\%%~b\%%~c  

IF %Errorlevel% EQU 0 (
	>>%Log% Echo %time% Datei %1 erfolgreich kopiert
) Else (
	>>%Log% Echo %time% Datei %1 NICHT kopiert, Fehler %Errorlevel%
)
Die Fehlerabfrage funktioniert so natürlich nicht.
Gruss, Endoro
mick111
mick111 03.08.2014 um 18:40:20 Uhr
Goto Top
Hallo Endoro,

danke erst mal für Deine Unterstützung.
Jetzt läuft wenigstens mal meine Schleife.
In meiner Log steht nun eine Zeile pro Unterverzeichnis, sprich in meinem Test sind es 1900 Verzeichnisse, somit 1900 Zeilen
Ich habe die for Schleife mal etwas abgeändert, jetzt tut sie zwar, aber das ist eigentlich nicht richtig, da der Sinn der Schleife verloren geht, richtig?
Tokens brauche ich nur 3, das reicht mir als Ergebnis... das habe ich nun draus gemacht:

for /f "tokens=3 delims=\" %%a in ('xcopy "%Quelle%%1" "%Ziel1%" /I /H /E /Y') do >>%log% echo %%~a & goto :eof
:eof

Wie gesagt, kopiere ich 4 Backups, dann läuft die Schleife 1x und ich bekomme als Ergebnis nur 1 Zeile im log.
Ich füge Dir jetzt mal das Ergebnis vom Log ein. Der erste Durchlauf war mit der begrenzten Schleife, der 2. Durchlauf mit entferntem goto eof, also im Prinzip wie Du vorhin geschickt hast (ich habe meine Test´s aber bis auf ein paar wenige Verzeichnisse, 5-6, gelöscht, hatte keine Lust auf je 1900 Zeilen face-wink ) Beachte bitte auch das Datum im Dateinamen:


Datum: 03.08.2014 18:01:06,97

Datum: 03.08.2014 18:01:06,98 D:\Verzeichnis1
DatenBackup_2014_07_30_11_08_26



Datum: 03.08.2014 18:05:06,68

Datum: 03.08.2014 18:05:06,69 D:\Verzeichnis1
DatenBackup_2014_07_30_11_08_26
DatenBackup_2014_07_30_11_08_26
DatenBackup_2014_07_30_11_08_26
DatenBackup_2014_07_30_11_08_26
DatenBackup_2014_07_30_11_08_26
DatenBackup_2014_07_30_11_25_30
DatenBackup_2014_07_30_11_25_30
DatenBackup_2014_07_30_11_25_30
DatenBackup_2014_07_30_11_25_30
DatenBackup_2014_07_30_11_25_30
DatenBackup_2014_07_30_14_33_46
DatenBackup_2014_07_30_14_33_46
DatenBackup_2014_07_30_14_33_46
DatenBackup_2014_07_30_14_33_46
DatenBackup_2014_07_30_14_33_46
DatenBackup_2014_07_31_15_39_20
DatenBackup_2014_07_31_15_39_20
DatenBackup_2014_07_31_15_39_20
DatenBackup_2014_07_31_15_39_20
DatenBackup_2014_07_31_15_39_20
DatenBackup_2014_07_31_15_39_20
DatenBackup_2014_07_31_15_39_20

(dir /Ad /A-h /b /O-N wäre genau das richtige Ergebnis)

Zur Info: Es wird in Zukunft nur ein Backup pro Tag kopiert, also würde die Schleifenbegrenzung funktionieren, aber was ist, wenn es mal hakt? und was auch noch ist, es ist nicht richtig. Der Pedant face-wink
Hast Du noch eine Idee?

Gruss
Mick
Endoro
Endoro 03.08.2014 um 19:03:57 Uhr
Goto Top
Was stört genau? Die Doubletten und die Sortierung?
Gruss, Endoro
mick111
mick111 03.08.2014 aktualisiert um 19:20:17 Uhr
Goto Top
die Doubletten. bei 1900 und mehr Zeilen verlierst du den Überblick, was eigentlich kopiert wurde. Es sind bei einem Backup ca. 80GB an Daten, wie viele Verzeichnisse möchte ich gar nicht wissen face-wink

Wenn Du mal mein Ergebnis ansiehst, dann wäre das hier genau das richtige.

Datum: 03.08.2014 18:01:06,98 D:\Verzeichnis1
DatenBackup_2014_07_30_11_08_26

Natürlich bei mehreren Backups so:

Datum: 03.08.2014 18:01:06,98 D:\Verzeichnis1
DatenBackup_2014_07_30_11_08_26
DatenBackup_2014_07_31_15_39_20
DatenBackup_2014_07_30_14_33_46

Hab mir schon überlegt, ob das ginge, wenn man das Ergebnis von DIR nimmt und der Schleife übergibt.
Sortierung ist Nebensache.

Gruss
Mick
Endoro
Endoro 04.08.2014 um 01:59:23 Uhr
Goto Top
Wenn du nichts kopieren möchtest:
dir /ad-h /b /o-n /s D:\Daten > D:\Backup.log
Gruss, Endoro
mick111
mick111 04.08.2014 um 16:15:57 Uhr
Goto Top
Hallo Endoro,

doch, schon kopieren. DIR oben ist kein Problem, das habe ich bei einem anderen Script schon.
(mein Wunsch: Xcopy mit der Darstellung von DIR, also eine Zeile pro Backup, das kriege ich nicht hin)

Ich habe eine Backup die kopiere ich, dann wäre das folgende Ergebnis ganz gut
das erhalte ich bereits, wenn ich die Schleife 1x laufen lasse:

Datum: 03.08.2014 18:01:06,98 D:\Verzeichnis1
DatenBackup_2014_07_30_11_08_26

Habe ich aber 2 und mehr Backups, die kopiert werden sollen, dann gibt es ein Problem mit meiner Schleife, da sie nur 1x durchläuft.
Werden 2 oder mehr Backups kopiert, dann wäre das Ergebnis wünschenswert:

Datum: 03.08.2014 18:01:06,98 D:\Verzeichnis1
DatenBackup_2014_07_30_11_08_26
DatenBackup_2014_07_31_15_39_20
DatenBackup_2014_07_30_14_33_46

Um 2 Uhr Nachts kam deine Antwort...., Du bist ja fast so schlimm wie ich face-wink


Gruss
Karlheinz
mick111
mick111 23.08.2014 um 17:32:23 Uhr
Goto Top
Hallo Leute,

vielleicht könntet Ihr mir nochmal helfen.
Ich habe eine for Schleife, funktioniert auch soweit. Allerdings brauche ich eine Variable von dieser Schleife noch ein 2. Mal. Das müsste mit Setlocal doch gemacht werden, nur ich kriege das nicht auf die Reihe. Es geht um %%~a. Ich habe die in die Fehlerabfrage unten mal eingetragen, dort wo ich sie brauche.


for /f "tokens=3 delims=\" %%a in ('xcopy "%Quelle%%1" "%Ziel2%" /I /H /E /Y') do >>%Log% echo Kopiere %%~a ...& goto :eof2
:eof2

IF %Errorlevel% EQU 0 (
%Log% Echo %time% Backup %%~a erfolgreich kopiert
) Else (
%Log% Echo %time% Backup %%~a NICHT kopiert, Fehler %Errorlevel%
)

Danke Mick