alforno
Goto Top

Pfad durchsuchen und bestimmten Ordner kopieren

Hallo,

ich bin auf der Suche nach einem Batch, der die folgende Aufgabe erledigt.

Ich habe zwei feste Pfade:

1. d:\programme\sicherungen\
2. H:\

Das Skript soll in dem 1. Pfad den zuletzt erstellten Ordner auf das Laufwerk H:\ kopieren.
Es wäre schön, wenn auf dem Laufwerk H:\ vorher automatisch ein Ordner nach dem schema "backup_aktuellesdatum" erzeugt werden würde.

Ich habe schon ein wenig im Forum gesucht, aber nichts 100% Passendes gefunden.

Wäre schön wenn jemand helfen kann.

Danke im Voraus.
Alforno

Content-ID: 129437

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

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

Farbauti
Farbauti 16.11.2009 um 13:21:22 Uhr
Goto Top
Sollte in der Theorie so funktionieren:

set SRCDIR=d:\programme\sicherungen\
set DESTDIR=H:\
set TMPFILE=%TEMP%\temptemp.tmp

REM zeige Dir, sortiert nach Datum
dir /od /b %SRCDIR%>%TMPFILE%

REM liest letzte Zeile (=neuester Dir-Eintrag)
tail -1 %TMPFILE% > %TMPFILE%2

REM setzt Dir
set /p LATESTDIR=<%TMPFILE%2

REM setzt datum in ziel dir
set NOWDIR=backup_%DATE:~-4,4%-%DATE:~-7,2%-%DATE:~-10,2%

REM kopiert was auch immer...
copy %SRCDIR%\%LATESTDIR% %DESTDIR%\%NOWDIR%

Benötigt wird dazu das "tail" Kommando aus dem Win Ressource Kit.
Das Script kann/sollte noch erweitert werden (Fehlerabfragen, abschließendes Löschen der Temp-Dateien).

Gruß, Farbauti.
Alforno
Alforno 16.11.2009 um 16:17:41 Uhr
Goto Top
Ich danke Dir.

Klingt gut, ich denke ich habe es soweit auch verstanden.

Könnte man den Umweg über eine temp-Datei nicht umgehen?
Kann man nicht direkt das "jüngste" Verzeichnis als das zu kopierende auslesen?

Danke Dir.

Alforno
Biber
Biber 16.11.2009 um 16:50:52 Uhr
Goto Top
Moin Alforno,

ohne temporäre Zwischenspeicherung müsste es so oder ähnlich aussehen:
....
for /f "delims=" %%i in ('dir /od /ad /b d:\temp') do set "newest=%%i"  
...:: ab hier dann mit der Variable %newest% arbeiten 

--> würde das "zuletzt angelegte Verzeichnis" der ersten Ebene unterhalb von d:\temp in die Variable %newest% schreiben
---> der Zusatz "delims=" ist für den Dfall, dass dieses Verzeichnis "Leerzeichen im Namen" hat.

Diese Mimik findest du auch über Forumssuche nach (sinngemäß) "Älteste Verzeichnisse löschen".

Grüße
Biber
Alforno
Alforno 16.11.2009 um 18:04:25 Uhr
Goto Top
Zitat von @Biber:
ab hier dann mit der Variable %newest% arbeiten  

Ja, das klingt gut, nur leider habe ich davon so gut wie keine Ahnung.

Als nächstes müßte dann wohl der eigentliche copy Befehl kommen.
Nur leider weiß ich nicht so wirklich wie.
Könnte man die beiden Pfade als Konstanten deklarieren?

Würde mich freuen wenn du mir nochmal helfen könntest.
Vielen Dank.

mfg
Alforno
Biber
Biber 16.11.2009 um 18:38:46 Uhr
Goto Top
Moin Alfonso,

in Farbautis Skizze eingefügt würde es so aussehen:
set "SRCDIR=d:\programme\sicherungen"  
set "DESTDIR=H:"  

:: --- hier ist jetzt ein bisschen Luft aus dem Käse gedrückt
:: --- eine Zeile bleibt:
FOR /F "delims=" %%i in ('dir /od /ad /b %SRCDIR%') do set "LATEXDIR=%%i"  

REM setzt datum in ziel dir
set NOWDIR=backup_%DATE:~-4,4%-%DATE:~-7,2%-%DATE:~-10,2%

REM kopiert was auch immer...
copy %SRCDIR%\%LATEXDIR% %DESTDIR%\%NOWDIR%

in vollem Vertrauen in Farbauti, von daher ungetestet

Grüße
Biber
Alforno
Alforno 16.11.2009 um 20:20:33 Uhr
Goto Top
Da scheint sich ein kleiner Fehler eingeschlichen zu haben.

Aus dem Ordner d:\programme\sicherungen\ soll der letzte Ordner komplett kopiert werden.

Wenn ich das Skript starte, dann wird zunächst garnichts kopiert und es wird auch kein Ordner erstellt.
Wenn ich in dem Ordner d:\programme\sicherungen\test\ eine Datei anlege und anschließend das Skript starte,
dann wird diese Datei kopiert und umbenannt nach backup_datum.

Da muss irgendwo ein kleiner Fehler sein, leider weiß ich nicht so wirklich wo ich suchen muss.

Vielleicht sieht es ja jemand.

Danke euch schonmal.

mfg
Alforno
TsukiSan
TsukiSan 17.11.2009 um 03:48:58 Uhr
Goto Top
Hallo Alforno,

wo nix ist, wird auch nix kopiert. Es müßte schon klar sein, dass sich in deinem Ordner "Test" Daten zum kopieren befinden müssen.
Um einen neuen Ordner anzulegen nimmst du zum Beispiel:
MD H:\backup_%date%
und im Anschluss die schon vorangegangenen Codes in deine Batchdatei einfügen.

Gruss
Tsuki
Alforno
Alforno 18.11.2009 um 20:40:08 Uhr
Goto Top
@tsuki

Leider funktioniert das alles nicht.
Es sollen nicht nur die Dateien aus dem Ordner kopiert werden, sondern der gesamte Ordner.

Nehmen wir an, in dem Ordner Sicherungen gibt es viele Unterordner, diese werden automatisch angelegt.
Nun soll immer der letzte Ordner komplett kopiert werden. (nicht nur der Inhalt des Ordners, sondern auch der Ordner selber)

Auf dem Ziellaufwerk solle ein Ordner angelegt werden nach dem Schema "backup_datum".

Wenn ich das jetzt ausprobiere, dann wird kein Ordner angelegt.

Würde mich freuen wenn sich das nochmal jemand ansehen könnte.

Danke.

Alforno
TsukiSan
TsukiSan 19.11.2009, aktualisiert am 18.10.2012 um 18:40:01 Uhr
Goto Top
@Alforno,

bibers schnipsel funktioniert. Es ist das Prinzip! Die Ordnertiefe wurde auch schon mal in diesem Thread behandelt.
Füge die Infos mit etwaigen Änderungen von Bibers Script zusammen und es funktioniert.
Wenn ich für Testzwecke mal Bibers letztes Script nehme und schreibe es so um
set "SRCDIR=D:\1\Alle"  
set "DESTDIR=D:"  

:: --- hier ist jetzt ein bisschen Luft aus dem Käse gedrückt
:: --- eine Zeile bleibt:
FOR /F "delims=" %%i in ('dir /od /ad /b %SRCDIR%') do set "LATEXDIR=%%i"  

REM setzt datum in ziel dir
set NOWDIR=backup_%DATE:~-4,4%-%DATE:~-7,2%-%DATE:~-10,2%

md %DESTDIR%\%NOWDIR%

REM kopiert was auch immer...
move %SRCDIR%\%LATEXDIR% %DESTDIR%\%NOWDIR%
dann wird der letzte Ordner in meinem Pfad nach dem Backup-Ordner mit Datum kopiert.

Gruss
Tsuki
Alforno
Alforno 19.11.2009 um 09:51:08 Uhr
Goto Top
@tsuki

Danke für die schnelle Rückmeldung.
Mit dem Befehl move wird der gesamte Ordner verschoben.
Ich möchte aber gerne das er kopiert wird.

Ich habe move durch copy ersetzt. Das führt dazu, dass nur noch der Inhalt des Ordners, aber nicht der gesamte Ordner kopiert wird.

Wenn du mir jetzt noch helfen könntest, dass der gesamte Ordner kopiert wird, dann hätten wir die Lösung.

Vielen Dank.

mfg
Alforno
Biber
Biber 19.11.2009 um 10:02:06 Uhr
Goto Top
Moin Alforno,

reicht es nicht, wenn du die Zeilen 11-14 ersetzt durch einen XCOPY-Befehl?

...
XCopy %SRCDIR%\%LATEXDIR% %DESTDIR%\%NOWDIR%\%LATEXDIR%\

ggf noch mit Anführungszeichen, falls Leerzeichen im Pfad und XCopy-Parametern ["XCopy "%SRCDIR%\%LATEXDIR%" "%DESTDIR%\%NOWDIR%\%LATEXDIR%\"]

Grüße
Biber
Alforno
Alforno 19.11.2009 um 17:00:05 Uhr
Goto Top
@Biber

Deinen Vorschlag habe ich gerade umgesetzt. Resultat ist, dass jetzt garnichts mehr kopiert wird.
Es wird auch kein neuer Ordner angelegt.

Eigentlich sollte das nicht so schwierig sein, oder?
Ich denke ich mache etwas falsch.

Ich verwende Windows 7, kann mir aber kaum vorstellen, dass das der Grund ist.

Es wäre wirklich super, wenn jemand mir aus der Misere hilft.

Danke.

mfg
Alforno
Biber
Biber 19.11.2009 um 18:14:07 Uhr
Goto Top
Moin Alforno,

wenn wir da mit bloßem Auge keine (Denk-)Fehler erkennen können, dann
  • starte doch diesen Winz-Schnipsel vom CMD-Prompt aus
  • und stelle minimal der XCOPY-Zeile ein "Echo " voran

Schau nach, was ausgeführt werden würde, copy&paste diese Ausgabe und schick genau dieses Copy&Pastilat auf die Reise.
Ggf mit einem Schalter /L hintendran, damit auch dieser Xcopy-Befehl nur simuliert.

Irgendwas muss er ja erzählen...

Wenn das nix hilft, dann schwerere Geschütze. Oben in den Batch das "Echo off " raus und ein "echo on" rein.

Ergebnis hier posten.

Grüße
Biber
Alforno
Alforno 19.11.2009 um 19:39:54 Uhr
Goto Top
So, dank der Hilfe zur Selbsthilfe, habe ich den Fehler gefunden.

Hinter dieser Zeile:
set NOWDIR=backup_%DATE:~-4,4%-%DATE:~-7,2%-%DATE:~-10,2%

War noch ein Leerzeichen gesetzt.
Das habe ich entfernt und nun läuft Alles.

Vielen Dank für Eure Mühe.

mfg
Alforno