maexchens
Goto Top

Xcopy - Kopien im weiteren Zielordner speichern

Ich versuche, eine Batch-Datei zu schreiben. Damit möchte ich mit Xcopy vom Quellordner Dateien in einen Ordner "Ziel1" kopieren. Der Parameter /D stellt sicher, dass nur die neuen oder geänderten Dateien kopiert werden. Das klappt gut.

Ich benötige die kopierten Dateien jedoch auch in einem Ordner "Ziel2". Dort werden sie in ein anderes Dateiformat konvertiert. In diesen Ordner ("Ziel2") sollen ausschließlich diejenigen Dateien kopiert werden, die bei dem jeweiligen Aufruf des Befehls Xcopy in den Ordner "Ziel1" kopiert wurden.

Content-Key: 138213

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

Ausgedruckt am: 29.03.2024 um 08:03 Uhr

Mitglied: bastla
bastla 15.03.2010 um 09:45:03 Uhr
Goto Top
Hallo MaexchenS und willkommen im Forum!

In diesem Fall kannst Du Dir den Schalter "/L" zunutze machen, um vorweg eine Liste der benötigten Dateien zu erzeugen - diese Liste kannst Du dann per "for /f"-Schleife abarbeiten und jeweils beide Kopiervorgänge ausführen ...

Grüße
bastla
Mitglied: edepfau
edepfau 15.03.2010 um 12:46:44 Uhr
Goto Top
da gibt es einige Wege...
ich würde in einem Batchfile
a) alle Dateien in Ziel1 das A-Attribut zurücksetzen: "attrib -A ziel1\*.*"
b) xcopy nach Ziel1 durchführen
c) xcopy mit den selben Optionen plus "/A" von Ziel1 nach Ziel2

Vorteil: xcopy kann mehr als der copy-Befehl, z.B. ACLs und hidden Attribute erhalten, oder rekursiv kopieren (Bäume).

Ede
Mitglied: MaexchenS
MaexchenS 16.03.2010 um 05:59:56 Uhr
Goto Top
Hallo bastla,

danke für die schnelle Hilfe! Ich habe das gleich ausprobiert. Die Batchdatei hat die Dateien vom Quelllaufwerk wunschgemäß sowohl in das Laufwerk Ziel1 als auch Ziel2 geschrieben. Als ich die Stapelverarbeitungsdatei ein zweites mal aufgerufen habe, hat es jedoch leider nicht nur die zwischenzeitlich im Quelllaufwerk hinzugekommenen Dateien kopiert, sondern wiederrum alle dort gespeicherten Dateien (rund 15.000!). Ich habe also einen Fehler bei der Anwendung von FOR gemacht.

Kann mir jemand helfen, diesen Fehler zu korrigieren? Meine Batchdatei lautet auszugsweise:

set Quelle="T:"
set Ziel1="c:\k13$_Mir\001"
set Ziel2="C:\k13$_Mir\doc"
FOR /F %%l IN ('xcopy /s /d /l %Quelle% %Ziel1%') DO Xcopy /d /y %%l %Ziel1%
cd /d %Ziel2%
rename *.009 *.doc 2>nul

Hinzufügen muss ich noch: %Quelle% ist ein Laufwerk mit zahllosen Ordnern und Unterordnern (und RENAME funktioniert - meines (geringen) Wissens nach - nur auf einer Ordnerebene.

Sorry für die Nachfrage, aber alleine bekomme ich es nicht hin!

Grüße
MaexchenS
Mitglied: bastla
bastla 16.03.2010 um 13:28:51 Uhr
Goto Top
Hallo MaexchenS!

Falls ich Dich richtig verstehe, könntest Du es so versuchen:
set Quelle="T:\"  
set Ziel1="C:\k13$_Mir\001"  
set Ziel2="C:\k13$_Mir\doc"  
for /f %%i in ('xcopy /s /d /l /y %Quelle% %Ziel1%') DO (  
    xcopy /y "%%i" %Ziel1%  
    xcopy /y "%%i" %Ziel2%  
)
for /r %Ziel2% %%i in (*.009) do ren "%%i" *.doc  
Grüße
bastla
Mitglied: MaexchenS
MaexchenS 17.03.2010 um 09:06:30 Uhr
Goto Top
Hallo bastla,

leider kein Erfolg. Die Batchdatei kopiert zwar die Daten in die beiden Zielordner, bei einem erneuten Ausführen kopiert es jedoch nicht nur die im Quellordner neu hinzugekommenen Dateien, sondern alle dort vorhandenen Files (also auch die, die bereits in den Zielordnern stehen).

Grüße
MaexchenS
Mitglied: bastla
bastla 17.03.2010 um 11:58:51 Uhr
Goto Top
Hallo MaexchenS!

Da beim Kopieren in diesem Fall das Änderungsdatum verglichen wird, wäre das Kopieren der bereits vorhandenen Dateien nur mit einem neueren Datum (inkl Uhrzeit) der Quelldatei zu erklären ...

Ein Unterschied könnte sich zB ergeben, wenn die Partition T: mit FAT32 formatiert ist.
Wenn das Ziel wäre, tatsächlich nur Dateien zu kopieren, die im Zielordner noch nicht vorhanden sind, könntest Du es so versuchen:
set Quelle="H:\ADM"  
set Ziel1="K:\k13$_Mir\001"  
set Ziel2="K:\k13$_Mir\doc"  

set Ex=%temp%\Exclude.txt
xcopy /s /u /l /y %Quelle% %Ziel1%>%Ex%
xcopy /s /exclude:%Ex% %Quelle% %Ziel1%
xcopy /s /exclude:%Ex% %Quelle% %Ziel2%
Grüße
bastla
Mitglied: edepfau
edepfau 17.03.2010 um 12:14:44 Uhr
Goto Top
(liest das hier einer?)
Ich hatte ja bereits vorgeschlagen, das A-Attribut zu benutzen. Dazu ist es ja da.

Das hier sollte funktionieren:
set Quelle="T:\"   
set Ziel1="C:\k13$_Mir\001"   
set Ziel2="C:\k13$_Mir\doc"  
set OPTS=/s /m /y /i /h /r /k 
xcopy %OPTS% %Quelle% %Ziel1%
xcopy %OPTS% %Ziel1% %Ziel2%
for /r %Ziel2% %%d in (.) do ren %%d\*.009 *.doc
Bei den OPTS wird berücksichtigt, dass die Attribute mitkopiert werden (z.B. readonly).
Nebenbei, die Schleife für das rename ist so geschrieben, dass der Befehl nur einmal pro Verzeichnis ausgeführt werden muss, und nicht 15.000 mal.

HTH,
Ede
Mitglied: MaexchenS
MaexchenS 28.03.2010 um 17:05:44 Uhr
Goto Top
Hallo bastla,

die Partition T: ist mit NTFS formatiert.

Aber dein Vorschlag mit der Exclude-Funktion hat funktioniert! Es werden nur noch die neu hinzugekommenen Dateien kopiert. Danke für deine Hilfe!

Gruß
MaexchenS
Mitglied: MaexchenS
MaexchenS 28.03.2010 um 17:11:56 Uhr
Goto Top
Hallo Ede,

doch doch, das hat einer gelesen (zumindest ich). Ich habe deinen Vorschlag auspropbiert. Er funktioniert (und ist sehr viel schneller als die Lösung über die Exclude-Funktion). Danke!!

Nur noch ganz kurz zum Hintergrund meiner Frage: Auf dem Quell-Lufwerk habe ich nur Leserechte. Dort sind Word-Dateien gespeichert, deren Extension .doc durch .00* (wobei * für eine Ziffer zwischen 0 und 9 steht) ersetzt worden ist. Dies hat zur Folge, dass bei den mir zur Verfügung stehenden Desktop-Suchprogramme (Copernic und Windows desktop search) die Vorschaufunktion nicht mehr korrekt arbeitet. Deshalb die Idee, die Dateien auf ein Laufwerk zu kopieren, auf dem ich Scheibrechte habe (also wieer die Dateikennung .doc vewenden kann). Um die Belstung des Systems durch Kopieren und Indexieren zu veringern ist es mir wichtig, nur die neu hinzugekommenen Dateien zu kopieren.

Danke & Gruß
MaexchenS
Mitglied: bastla
bastla 28.03.2010 um 18:54:57 Uhr
Goto Top
Hallo MaexchenS und edepfau!

Schön, dass das Ganze jetzt funktioniert face-smile - etwas überraschend ist dabei, dass ein "xcopy /m" in einem Quellpfad, für welchen nur Leserechte bestehen, das Archiv-Flag rücksetzen kann ...

Grüße
bastla