Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Parameter -Y in Robocopy

Frage Entwicklung Batch & Shell

Mitglied: Machete

Machete (Level 1) - Jetzt verbinden

04.01.2011, aktualisiert 12:36 Uhr, 7572 Aufrufe, 26 Kommentare

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
Mitglied: bastla
04.01.2011 um 12:30 Uhr
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
Bitte warten ..
Mitglied: Machete
04.01.2011 um 13:03 Uhr
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ß
Bitte warten ..
Mitglied: bastla
04.01.2011 um 13:06 Uhr
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
Bitte warten ..
Mitglied: Machete
04.01.2011 um 13:19 Uhr
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...
Bitte warten ..
Mitglied: Nagus
04.01.2011 um 13:25 Uhr
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
Bitte warten ..
Mitglied: Machete
04.01.2011 um 13:29 Uhr
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.
Bitte warten ..
Mitglied: Nagus
04.01.2011 um 13:50 Uhr
Ist doch simpel:

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

/Edit
01.
set /p abfrage=Blablabla Y / N /A 
02.
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 /???
Bitte warten ..
Mitglied: bastla
04.01.2011 um 13:58 Uhr
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
Bitte warten ..
Mitglied: Machete
04.01.2011 um 14:59 Uhr
@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
Bitte warten ..
Mitglied: Nagus
04.01.2011 um 17:37 Uhr
hier ein ungetestetes Beispiel (dass man bestimmt noch hübscher machen kann
01.
@echo off 
02.
:start 
03.
cls 
04.
echo Menü 
05.
echo Sollen Dateien überschrieben werden? 
06.
echo (1) Ja, wenn neuer 
07.
echo (2) Nein, niemals 
08.
echo (3) immer fragen 
09.
set/p abfrage= Bitte geben Sie die entsprechende Nummer ein 
10.
goto %abfrage% 
11.
echo. 
12.
echo Ungültige Eingabe! Bitte wiederholen ... 
13.
ping -n 10 localhost>nul 
14.
goto start 
15.
 
16.
:1 
17.
Rem ------- Ja wenn neuer --------- 
18.
echo Neuere Dateien werden ersetzt 
19.
robocopy /s x:\pfad y:\pfad /XO 
20.
goto ende 
21.
 
22.
:2 
23.
Rem ------- Nein niemlas --------- 
24.
echo es werden keine Dateien ersetzt 
25.
robocopy /s x:\pfad y:\pfad /XC /XN 
26.
goto ende 
27.
 
28.
:3 
29.
echo Es wird bei jeder Datei nachgefragt 
30.
xcopy x:\pfad y:\pfad /s /-y 
31.
goto ende 
32.
 
33.
:ende 
34.
echo fertisch 
35.
ping -n 10 localhost>nul
Gruß
Nagus
Bitte warten ..
Mitglied: Machete
05.01.2011 um 12:30 Uhr
@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
Bitte warten ..
Mitglied: Nagus
05.01.2011 um 14:54 Uhr
Kein Problem!

Aber bitte nur Nagus

Viel Spaß

Nagus
Bitte warten ..
Mitglied: Machete
07.01.2011 um 14:50 Uhr
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ß
Bitte warten ..
Mitglied: Nagus
08.01.2011 um 10:22 Uhr
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
Bitte warten ..
Mitglied: Machete
08.01.2011 um 18:19 Uhr
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
Bitte warten ..
Mitglied: Nagus
09.01.2011 um 11:05 Uhr
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.

01.
... 
02.
set/p abfrage= Bitte geben Sie die entsprechende Nummer ein 
03.
 
04.
echo %date% %time:~0,8% %username% %Antwort% >> copy.log 
05.
 
06.
goto %abfrage% 
07.
echo. 
08.
echo Ungültige Eingabe! Bitte wiederholen ... 
09.
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!
Gruß
Nagus
Bitte warten ..
Mitglied: Machete
09.01.2011 um 11:40 Uhr
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

Gruß Machete
Bitte warten ..
Mitglied: Machete
10.01.2011 um 19:12 Uhr
Hallo Nagus,

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

Die Antwort schreibt er allerdings nicht mit in die log.

Gruß Machete
Bitte warten ..
Mitglied: bastla
10.01.2011 um 19:18 Uhr
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
Bitte warten ..
Mitglied: Machete
10.01.2011 um 20:54 Uhr
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
Bitte warten ..
Mitglied: bastla
10.01.2011 um 21:06 Uhr
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
01.
echo (1) Ja, wenn neuer 
02.
echo (2) Nein, niemals 
03.
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
Bitte warten ..
Mitglied: Nagus
10.01.2011 um 21:57 Uhr
Ah - bastla

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

Gruß
Nagus
Bitte warten ..
Mitglied: Machete
10.01.2011 um 22:58 Uhr
Hallo Bastla,

im ganzen sind es 5 Zahlen in der Auswahl.

Wenn du magst kann ich die auch posten...

Gruß Machete
Bitte warten ..
Mitglied: bastla
10.01.2011 um 23:02 Uhr
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
Bitte warten ..
Mitglied: Machete
11.01.2011 um 10:05 Uhr
Klappt super,

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

Gruß Machete
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst New-ADUser (optional Parameter) (13)

Frage von mc-doubleyou zum Thema Batch & Shell ...

Windows Update
Package Publisher - Copy has failed falscher Parameter

Frage von Belloci zum Thema Windows Update ...

Python
gelöst PHP Skript via Python starten mit JSON Objekt als Parameter (3)

Frage von nullacht15 zum Thema Python ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...