XCopy stößt auf eine Freigabeverletzung, wie zu behandeln ist

5815
Dominique

Ich verwende xcopyzum Kopieren großer Dateienpakete. Eine Sache, die ich besonders mag, xcopyist der /FSchalter, der alle Quell- und Zieldateien einschließlich der Pfade anzeigt.

xcopy /E /Y /F D:\Temp_Folder\test_origin\* D:\Temp_Folder\test_dest\ D:\Temp\origin\B_Normal\blabla.txt -> D:\Temp\dest\B_Normal\blabla.txt D:\Temp\origin\B_Normal\B.A\normal.txt -> D:\Temp\dest\B_Normal\B.A\normal.txt D:\Temp\origin\B_Normal\B.B\drawing.bmp -> D:\Temp\dest\B_Normal\B.B\drawing.bmp D:\Temp\origin\C_Fill_with_empty\empty.bmp -> D:\Temp\dest\C_Fill_with_empty\empty.bmp D:\Temp\origin\C_Fill_with_empty\empty.txt -> D:\Temp\dest\C_Fill_with_empty\empty.txt 5 File(s) copied 

Es scheint jedoch einige Probleme zu geben:

D:\Temp\origin>tree /F /A ... D:. +---A_Empty +---B_Normal | | blabla.txt | | | +---B.A | | normal.txt | | | \---B.B | Drawing.bmp | \---C_Fill_with_empty | empty.bmp | empty.txt | \---empty 

Wie Sie sehen können, die Verzeichnisse, D:\Temp\origin\A_Empty\und D:\Temp\origin\C_Fill_with_empty\empty\scheinen nicht kopiert worden ist (leere Dateien scheinen kopiert, nicht leere Verzeichnisse werden).

Dies trifft jedoch nicht zu: Im Zielordner sind die Verzeichnisse A_emptyund C_Fill_with_empty\emptyvorhanden, aber der /FSwitch zeigte nur die Dateien an, die kopiert wurden. Daher wird die Kopie leerer Verzeichnisse zwar erstellt, aber nicht angezeigt. (In meinem ursprünglichen Beitrag dachte ich, die leeren Verzeichnisse wurden nicht kopiert.)

Am wichtigsten ist, ich verstehe die Bedeutung des /CSchalters nicht

Setzt den Kopiervorgang fort, auch wenn Fehler auftreten.

Letzte Nacht war das xcopyErgebnis einer Bündelkopie eine Fehlermeldung:

\\nas\<Complicated_Directory_Tree>\<file1>.gif -> G:\<Complicated_Directory_Tree>\<file1>.gif \\nas\<Complicated_Directory_Tree>\<file2>.gif -> G:\<Complicated_Directory_Tree>\<file2>.gif Sharing violation 

Ich möchte diese irreproduzierbare Fehlermeldung mit einem Wiederholungsmechanismus vermeiden, aber ich weiß nicht, wie sich der /CSwitch verhält: Verhält er sich als "Wiederholung" oder als "Ignorieren"? (Diese Frage wurde bereits von anderen Leuten gestellt, aber diese Leute haben den Ratschlag erhalten, zu wechseln robocopy, aber wie in diesem StackOverflow-Beitrag erwähnt, scheint dies auch nicht so fehleranfällig zu sein).

Kann jemand einen Wiederholungsmechanismus erzwingen?

Danke im Voraus

1
Vielleicht liegt der Grund für die Verwendung von Robocopy darin, dass dieser Fehler nicht vorliegt? Ich kenne robocopy standardmäßig etwa 100.000-mal neu. djsmiley2k vor 7 Jahren 0
Eine Milliarde Neuversuche nützt nichts, wenn der Fehler bestehen bleibt. Overmind vor 7 Jahren 1
Nur zu Ihrer Information: Ich habe den Post geändert, da die Ausgabe der leeren Verzeichnisse inzwischen gelöst wurde. Dominique vor 7 Jahren 0
Die Lösung dafür wurde bereits veröffentlicht. Overmind vor 7 Jahren 0
@Overmind: in der Tat hast du recht. Leider ist das Problem nicht reproduzierbar und es passiert scheinbar zufällig bei verschiedenen Dateien. Ich glaube, dass es einen Prozess gibt, etwas sehr kurz mit einer Datei zu tun (wie etwa ein Backup oder so), und in diesem Moment hat `xcopy` ein Problem. Wenn Sie den Vorgang einfach wiederholen (möglicherweise nach einer Sekunde warten), könnte dieses Problem behoben werden. Dominique vor 7 Jahren 0
Ein Wiederholungsbeispiel hier: http://lichao.net/eblog/how-to-use-loop-function-in-dos-to-re-try-command-200909380.html; Sie können etwas Ähnliches + den Timeout-Befehl verwenden (um die Wiederholung zu verzögern, wie viele Sekunden Sie für erforderlich halten). Overmind vor 7 Jahren 0

1 Antwort auf die Frage

1
Overmind

Der Parameter / E kopiert Verzeichnisse und Unterverzeichnisse einschließlich leerer Verzeichnisse. Fügen Sie einfach das hinzu und das Problem ist gelöst.

Der Parameter / C kopiert auch dann weiter, wenn Fehler auftreten. Das sollte alle Probleme überspringen.

Um dies zu erläutern, ignoriert / c den Fehler und setzt den Kopiervorgang mit der nächsten gültigen Datei fort.

Wenn Sie Fehler erneut versuchen möchten (obwohl dies nicht empfohlen wird), können Sie dafür eine WHILE-Schleife in der Batchdatei verwenden (nützliche Befehle: IF ERRORLEVEL = und Timeout ). Beispiel .

Danke für die Antwort, aber ich habe mich entschieden, sie nicht zu verwenden: Ich arbeite mit Batchfiles und verwende mehr als 100 Xcopy-Befehle. Darüber hinaus enthalten die xcopy-Befehle schwierige Verzeichnisstrukturen, deren Duplizierung die Qualität der Batchdateien gefährdet. Ich habe mich also für einen anderen Ansatz entschieden: Die Dateien, die Probleme verursachen, befinden sich an einem bestimmten Netzwerkstandort und ich habe meinen Netzwerkadministrator gebeten, für jede Datei dort einen Datei-Monitor zu installieren. Sobald das Problem erneut auftritt, vergleichen wir das Ergebnis der Dateiüberwachung mit den Zeitstempeln im Ergebnisprotokoll meiner Batchdatei. Dominique vor 7 Jahren 0
Das war eine gute Idee. Die Überwachung der Parameter ist der erste Schritt, der unternommen werden sollte. Besser die Ursache wissen, anstatt sie zu umgehen. Overmind vor 7 Jahren 0