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

Pfad durchsuchen und bestimmten Ordner kopieren

Frage Entwicklung Batch & Shell

Mitglied: Alforno

Alforno (Level 1) - Jetzt verbinden

16.11.2009, aktualisiert 18.10.2012, 5723 Aufrufe, 14 Kommentare

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
Mitglied: Farbauti
16.11.2009 um 13:21 Uhr
Sollte in der Theorie so funktionieren:

01.
set SRCDIR=d:\programme\sicherungen\ 
02.
set DESTDIR=H:\ 
03.
set TMPFILE=%TEMP%\temptemp.tmp 
04.
 
05.
REM zeige Dir, sortiert nach Datum 
06.
dir /od /b %SRCDIR%>%TMPFILE% 
07.
 
08.
REM liest letzte Zeile (=neuester Dir-Eintrag) 
09.
tail -1 %TMPFILE% > %TMPFILE%2 
10.
 
11.
REM setzt Dir 
12.
set /p LATESTDIR=<%TMPFILE%2 
13.
 
14.
REM setzt datum in ziel dir 
15.
set NOWDIR=backup_%DATE:~-4,4%-%DATE:~-7,2%-%DATE:~-10,2% 
16.
 
17.
REM kopiert was auch immer... 
18.
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.
Bitte warten ..
Mitglied: Alforno
16.11.2009 um 16:17 Uhr
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
Bitte warten ..
Mitglied: Biber
16.11.2009 um 16:50 Uhr
Moin Alforno,

ohne temporäre Zwischenspeicherung müsste es so oder ähnlich aussehen:
01.
.... 
02.
for /f "delims=" %%i in ('dir /od /ad /b d:\temp') do set "newest=%%i" 
03.
...:: 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
Bitte warten ..
Mitglied: Alforno
16.11.2009 um 18:04 Uhr
Zitat von Biber:
01.
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.

Mit freundlichen Grüßen
Alforno
Bitte warten ..
Mitglied: Biber
16.11.2009 um 18:38 Uhr
Moin Alfonso,

in Farbautis Skizze eingefügt würde es so aussehen:
01.
set "SRCDIR=d:\programme\sicherungen" 
02.
set "DESTDIR=H:" 
03.
 
04.
:: --- hier ist jetzt ein bisschen Luft aus dem Käse gedrückt 
05.
:: --- eine Zeile bleibt: 
06.
FOR /F "delims=" %%i in ('dir /od /ad /b %SRCDIR%') do set "LATEXDIR=%%i" 
07.
 
08.
REM setzt datum in ziel dir 
09.
set NOWDIR=backup_%DATE:~-4,4%-%DATE:~-7,2%-%DATE:~-10,2% 
10.
 
11.
REM kopiert was auch immer... 
12.
copy %SRCDIR%\%LATEXDIR% %DESTDIR%\%NOWDIR%
in vollem Vertrauen in Farbauti, von daher ungetestet

Grüße
Biber
Bitte warten ..
Mitglied: Alforno
16.11.2009 um 20:20 Uhr
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.

Mit freundlichen Grüßen
Alforno
Bitte warten ..
Mitglied: TsukiSan
17.11.2009 um 03:48 Uhr
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:
01.
MD H:\backup_%date%
und im Anschluss die schon vorangegangenen Codes in deine Batchdatei einfügen.

Gruss
Tsuki
Bitte warten ..
Mitglied: Alforno
18.11.2009 um 20:40 Uhr
@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
Bitte warten ..
Mitglied: TsukiSan
19.11.2009, aktualisiert 18.10.2012
@Alforno,

bibers schnipsel funktioniert. Es ist das Prinzip! Die Ordnertiefe wurde auch schon mal in http://www.administrator.de/forum/datei-in-alle-unterordner-kopieren%2c ... diesem">href="http://www.administrator.de/forum/datei-in-alle-unterordner-kopieren%2c-aber-unterordner-tiefe-abgeben-k%c3%b6nnen-56338.html" title="http://www.administrator.de/forum/datei-in-alle-unterordner-kopieren%2c-aber-unterordner-tiefe-abgeben-k%c3%b6nnen-56338.html" onclick="window.open(this.href); return false;">http://www.administrator.de/forum/datei-in-alle-unterordner-kopieren%2c ... 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
01.
set "SRCDIR=D:\1\Alle" 
02.
set "DESTDIR=D:" 
03.
 
04.
:: --- hier ist jetzt ein bisschen Luft aus dem Käse gedrückt 
05.
:: --- eine Zeile bleibt: 
06.
FOR /F "delims=" %%i in ('dir /od /ad /b %SRCDIR%') do set "LATEXDIR=%%i" 
07.
 
08.
REM setzt datum in ziel dir 
09.
set NOWDIR=backup_%DATE:~-4,4%-%DATE:~-7,2%-%DATE:~-10,2% 
10.
 
11.
md %DESTDIR%\%NOWDIR% 
12.
 
13.
REM kopiert was auch immer... 
14.
move %SRCDIR%\%LATEXDIR% %DESTDIR%\%NOWDIR%
dann wird der letzte Ordner in meinem Pfad nach dem Backup-Ordner mit Datum kopiert.

Gruss
Tsuki
Bitte warten ..
Mitglied: Alforno
19.11.2009 um 09:51 Uhr
@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.

Mit freundlichen Grüßen
Alforno
Bitte warten ..
Mitglied: Biber
19.11.2009 um 10:02 Uhr
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
Bitte warten ..
Mitglied: Alforno
19.11.2009 um 17:00 Uhr
@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.

Mit freundlichen Grüßen
Alforno
Bitte warten ..
Mitglied: Biber
19.11.2009 um 18:14 Uhr
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
Bitte warten ..
Mitglied: Alforno
19.11.2009 um 19:39 Uhr
So, dank der Hilfe zur Selbsthilfe, habe ich den Fehler gefunden.

Hinter dieser Zeile:
01.
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.

Mit freundlichen Grüßen
Alforno
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(2)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (10)

Frage von 1410640014 zum Thema Backup ...