machete
Goto Top

Parameter -Y in Robocopy

Habe mir im Netz schon die Augen wund gesucht.

Hallo ihr Lieben,

Momentan arbeite ich an einer Batch um unterschiedliche Daten von A nach B zu kopieren.
Hierbei ist es wichtig dass nicht alle Daten kopiert bzw. einfach überschrieben werden.
In Robocopy Ausnahmen zu definieren ist kein Thema, allerdings hätte ich ganz gerne eine Abfrage aller /-Y wie bei xCopy bevor die Datei überschrieben wird.

Oder anders herum bei xCopy die Möglichkeit zu sagen dass nur ein bestimmter Dateityp übertragen wird.
Bei xCopy gibt es ja nur die Möglichkeit zu sagen Datei Typ .XY nicht. Wenn allerdings ein neuer Datei Typ dazu kommen würde, wäre dieser unberücksichtigt.

Irgendwie ist je nach Anwendung nur eines von beidem möglich.

Bitte sagt mir dass ich mich irre.


Vielen Dank und Gruß
Machete

Content-Key: 157974

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

Printed on: April 25, 2024 at 19:04 o'clock

Member: bastla
bastla Jan 04, 2011 at 11:30:23 (UTC)
Goto Top
Hallo Machete!

So richtig klar ist mir nicht, was Du genau erreichen willst - sollte es allerdings darum gehen, nur in B noch nicht vorhandene Dateien zu kopieren, könntest Du die Robocopy-Optionen "/XO" [Edit] und "/XN" zusammen [/Edit] versuchen ...

Grüße
bastla
Member: Machete
Machete Jan 04, 2011 at 12:03:19 (UTC)
Goto Top
Hallo Bastla,

nee trifft es nicht so ganz.

In der Quelle gibt es unterschiedliche Dateien z.B. .doc und .docx. (und noch viele andere)

In das Zielverzeichnis sollen nur die .docx dateien kopiert werden was ja mit Robocopy kein Problem ist.

Bsp.: Robocopy "C:\Quelle" "C:\Ziel" /*.docx /E /eta /r:5 >C:\Abgleich.log

Nun möchte ich gerne dass wenn eine Datei schon vorhanden sein sollte, erst gefragt wird ob diese überschrieben werden soll.

Das geht halt bei xCopy mit dem Parameter /-Y. Diesen gibt es bei Robocopy ja leider nicht.

Im gegenzug gibt es bei xCopdy nicht die Möglichkeit zu sagen dass nur .docx Dateien übertragen werden sollen.

Gruß
Member: bastla
bastla Jan 04, 2011 at 12:06:21 (UTC)
Goto Top
Hallo Machete!
Im gegenzug gibt es bei xCopdy nicht die Möglichkeit zu sagen dass nur .docx Dateien übertragen werden sollen.
Wieso denn nicht? Schon mal etwas in der Art
xcopy /-y D:\Quelle\*.docx D:\Ziel\
versucht?

Grüße
bastla
Member: Machete
Machete Jan 04, 2011 at 12:19:29 (UTC)
Goto Top
Im CMD ausgeführt klappt das prima.

In einer .bat leider nicht. Da hängt er in einer Endlosschleife...

Muss mal eben schauen woran das liegt...
Member: Nagus
Nagus Jan 04, 2011 at 12:25:50 (UTC)
Goto Top
Hi,
robocopy überschreibt doch eh nur wenn es eine neuere Datei ist.

Unter welchen Bedingungen möchtest du denn das eine Datei überschrieben wird?

Gruß
Nagus
Member: Machete
Machete Jan 04, 2011 at 12:29:21 (UTC)
Goto Top
Bedingung ist hier recht schwer zu sagen.

Ich möchte das der User bestätigt das die Datei überschrieben wird damit er nachher nicht sagen kann die Datei ist weg.
Es geht auch nur um Dateien welche geändert wurden.

Die Bestätigung ja/Nein/Alle muss also rein.
Member: Nagus
Nagus Jan 04, 2011 at 12:50:52 (UTC)
Goto Top
Ist doch simpel:

die Abfrage am Anfang mit überschreiben oder nicht mit so was:

/Edit
set /p abfrage=Blablabla Y / N /A
goto "%abfrage%"  
/Edit


per goto zur Sprungmarke und ausführen:

Geänderte ersetzen:
robocopy /s x:\pfad y:\pfad /XO

Geänderte nicht ersetzten:
robocopy /s x:\pfad y:\pfad /XC /XN

Einzelabfrage:
mit einer For Schleife und dem copy Befehl jede einzeln prüfen und dann den User fragen

Gruß
Nagus

PS: Alle Parameter von = robocopy /???
Member: bastla
bastla Jan 04, 2011 at 12:58:04 (UTC)
Goto Top
Hallo Machete!
In einer .bat leider nicht. Da hängt er in einer Endlosschleife...
Eine Erklärung dafür wäre ein ">nul" am Ende der "xcopy"-Zeile ...

Grüße
bastla
Member: Machete
Machete Jan 04, 2011 at 13:59:08 (UTC)
Goto Top
@bastla:

Hi,
habe kein >NUL in der Zeile stehen.
Allerdings funktioniert es jetzt. Ich habe das "x" bei xCopy weg gelassen und schon ging es.

@Nagus:

Hallo,
da ich in Sachen Batch noch recht am Anfang stehe ist das noch etwas zu hoch für mich.
Klingt aber gut.


Vielen Dank und Gruß
Machete
Member: Nagus
Nagus Jan 04, 2011 at 16:37:24 (UTC)
Goto Top
hier ein ungetestetes Beispiel (dass man bestimmt noch hübscher machen kann face-smile
@echo off
:start
cls
echo Menü
echo Sollen Dateien überschrieben werden?
echo (1) Ja, wenn neuer
echo (2) Nein, niemals
echo (3) immer fragen
set/p abfrage= Bitte geben Sie die entsprechende Nummer ein
goto %abfrage%
echo.
echo Ungültige Eingabe! Bitte wiederholen ...
ping -n 10 localhost>nul
goto start

:1
Rem ------- Ja wenn neuer ---------
echo Neuere Dateien werden ersetzt
robocopy /s x:\pfad y:\pfad /XO
goto ende

:2
Rem ------- Nein niemlas ---------
echo es werden keine Dateien ersetzt
robocopy /s x:\pfad y:\pfad /XC /XN
goto ende

:3
echo Es wird bei jeder Datei nachgefragt
xcopy x:\pfad y:\pfad /s /-y
goto ende

:ende
echo fertisch
ping -n 10 localhost>nul

Gruß
Nagus
Member: Machete
Machete Jan 05, 2011 at 11:30:57 (UTC)
Goto Top
@nargus:

das ist natürlich erste Sahne.
Da wäre ich ja nie drauf gekommen.

Werde zwar hier und da noch einige änderungen vornehmen, ist aber echt Top.

Vielen Dank und Gruß
Machete
Member: Nagus
Nagus Jan 05, 2011 at 13:54:13 (UTC)
Goto Top
Kein Problem!

Aber bitte nur Nagus face-wink

Viel Spaß

Nagus
Member: Machete
Machete Jan 05, 2011 at 19:45:33 (UTC)
Goto Top
face-wink
Member: Machete
Machete Jan 07, 2011 at 13:50:35 (UTC)
Goto Top
Hi Nagus,

hat soweit alles super funktioniert.
Eine Kleinigkeit habe ich aber noch.

(Die komplette Batch abzubilden wäre glaube ich zu viel deshalb nur die betroffene Zeile)

C:\xcopy.exe "C:\Users\mag\Desktop\Offline fertig\Quelle\*.fcp" "C:\Users\mag\Desktop\Offline fertig\Ziel" /-Y /E /D >"C:\Users\mag\Desktop\Offline fertig\Quelle\Log\LogFile_Server.log"

Nun zu meinem Problem:
Wenn ich eine Log-Datei schreiben lasse, wird der Text ob die vorhandene Datei überschrieben werden soll nicht mehr angezeigt.
Man muss quasi blind j, n oder a eintippen.

Wenn ich den Befehl zum schreiben der Log rauslasse ist der Text wieder sichtbar.

Bin in der Suchfunktion zwar auf das gleiche Problem gestoßen welches aber komplett an dem was ich vor mir habe vorbei geht.

Hast du eine Idee

Gruß
Member: Nagus
Nagus Jan 08, 2011 at 09:22:15 (UTC)
Goto Top
Hm ...
das ist mit xcopy nicht lösbar!

da müsstest du copy in einer For Schleife nehmen, die jede Datei einzeln anpackt und zwei Ausgaben erzeugt.

Warum willst Du das loggen? In dem Fall schreibst Du einfach eine Warnung in das Log und der User ist selbst verantwortlich ....

Außerdem werden die irgendwann anfangen die Option mit dem neueren Dateien nutzen. Du könntest das aber auch noch anders angehen, und zunächst Datei listen generieren, diese auf gleiche Dateien prüfen und wenn es gleiche gibt diese ausspucken. Und dann gibst du die Option raus, überschreiben oder abbrechen ..... Alternativ automatisch einen neuen Namen erzeugen....

Gruß
Nagus
Member: Machete
Machete Jan 08, 2011 at 17:19:32 (UTC)
Goto Top
Hallo Nagus,

das mit dem umbenennen der Dateien habe ich auch schon ausprobiert.

- Temp Ordner erstellen
- geänderte Daten rein Kopieren
- umbenennen lassen
- wieder in das urspüngliche Verzeichnis kopieren
- Temp ordner wieder löschen
- letztendlich der Abgleich

funktioniert soweit ganz gut, allerdings häufen sich dann die Dateien mit gleicher Bezeichnung.
Bei mir ist es so das immer ein _1 mit dazu geschrieben wird. Datum wäre natürlich auch möglich.
Das Problem wie gesagt ist das es zu viel wird.

Die Log ist einfach nur zur Sicherheit um im Zweifelsfall zu sehen ob der User ja/nein oder alle gesagt hat...

Die Abfrage ja/nein/alle ansich findet ja auch statt, nur sie ist unsichtbar.
Die Batch wartet auf die Eingabe ohne anzuzeigen um welche Datei es geht...

Wenn Du magst kann ich auch mal die komplette Batch posten...


Gruß Luca
Member: Nagus
Nagus Jan 09, 2011 at 10:05:11 (UTC)
Goto Top
Moin Machete,

Wenn Du wissen willst ob der User ja nein gedrückt hat ist es doch easy: Du Fragst nur den Zustand am Anfang ab! Hat der User einzel abfrage gedrückt, dann hat er die Verantwortung! Das ist immer so ...

Deswegen würde ich die ERSTE Antwort in ein Log schreiben und es dabei bewenden lassen. Du kannst dann klar dokumentieren, das er "Einzelbestätigung" aufgerufen hat.

...
set/p abfrage= Bitte geben Sie die entsprechende Nummer ein

echo %date% %time:~0,8% %username% %Antwort% >> copy.log

goto %abfrage%
echo.
echo Ungültige Eingabe! Bitte wiederholen ...
ping -n 10 localhost>nul

so in der Art. Was er pro Datei macht - seine Entscheidung! Immerhin reden wir doch von erwachsenen Menschen!
Außerdem: hast du kein Backup auf das Laufwerk? Damit könntest Du doch bei einem Fehler wiederherstellen ...
Mach es so elegant wie möglich, aber auch nicht zu kompliziert! face-wink
Gruß
Nagus
Member: Machete
Machete Jan 09, 2011 at 10:40:18 (UTC)
Goto Top
Vielen Dank,

werde dies so schnell wie möglich ausprobieren und gebe dann noch mal Rückinfo.

PS: Das mit den erwachsenen Menschen ist so ne Sache face-wink

Gruß Machete
Member: Machete
Machete Jan 10, 2011 at 18:12:43 (UTC)
Goto Top
Hallo Nagus,

habe den Befehl %Abfrage% auch noch mit rein gepackt.

Die Antwort schreibt er allerdings nicht mit in die log.

Gruß Machete
Member: bastla
bastla Jan 10, 2011 at 18:18:12 (UTC)
Goto Top
Hallo Machete!

Falls Du damit meinst, dass Du die Zeile 4 von
echo %date% %time:~0,8% %username% %Antwort% >> copy.log
auf
echo %date% %time:~0,8% %username% %abfrage% >> copy.log
korrigiert hast, sollte das aber klappen ...

Grüße
bastla
Member: Machete
Machete Jan 10, 2011 at 19:54:06 (UTC)
Goto Top
Hallo Bastla,

ja, das habe ich gemacht.
Allerdings habe ich %Antwort% auch in der Zeile belassen.
Die Antwort: ja/nein/alle wird aber nicht in den log geschrieben.

Was er konkret rein schreibt ist Datum, Uhrzeit, User und welchen Parameter er gewählt hat.
Der Eintrag der Abfrage ob und wie Überschrieben wird fehlt leider.

Da bei einem "normalen" log leider die Zeile "Soll datei xy überschrieben werden unsichtbar ist wäre zumindest diese Möglichkeit schön.

Gruß Machete
Member: bastla
bastla Jan 10, 2011 at 20:06:41 (UTC)
Goto Top
Hallo Machete!

Dann verwende eben folgende Zeile:
for /f "tokens=2* delims=) " %%i in ('findstr "(%abfrage%)" "%~0"') do >>copy.log echo %date% %time:~0,8% %username% %%j
Vorausgesetzt habe ich, dass die Menüzeilen wie oben beschrieben
echo (1) Ja, wenn neuer
echo (2) Nein, niemals
echo (3) immer fragen
lauten und es keine weiteren Zeilen, die eine Zeichenfolge der Art "(Zahl)" enthalten, in der Batchdatei gibt, da nach dieser Kombination gesucht und anhand der Trennzeichen ")" und Leerzeichen zerlegt wird.

Grüße
bastla
Member: Nagus
Nagus Jan 10, 2011 at 20:57:07 (UTC)
Goto Top
Ah - bastla face-smile

Das muss ich mir auch mal merken ... die for schleifen sind immer genial - ich tu mich nur immer ein bisserl schwer damit! face-wink

Gruß
Nagus
Member: Machete
Machete Jan 10, 2011 at 21:58:17 (UTC)
Goto Top
Hallo Bastla,

im ganzen sind es 5 Zahlen in der Auswahl.

Wenn du magst kann ich die auch posten...

Gruß Machete
Member: bastla
bastla Jan 10, 2011 at 22:02:11 (UTC)
Goto Top
Hallo Machete!

Wenn es 5 verschiedene Zahlen (in der gesamten Batchdatei) sind, sollte das funktionieren - es wird ja nach der gewählten Zahl gesucht ...

Grüße
bastla
Member: Machete
Machete Jan 11, 2011 at 09:05:24 (UTC)
Goto Top
Klappt super,

Vielen Dank an Alle (auch für die Geduld) face-smile

Gruß Machete