Supportnet Computer
Planet of Tech

Supportnet / Forum / WindowsXP

xcopy exclude problem (pfad)





Frage

Guten Tag zusammen Ich habe ein merkwürdiges Problem mit xcopy Grundsätzlich sind alle Pfadangaben, die leerzeichen enthalten mit "" zu bestücken, doch bei der exclude geht dies anscheinend nicht... Hier mein Versuch: [code]xcopy "G:\Music\tracks\*.*" "D:\Divers\" /e /y /exclude:G:\exclude.txt[/code] Diese Variante funktioniert... [code]xcopy "G:\Music\tracks\*.*" "D:\Divers\" /e /y /exclude:"G:\exclude.txt"[/code] Funktioniert nicht... leider ist mein excludefile in einem Pfad mit leerzeichen und daher ist auch die "-Angabe zwingend... weiss einer Rat? Danke und Gruss Dionysius

Antwort 1 von Dionysius

achja, fehlermeldung zum 2. Versuch wäre:

Datei "G:\exclude.txt" kann nicht gelesen werden.

Antwort 2 von Massaraksch

Ja, hatte ich auch schon. Scheint ein Bug zu sein.

Da hilft, den Pfad zur Exclude-Datei im kurzen DOS-8.3-Format anzugeben. Also z.B. für "G:\Langer Verzeichnisname\exclude.txt"

... /exclude:G:\Langer~1\exclude.txt

Die kurzen 8.3-Namen von Verz./Dateien erhält man mit dem DIR-Befehl und Schalter /x

Oder du wechselst vor dem XCOPY-Befehl in das Verzeichnis mit der Exclude-Datei und kannst dann die Pfadangabe zur Exclude-Datei weglassen.

cd /d "G:\Langer Verzeichnisname"
... /exclude:exclude.txt

Massaraksch

Antwort 3 von Dionysius

Hallo Massaraksch

Vielen Dank für deine superausführiche Antwort. Aber ich muss wohl meine Idee an den Nagel hängen... oder zumindest fast

Leider müssen die Scripts von ausserhalb aufrufbar sein und auch die dateien von ausserhalb kopierbar mit einem excludefile von ausserhalb ^^

also:
1. ausserhalb aufrufen - ok
2. ausserhalb kopieren - ok
3. excludefile ausserhalb - not ok
(ok bedeutet, xcopy versteht \\pc-dionysius\freigabe$\etc\file.txt)

ich konnte mir zwar über DIR "....." /x die Namen der Verzeichnisse raussuchen, aber nicht diejenigen von \\pc-dionysius\freigabe$. ausserdem ist da ein - zeichen und ein $ zeichen zusätzlich vorhanden.

also alles in allem, ich muss es wohl über robocopy weiter verfolgen, aufrufen kann ich ja übern einen netzwerkpfad und somit kann ich robocopy zentral zur verfügung stellen lassen

oder

4 jahre oder mehr an winxp support leisten und nicht mal die eigenen kommando's korrekt zum laufen bringen...

Antwort 4 von Massaraksch

Nunja, scheint also, als wäre xcopy etwas überfordert.

Wenn du denn auf Robocopy umschwenken willst, dann könnte dir die "Robocopy GUI" gefallen. Dann mußt du dich nicht so sehr mit den umfangreichen Parametern rumschlagen.

Hier beschrieben plus Download...

Massaraksch

Antwort 5 von batti-batch

Hallo Dionysius und Massaraksch,


warum gleich zu
ROBOCOPY
ausweichen, wo doch
XCOPY
für diesen Fall fast alles kann?

Die Zeile

XCOPY "G:\Music\tracks\*.*" "D:\Divers\" /e /y /exclude:G:\exclude.txt


ist schon sehr dicht an der Lösung dran.
Aber schauen wir uns das Ganze mal in aller Ruhe an. Ich habe das Ganze mal etwas ausführlicher beschrieben, damit auch andere etwas davon haben.

(1) Weil wir nicht weiter wissen, ziehen wir die Hilfe von
XCOPY 
zu Rate, hier in der Version von Windows 2000 (die von Windows XP ist identisch):

"/EXCLUDE:Datei1[+Datei2][+Datei3]...
Gibt eine Liste von Zeichenfolgen an. Wenn eine der
Zeichenfolgen Teil des absoluten Verzeichnispfads 
der zu kopierenden Datei ist, wird diese Datei vom
Kopiervorgang ausgeschlossen. Beispiel: Bei der 
Zeichenfolge \obj\ oder .obj werden alle Dateien 
unterhalb des Verzeichnisses OBJ bzw. alle Dateien mit
der Erweiterung .obj vom Kopiervorgang
ausgeschlossen."


In der wohl etwas unglücklich gewählten Formulierung "Gibt eine Liste von Zeichenfolgen an." fehlt der Begriff "Diese Datei", also: "Diese Datei gibt eine Liste von Zeichenfolgen an." Damit ist zunächst klar, das hinter
/EXCLUDE: 
eine Datei stehen muss, in der wiederum eine Liste von Dateien enthalten sein kann. Jede Datei gehört dabei, wie bei solchen Optionen-Dateien üblich, in eine extra Zeile. Also etwa so:

G:\Music\tracks\Meine Leerzeichen.txt
G:\Music\tracks\Leere Zeichen\le er.txt


Das Wildcards hier nicht erlaubt sind, wird uns nicht weiter stören.

(2) Für den Pfad und den Dateinamen hinter
/EXCLUDE: 
sind keine Leerzeichen erlaubt. Das steht nirgends, es ist ärgerlich aber man kann damit leben.

Jetzt schauen wir mal, ob wir das Problem von Dionysius nicht doch gelöst bekommen.

Mein Vorschlag einer Lösung sähe so aus:

@ECHO off
SETLOCAL

SET "quell_dateien=*.*"
SET "quell_verzeichnis=G:\Music\tracks"
SET "ziel_verzeichnis=D:\Divers\"

SET "exclude_optionen=Dateiname_und_Pfad_ohne_Leerzeichen"

ECHO %quell_verzeichnis%\Meine Leerzeichen.txt>>%exclude_optionen%
ECHO %quell_verzeichnis%\Leere Zeichen\.txt>>%exclude_optionen%

XCOPY "%quell_verzeichnis%\%quell_dateien%" "%ziel_verzeichnis%" /e /y /exclude:%exclude_optionen%

REM hier weitere Verarbeitung

IF EXIST %exclude_optionen% DEL /f %exclude_optionen% 1>NUL 2>NUL


Wenn aber eine Exclude-Datei mit Leerzeichen von einem anderen Programm bereitgestellt wird, kann man die Zeilen

ECHO %quell_verzeichnis%\Meine Leerzeichen.txt>>%exclude_optionen%
ECHO %quell_verzeichnis%\Leere Zeichen\.txt>>%exclude_optionen%


ändern in

TYPE "Name und Pfad der externen Datei">%exclude_optionen%



Das wars eigentlich schon.


Viel Spaß beim Testen.

Herzliche Grüße
batti-batch

Antwort 6 von Dionysius

Vielen Dank für eure Antworten, ich werde es demnächst testen ;)

Antwort 7 von Dionysius

Also, ich habs aufgegeben, mit xcopy zu machen, ich hab mir robocopy gui gezogen und sieht recht praktisch aus. Jedoch habe ich am schluss trotzdem konsolenbasiert mein script zusammengebastelt und ich mus sagen, ich find robocopy richtig geil ;)

Hier das entsprechende Script falls dies jemand interessiert:
"\\pc-dionysius\lange freigabe$\pfad\robocopy.exe" "\\pc-dionysius\lange freigabe$\Music\tracks" "D:\Divers" /XD old (/S /PURGE /R:5 /W:10)

Endlich, so kann ich das script über das netzwerk starten, ohne robocopy installiert zu haben. Quell und Ziel-Ordner können im Netzwerk stehen (sogar versteckte Freigaben) und mit /XD können auf einfache weise die auszuschliessenden Ordner angeben (hier wird der ordner "old" in ruhe gelassen). Die Parameter in der Klammer sind eigene spezifische Angaben.


Jedenfalls, ich danke euch für eure Hilfe und bin froh, habe ich dies doch noch hingekriegt ;)

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: