Top-Themen

Aktuelle Themen (A bis Z)

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

Probleme mit der Verzeichnisstruktur bei xcopy (Archivierung nach Erstellungsdatum)

Frage Entwicklung Batch & Shell

Mitglied: mike0208

mike0208 (Level 1) - Jetzt verbinden

15.01.2009, aktualisiert 17:47 Uhr, 4963 Aufrufe, 13 Kommentare

Hallo zusammen,

ich habe ein kleines Problem mit der Erhaltung der Verzeichnisstruktur bei Andwendung von xcopy. Mein folgendes Skript kopiert alle Dateien aus einem Ordner und sortiert sie in neue Ordner die nach dem Erstellungsjahr der Datei erzeugt werden.

@Echo off & Setlocal



Set "QuellDirFiles=M:\Dokumente und Einstellungen\Desktop\xcopy"
Set "ZielDirRoot=M:\Dokumente und Einstellungen\Desktop\xcopy2008"


for /R "%QuellDirFiles%" %%i in (*.*) do (for /f "tokens=3 delims=. " %%a in ("%%~ti") do @if not exist "%ZielDirRoot%\%%a" md "%ZielDirRoot%\%%a")

for /R "%QuellDirFiles%" %%i in (*) do @for /f "tokens=3 delims=. " %%a in ("%%~ti") do xcopy "%%~fi" "%ZielDirRoot%\%%a" /s /e


Nun zum Problem, wenn ich nur Dateien sortieren möchte klappt dies Wunderbar, aber sobald Ordner und Unterordner ins Spiel kommen, stimmt die Verzeichnisstruktur nicht mehr und Dateien liegen nur im ersten Verzeichnis, was auch logisch ist bei meiner momentanen Implementierung
Vielleicht kann mir jemand helfen wie ich mein xcopy oder oder die for Anweisung optimieren kann. Vielen Dank.

Viele Grüße
Mike
Mitglied: Biber
15.01.2009 um 18:53 Uhr
Moin Mike0208,

reicht es nicht, wenn Du statt des XCOPY-Befehls einfach "nur" den normalen COPY-Befehl verwendest?

Grüße
Biber
Bitte warten ..
Mitglied: mike0208
15.01.2009 um 20:49 Uhr
Hallo Biber,

danke für die schnelle Antwort. Mit dem normalen COPY Befehl hab ich leider nur die files in meinem Zielordner(alle auf der ersten Ebene und ohne Ordner), ich würde aber gerne die files in der Verzeichnisstruktur liegen haben wie im Quellverzeichnis.


Wenn ich nun den Befehl zum kopieren so umänder:

for %%i in ("%QuellDirFiles%") do @for /f "tokens=3 delims=. " %%a in ("%%~ti") do xcopy "%%~fi" "%ZielDirRoot%\%%a" /s /e

Hab ich zwar meine korrekte Verzeichnisstruktur, aber die files werden dann nicht nach ihrem erstellten Datum sortiert.
Bitte warten ..
Mitglied: Biber
15.01.2009 um 22:45 Uhr
Moin mike0208,

ah... jetzt glaube ich zu wissen, was Du meinst...

Dann so:
01.
@Echo off & Setlocal 
02.
 
03.
Set "QuellDirFiles=M:\Dokumente und Einstellungen\Desktop\xcopy" 
04.
Set "ZielDirRoot=M:\Dokumente und Einstellungen\Desktop\xcopy2008" 
05.
FOR /R "%QuellDirFiles%" %%i in (*) DO ( 
06.
    FOR /F "tokens=3 delims=. " %%a IN ("%%~ti") DO ( 
07.
     XCopy "%%~fi" "%ZielDirRoot%\%%a\" /s /e 
08.
 ))
Die erste FOR/R-Anweisung habe ich weggelassen, XCopy legt die Verzeichnisse ohnehin an.

Entscheidend ist nicht das optische Auseinanderziehen in mehrere Zeilen (ist nur zur Lesbarkeit),
wichtig ist der Backslash am Ende des Zielverzeichnisses.

Grüße
Biber
Bitte warten ..
Mitglied: mike0208
15.01.2009 um 22:56 Uhr
Hallo Biber,
ja das habe ich auch schon versucht, leider hab ich nun in meinem Zielverzeichnis die Dateien immer auf der ersten Ebene und nicht in den entsprechenden Verzeichnissen wo sie eigentlich hinsollten. Die Verzeichnisse sind da, nur eben leer. Und jedes Unterverzeichnis taucht auch nochmals in der ersten Ebene auf, die sind zuviel.
Denke der Fehler liegt in der rekursivität oder so... hmmm

Grüße Mike
Bitte warten ..
Mitglied: Biber
15.01.2009 um 23:14 Uhr
Moin mike0208,

Dann bitte ich um Erläuterung.
Ich erhalte folgendes Ergebnis
>dir "y:\Eigene Dateien\Eigene Musik" /b /s 
y:\Eigene Dateien\Eigene Musik\Beispielmusik.lnk 
y:\Eigene Dateien\Eigene Musik\DEFAULT.PLS 
y:\Eigene Dateien\Eigene Musik\Desktop.ini 
y:\Eigene Dateien\Eigene Musik\iTunes 
y:\Eigene Dateien\Eigene Musik\iTunes\iTunes Library.itl 
y:\Eigene Dateien\Eigene Musik\iTunes\iTunes Music 
y:\Eigene Dateien\Eigene Musik\iTunes\iTunes Music Library.xml 
 
(=23:09:42  D:\temp=) 
>dir "y:\Eigene Dateien\Eigene Kopie" /b /s 
y:\Eigene Dateien\Eigene Kopie\06 
y:\Eigene Dateien\Eigene Kopie\08 
y:\Eigene Dateien\Eigene Kopie\06\iTunes Library.itl 
y:\Eigene Dateien\Eigene Kopie\06\iTunes Music 
y:\Eigene Dateien\Eigene Kopie\06\iTunes Music Library.xml 
y:\Eigene Dateien\Eigene Kopie\08\Beispielmusik.lnk 
y:\Eigene Dateien\Eigene Kopie\08\DEFAULT.PLS 
y:\Eigene Dateien\Eigene Kopie\08\Desktop.ini 
y:\Eigene Dateien\Eigene Kopie\08\iTunes 
y:\Eigene Dateien\Eigene Kopie\08\iTunes\iTunes Music
... mit dem geposteten Batch und
  • dem Quellverzeichnis ""y:\Eigene Dateien\Eigene Musik"
  • dem zielverzeichnis ""y:\Eigene Dateien\Eigene Kopie"

in dem Quellverzeichnis sind Dateien aus 2006 und 2008... und die werden entmischt.
Wie sollte es richtiger aussehen im Ergebnis?

Grüße
Biber
Bitte warten ..
Mitglied: mike0208
15.01.2009 um 23:28 Uhr
Hallo Biber,

danke für deine Bemühungen, nehmen wir mal die Datei "iTunes Library.itl" die vor dem Kopieren in dem Ordner iTunes steckt. Aber nach dem Kopieren liegt sie nicht mehr in diesem Ordner. Sondern ich nenne es mal "ersten Ebene" des Zielordners. So geschieht es auch wenn man Unterordner von Unterordnern hat. Ich hoffe mein Problem ist nun etwas verständlicher, ansonsten versuche ich es gerne nochmals

Grüße
Mike
Bitte warten ..
Mitglied: Biber
15.01.2009 um 23:34 Uhr
Moin mike0208,

jetzt glaube ich NOCH mehr verstanden zu haben.

Folgendes Ergebnis im angepassten Batch:
>dir "y:\Eigene Dateien\Eigene Kopie2" /b /s 
y:\Eigene Dateien\Eigene Kopie2\06 
y:\Eigene Dateien\Eigene Kopie2\08 
y:\Eigene Dateien\Eigene Kopie2\06\iTunes 
y:\Eigene Dateien\Eigene Kopie2\06\iTunes\iTunes Library.itl 
y:\Eigene Dateien\Eigene Kopie2\06\iTunes\iTunes Music 
y:\Eigene Dateien\Eigene Kopie2\06\iTunes\iTunes Music Library.xml 
y:\Eigene Dateien\Eigene Kopie2\08\Beispielmusik.lnk 
y:\Eigene Dateien\Eigene Kopie2\08\DEFAULT.PLS 
y:\Eigene Dateien\Eigene Kopie2\08\Desktop.ini 
y:\Eigene Dateien\Eigene Kopie2\08\iTunes 
y:\Eigene Dateien\Eigene Kopie2\08\iTunes\iTunes Music
... mit folgender Variante.
01.
:: ----snipp JahrArchivXCopy.cmd --- 
02.
@Echo off & SetLocal EnableDelayedExpansion 
03.
 
04.
Set "QuellDirFiles=Y:\Eigene Dateien\Eigene Musik" 
05.
Set "ZielDirRoot=Y:\Eigene Dateien\Eigene Kopie2" 
06.
REM              0_________1_________2_________3_ [10er-Stellen] 
07.
REM              01234567890123456789012345678901 [ 1erStellen] 
08.
FOR /R "%QuellDirFiles%" %%i in (*) do @( 
09.
    for /f "tokens=3 delims=. " %%a in ("%%~ti") do ( 
10.
     call :setfipart "%%~fi"      
11.
     xcopy "%%~fi" "%ZielDirRoot%\%%a\!fipart!" /s /e 
12.
  ))    
13.
goto :eof 
14.
   
15.
:setfipart 
16.
Set "Fipart=%~dp1" 
17.
Set "FiPart=%fipart:~31%" 
18.
goto :eof 
19.
:: ----snapp JahrArchivXCopy.cmd ---
Änderungen:
  • Ergänzung von EnableDelayedExpansion in der 1. (Code-)Zeile
  • zwei REM-Zeilen zum Abzählen der Länge des QuellRoot-Pfades. 29 Zeichen lang +"\" = 30 Zeichen ist der Rootpfad lang
  • der Restpfad der Quelldatei begint also ab Zeichen 31 des Gesamt-Quell-Pfad+Dateinamens %%~fi
  • der Rest sollte dann nachvollziehbar sein.

Grüße
Biber
Bitte warten ..
Mitglied: mike0208
16.01.2009 um 00:10 Uhr
Hey Biber,

es geht, unglaublich. Vielen Vielen Dank für deine Hilfe und Bereitschaft echt genial.
Ich kenn mich leider nur in der Shell aus, darum hab ich keinen Plan was in der Batch so möglich ist.



Grüße Mike
Bitte warten ..
Mitglied: Biber
16.01.2009 um 12:27 Uhr
Moin mike0208,

auf Anfrage auch noch die etwas wartbarere Fassung mit der Länge/dem Offset in einer Variablen.
01.
:: ----snipp JahrArchivXCopy.cmd ---  
02.
@Echo off & Setlocal enableDelayedExpansion 
03.
 
04.
:: ## Die nächsten zwei Zeilen anpassen... 
05.
Set "QuellDirRoot=Y:\Eigene Dateien\Eigene Musik" 
06.
Set "ZielDirRoot=Y:\Eigene Dateien\Eigene Kopie2" 
07.
:: ## ab hier nichts mehr anzupassen... 
08.
 
09.
REM Länge von QuellDirRoot+2 ermitteln und merken 
10.
Echo %QuellDirRoot%>%temp%\fipartOffset 
11.
FOR %%i in (%temp%\fipartOffset) DO SET "fipartOffset=%%~zi" 
12.
 
13.
FOR /R "%QuellDirRoot%" %%i in (*) do @( 
14.
    for /f "tokens=3 delims=. " %%a in ("%%~ti") do ( 
15.
     call :setfipart "%%~fi"      
16.
     xcopy "%%~fi" "%ZielDirRoot%\%%a\!fipart!" /s /e 
17.
  ))    
18.
goto :eof 
19.
   
20.
:setfipart 
21.
Set "Fipart=%~dp1" 
22.
Set "FiPart=!fipart:~%fipartOffset%!" 
23.
goto :eof 
24.
:: ----snipp JahrArchivXCopy.cmd --- 
Grüße
Biber

[Edit 21.01.2008] Falschen Variablennamen %QuellDirFiles% in %QuellDirRoot% korrigiert. Siehe unten. [/Edit]
Bitte warten ..
Mitglied: mike0208
21.01.2009 um 19:42 Uhr
Hallo Biber,
als ich das Skript nun im Alltag einsetzen wollte, kam es leider zu Fehlern. Wenn ich nur wenige Dateien kopiere klappt es, sind es aber ca. 20.000 kommt es zu Fehlern.
Manchmal habe ich zuviele oder zu wenige Dateien oder Ordner und manche Dateien liegen in einem falschen Verzeichnis (aber nicht im falschen Jahresverzeichnis, Versteckte Verz. wurden auch berückssichtigt). Des öfteren kommt es beim ausführen vor, ob man die vorhandene Datei ersetzen möchte (Zielordner wurde vor neuen Versuchen natürlich gelöscht). Der Zielordner ist natürlich auch in einem Verzeichnis, wo nicht gesucht wird

Hast du noch eine Idee wo sich ein Fehler befinden könnte?
Und warum werden manchmal mehr als eine Datei aufeinmal kopiert, müsste nicht jede Datei nach diesen Skript einzeln kopiert werden?

Vielen Dank
Grüße Mike


Hier mein momentaner Stand:

Echo off & Setlocal enableDelayedExpansion

Set "ZielDirRoot=M:\Dokumente und Einstellungen\m\tmp_mike"
Set "QuellDirFiles=M:\Dokumente und Einstellungen\m\Desktop"

Echo %QuellDirRoot%>%temp%\fipartOffset
FOR %%i in (%temp%\fipartOffset) DO SET "fipartOffset=%%~zi"


FOR /R "%QuellDirFiles%" %%i in (*.*) do @(
REM Die DateiListe.txt enthält alle Dateien die gefunden werden
FOR /F "tokens=3 delims=. " %%a in ("%%~ti") do (
call :setfipart "%%~fi"
echo Datei: %%i >> "%ZielDirRoot%\DateiListe.txt"
echo "%%~fi"
IF %%a GEQ 2009 (
xcopy "%%~fi" "%ZielDirRoot%\2009\!fipart!" /s /e /y
) ELSE (
xcopy "%%~fi" "%ZielDirRoot%\2008\!fipart!" /s /e /y
)
))
goto :eof

:setfipart
Set "Fipart=%~dp1"
Set "FiPart=!fipart:~%fipartOffset%!"
goto :eof
Bitte warten ..
Mitglied: Biber
21.01.2009 um 20:06 Uhr
Moin mike0208,

jetzt, wo Du es sagst.....

ist mir ja oberpeinlich..... ein meiner Skizze ist ein zwar beliebter, aber dennoch saublöder Fehler drin.

Ich definiere irgendwo eine Variable %QuellDirFiles% und arbeite eine Zeile später mit dem Variablennamen, den ich mir 5 Sekunden lang merken konnte.
Und der heisst dann auch erkennbar ähnlich. Nämlich %QuellDirRoot%.

.... 
Set "QuellDirFiles=M:\Dokumente und Einstellungen\m\Desktop" 
 
Echo %QuellDirRoot%>%temp%\fipartOffset
Bitte ändere alle Vorkommnisse von "QuellDirFiles" in "QuellDirRoot".

Das sollte die Fehlerhäufigkeit spürbar senken.

Sorry nochmal
Biber
Bitte warten ..
Mitglied: mike0208
21.01.2009 um 20:09 Uhr
Hallo Biber,

sorry das war ein copy paste Fehler von mir

das ist nun mein akueller stand:

@Echo off & Setlocal enableDelayedExpansion

Set "ZielDirRoot=C:\Users\Mike\Desktop\b"
Set "QuellDirRoot=C:\Users\Mike\Desktop\a"

REM Länge von QuellDirRoot+2 ermitteln und merken
Echo %QuellDirRoot%>%temp%\fipartOffset
FOR %%i in (%temp%\fipartOffset) DO SET "fipartOffset=%%~zi"
echo %fipartOffset%

FOR /R "%QuellDirRoot%" %%i in (*.*) do @(
FOR /F "tokens=3 delims=. " %%a in ("%%~ti") do (
call :setfipart "%%~fi"
echo "%%~fi"
IF %%a GEQ 2009 (
xcopy "%%~fi" "%ZielDirRoot%\2009\!fipart!" /s /e
) ELSE (
xcopy "%%~fi" "%ZielDirRoot%\2008\!fipart!" /s /e
)
))

:setfipart
Set "Fipart=%~dp1"
Set "FiPart=!fipart:~%fipartOffset%!"
goto :eof



und warum kommt wenn man sehr viele Dateien kopiert, die Frage ob ich die Datei übschreiben möchte? Das heißt doch er wird hier einiges zuviel gemacht (Zielordner ist natürlich leer vor dem ausführen )
Bitte warten ..
Mitglied: Biber
21.01.2009 um 21:07 Uhr
Moin mike0208,

dafür können eigentlich nur die beiden XCopy-Parameter "/s /e" verantwortlich sein.
Die habe ich damals bei meinen ersten Herantast-Versuchen von Deinem Ausgangsschnipsel blind übernommen.
Und, wie Du ja weißt, Copy & Paste ist nach Schwarzarbeit und der F.D.P. das drittgrößte volkswirtschaftliche Risiko.

Lass die beiden Parameter weg [d.h. der Parameter /e ist ohnehin Dönekens, aber /s stört in Deinem Fall.].

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch Xcopy Probleme
gelöst Frage von GtaGamerBatch & Shell3 Kommentare

Hallo Administrator Community, Zurzeit versuche ich ein Tool für GTA 5 zu entwickeln, wo beim Start mit einer Batch ...

Exchange Server
Lokale bzw. Portable Archivierung Outlook - Cache Probleme
Frage von fabio84Exchange Server1 Kommentar

Hallo Admins, Vorgeschichte ein Outlook Power User möchte seine Elemente aus seinem Hauptpostfach "archivieren", um dieses klein und kompakt ...

Batch & Shell
Verzeichnisstruktur mit datenbank abgleichen
Frage von woidl85Batch & Shell1 Kommentar

hallo zusammen, beine shell kentnisse sind leider nicht ausreichend, ich versuche ein script zu schreiben welches per cron-job alle ...

Batch & Shell
Datein nach Erstellungsdatum in Unterornder verschieben
gelöst Frage von xyxy-yxBatch & Shell20 Kommentare

Hallo, ich möchte alle Dateien nach Erstellungsdatum in datumbenannte Unterordner kopieren und eventuell diesen auch erstellen, wenn er nicht ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 19 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 21 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Windows Server
Sichere Remote Desktop Verbindung wie?
gelöst Frage von nuss33Windows Server11 Kommentare

Hallo zusammen, eins vorweg: Ich besitze einen privaten Windows Server 2008 R2 zu Hause im Netzwerk er wird nicht ...