machete
Goto Top

Beim Abgleich existierende Datei nicht ersetzen sondern neuere in anderes Verzeichnis kopieren

Hallo miteinander,

leider habe ich in der Suche nicht das Passende gefunden.

Ich benötige eine Batch welche beim Abgleich erst prüft ob die Datei im Zielverzeichnis bereits vorhanden ist.
Wenn nicht wird ganz normal kopiert.
Wenn ja, soll die neuere Datei in einen anderen (temporären) Ordner abgelegt werden wo ich diese dann per Batch umbenennen lasse.

Das mit dem Umbenennen klappt schon mal ganz gut, nur der Schritt davor nicht.

Vielen Dank schon mal für die Lösungsansätze.

Grüße Machete

Content-ID: 156255

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

Ausgedruckt am: 15.11.2024 um 09:11 Uhr

HelgeSchneider
HelgeSchneider 02.12.2010 um 22:35:15 Uhr
Goto Top
Hallo Machete,

du benötigst den Befehl

"if exist" bzw. "if not exist"

hierüber lässt sich dies abfragen ob eine Datei oder ein Verzeichnis existiert. Danach kannst du über die if-Abfrage deine Logik erstellen.

Bspw.

"If Exist PFAD\DATEI (md TEMPORDNER& etc...)"

Gruß Helge
Machete
Machete 02.12.2010 um 22:42:52 Uhr
Goto Top
Hallo Helge, vielen Dank für die schnelle Antwort.

So weit war ich eigentlich auch schon, das Problem ist dass ich nicht sagen kann wie die Datei heisst.

Es sind Dateien welche der User selbst nach seinen Vorstellungen benennt.

Vielleicht noch eine andere Idee?

Vielen Dank
HelgeSchneider
HelgeSchneider 02.12.2010 um 22:51:31 Uhr
Goto Top
Hey,

dann musst du genauer werden in deiner Beschreibung:

Wie erstellt der User die Dateien? Wo erstellt der diese? Warum soll diese Prüfung stattfinden? Was soll dann passieren?

ansonsten kann ich nur allgemeine Antworten geben die dir nicht weiterhelfen ...

Gruß Helge
60730
60730 02.12.2010 um 23:04:45 Uhr
Goto Top
moin,

wie nix gefunden?
Demo für den cmd Prompt:
edit: dann halt so herum mit fcp
edit² noch ein x gekauft und getestet:
edit³ für leerzeichen noch drei paar Gänsefedern und Füße dazu (die zugekaufte Buchstabensuppe wird langsam teuer)

for /r laufwerk:\pfad\quelle\ %a in (*.fcp) do if not exist "ziel1:\%~nxa" (copy "%a" ziel2\) else copy "%a" ziel1\
und wie immer Benutzung nur auf eigene Gefahr und in Testordnern testen.

Gruß
Machete
Machete 02.12.2010 um 23:17:51 Uhr
Goto Top
Der User speichert Dateien mit der Endung .fcp
In diesen Dateien sind z.B. Kundeninformationen gespeichert.
Nun gibt es auf einem Server ein Verzeichnis wo diese Dateien gespeichert werden.

Nun hat der User auch die Möglichkeit einen Laptop mit außer Haus zu nehmen auf dem sich ein Verzeichnis befindet in welches er auch speichern kann.

Wenn der User nun z.B. eine Müller.fcp speichert und auf dem Server ist schon eine vorhanden, soll er die ältere nicht überschreiben sondern die neue umbenennen in Müller_1.fcp.

Dass mit dem umbenennen habe ich bereits hinbekommen.

Ich müsste lediglich die Dateien welche neuer sind in ein anderes Verzeichnis schaufeln damit ich alle neueren Dateien auf einmal umbenennen kann ohne die alten mit umzubenennen.

Also neuere Dateien (die mit dem älteren Erstellungs/Änderungsdatum liegen auf dem Server) in ein anderes nicht in das eigentliche Zielverzeichnis.

Vielen Dank
Machete
Machete 03.12.2010 um 08:56:14 Uhr
Goto Top
Guten Morgen,

bekomme hier immer die Meldung dass er die angegebene Datei nicht finden kann.

Gruß
60730
60730 03.12.2010 um 09:56:46 Uhr
Goto Top
moin,

wenn ich folgendes mache:

  • Ordner c:\test\1 erstellen
  • Ordner c:\test\2 erstellen
  • Ordner c:\test\3 erstellen
  • In Ordner c:\test\1 eine 123.fcp mit nem dummyinhalte erstelle
  • diesen Schnippsel das erste mal in einer Dosbox laufen lasse:
for /r C:\test\1\ %a in (*.fcp) do if not exist C:\test\2\%~na (copy %a C:\test\2\) else copy %a C:\test\3\
  • Ist diese Datei von 1 zu 2 kopiert worden.
for /r C:\test\1\ %a in (*.fcp) do if not exist C:\test\2\%~na (copy %a C:\test\2\) else copy %a C:\test\3\

if not exist C:\test\2\123 (copy C:\test\1\123.fcp C:\test\2\ )  else copy C:\test\1\123.fcp C:\test\3\
        1 Datei(en) kopiert.
Lasse ich das zum zweitel mal laufen - merke ich - upps da ist ein "fehlerchen" drin...
N:\>for /r C:\test\1\ %a in (*.fcp) do if not exist C:\test\2\%~na (copy %a C:\t
est\2\) else copy %a C:\test\3\

N:\>if not exist C:\test\2\123 (copy C:\test\1\123.fcp C:\test\2\ )  else copy C
:\test\1\123.fcp C:\test\3\
C:\test\2\123.fcp überschreiben? (Ja/Nein/Alle):
        0 Datei(en) kopiert.
Ergo:
Muß die Zeile (die Variable) einen Buchstaben mehr bekommen.
for /r C:\test\1\ %a in (*.fcp) do if not exist C:\test\2\%~nxa (copy %a C:\test\2\) else copy %a C:\test\3\
  • und siehe da:
for /r C:\test\1\ %a in (*.fcp) do if not exist C:\test\2\%~nxa (copy %a C:\test\2\) else copy %a C:\test\3\

if not exist C:\test\2\123.fcp (copy C:\test\1\123.fcp C:\test\2\ )  else copy C:\test\1\123.fcp C:\test\3\
        1 Datei(en) kopiert.

dir /s c:\test\*.fcp

Verzeichnis von c:\test\1

03.12.2010  09:42                 3 123.fcp
               1 Datei(en)              3 Bytes

Verzeichnis von c:\test\2

03.12.2010  09:42                 3 123.fcp
               1 Datei(en)              3 Bytes

Verzeichnis von c:\test\3

03.12.2010  09:42                 3 123.fcp
               1 Datei(en)              3 Bytes

     Anzahl der angezeigten Dateien:
               3 Datei(en)              9 Bytes
Ergo: diese Demo funktioniert und zeigt logischwerweise auch alles an:

Diese Zeile bekomme hier immer die Meldung dass er die angegebene Datei nicht finden kann. jedoch nicht und selbst wenn - würde da auch noch mehr stehen.

Von daher.....etwas mehr Info/Probieren deinerseits wäre vielleicht auch ne Möglichkeit gewesen zum Ziel zu kommen....
Wie gesagt - er zeigt ja an, was er macht.

Gruß
bastla
bastla 03.12.2010 um 11:15:51 Uhr
Goto Top
@t-mo
Nur als Anmerkung (da ich ohne ausreichenden Input auch nur im Schneegestöber tappe face-wink): Könnte auch sein, dass eine Datei nicht gefunden wird, weil sie ein oder mehrere Leerzeichen im Namen / Pfad hat ...

Grüße
bastla
60730
60730 03.12.2010 um 11:54:10 Uhr
Goto Top
@bastla:

face-wink tja das kommt davon, wenn man abends Demos fürn den cmd Prompt baut face-wink

N:\>cd /d c:

C:\>md test

C:\>md test\1

C:\>md test\2

C:\>md test\3

C:\>echo 123.fcp>c:\test\1\123.fcp

C:\>echo "123 456.fcp">"c:\test\1\123 456.fcp"

C:\>echo "123 456.fcp">"c:\test\1\123 456 789.fcp"

C:\>for /r C:\test\1\ %a in (*.fcp) do if not exist C:\test\2\%~nxa (copy %a C:\
test\2\) else copy %a C:\test\3\

C:\>if not exist C:\test\2\123 456 789.fcp (copy C:\test\1\123 456 789.fcp C:\te
st\2\ )  else copy C:\test\1\123 456 789.fcp C:\test\3\
Das System kann die angegebene Datei nicht finden.

C:\>if not exist C:\test\2\123 456.fcp (copy C:\test\1\123 456.fcp C:\test\2\ )
 else copy C:\test\1\123 456.fcp C:\test\3\
Das System kann die angegebene Datei nicht finden.

C:\>if not exist C:\test\2\123.fcp (copy C:\test\1\123.fcp C:\test\2\ )  else co
py C:\test\1\123.fcp C:\test\3\
        1 Datei(en) kopiert.
Und sieghe da ->
Das System kann die angegebene Datei nicht finden.

wie gut, dass ich nur ein paar Pfade aber niemals Dateien mit leerzeichen habe - soll mir ne Lehre sein face-wink

C:\>for /r C:\test\1\ %a in (*.fcp) do if not exist "C:\test\2\%~nxa" (copy "%a"
 C:\test\2\) else copy "%a" C:\test\3\

C:\>if not exist "C:\test\2\123 456 789.fcp" (copy "C:\test\1\123 456 789.fcp" C
:\test\2\ )  else copy "C:\test\1\123 456 789.fcp" C:\test\3\
        1 Datei(en) kopiert.

C:\>if not exist "C:\test\2\123 456.fcp" (copy "C:\test\1\123 456.fcp" C:\test\2
\ )  else copy "C:\test\1\123 456.fcp" C:\test\3\
        1 Datei(en) kopiert.

C:\>if not exist "C:\test\2\123.fcp" (copy "C:\test\1\123.fcp" C:\test\2\ )  els
e copy "C:\test\1\123.fcp" C:\test\3\
        1 Datei(en) kopiert.
Und siehe da -
 C:\>dir c:\test\*.fcp /s
 Verzeichnis von c:\test\1

03.12.2010  11:46                15 123 456 789.fcp
03.12.2010  11:46                15 123 456.fcp
03.12.2010  11:46                 9 123.fcp
               3 Datei(en)             39 Bytes

 Verzeichnis von c:\test\2

03.12.2010  11:46                15 123 456 789.fcp
03.12.2010  11:46                15 123 456.fcp
03.12.2010  11:46                 9 123.fcp
               3 Datei(en)             39 Bytes

 Verzeichnis von c:\test\3

03.12.2010  11:46                 9 123.fcp
               1 Datei(en)              9 Bytes
ich gehe dem oberen demo schnippsel noch ein paar Gänse samt Füsschen kaufen.

Gruß
Machete
Machete 03.12.2010 um 13:37:12 Uhr
Goto Top
Vielen Dank für die Antworten und Tip bzw. schon fertigen Lösungen...
geht soweit auch ganz gut.

Kleinigkeit noch: Im Quellverzeichnis befindet sich eine Datei welche noch nicht im Zielverzeichnis liegt.
Diese wird dann aber nicht im Zielverzeichnis abgelegt wie gewünscht sonder ebenfalls wie bereits vorhandene Dateien in den Temp Ordner verschoben.

So sieht das Ganz bei mir aus:

C:\>for /r C:\Users\mag\Desktop\Quelle\ %a in (*.fcp)do if not exist C:\Users\ma
g\Desktop\Ziel\%~nxa (copy %a C:\Users\mag\Desktop\Temp) else copy %a C:\Users\m
ag\Desktop\Temp\

C:\>if not exist C:\Users\mag\Desktop\Ziel\DateiServer1.fcp (copy C:\Users\mag\D
esktop\Quelle\DateiServer1.fcp C:\Users\mag\Desktop\Temp ) else copy C:\Users\m
ag\Desktop\Quelle\DateiServer1.fcp C:\Users\mag\Desktop\Temp\
1 Datei(en) kopiert.

C:\>if not exist C:\Users\mag\Desktop\Ziel\DateiServer2.fcp (copy C:\Users\mag\D
esktop\Quelle\DateiServer2.fcp C:\Users\mag\Desktop\Temp ) else copy C:\Users\m
ag\Desktop\Quelle\DateiServer2.fcp C:\Users\mag\Desktop\Temp\
1 Datei(en) kopiert.

C:\>if not exist C:\Users\mag\Desktop\Ziel\DateiServer3.fcp (copy C:\Users\mag\D
esktop\Quelle\DateiServer3.fcp C:\Users\mag\Desktop\Temp ) else copy C:\Users\m
ag\Desktop\Quelle\DateiServer3.fcp C:\Users\mag\Desktop\Temp\
1 Datei(en) kopiert.

Gruß
60730
60730 03.12.2010 um 14:05:59 Uhr
Goto Top
moin,

  • kunststück...

C:\>for /r C:\Users\mag\Desktop\Quelle\ %a in (*.fcp)do if not exist C:\Users\mag\Desktop\Ziel\%~nxa (copy %a C:\User\mag\Desktop\Temp) else copy %a C:\Users\mag\Desktop\Temp\

Ich versuche das mal zu übersetzen...
Für jeden Treffer in "quelle", der irgendwie ins Muster *.fcp passt - kopiere wenn die nicht in "Ziel" vorhanden ist - diese nach Temp - andernfalls kopiere diese nach Temp.

Ergo _ egal ob oder ob nicht - als "ziel" wird immer temp genommen - ich hatte das aber anders skizziert:
  • Für jeden Treffer in "quelle", der irgendwie ins Muster*.fcp passt - kopiere wenn die nicht in "Ziel" vorhanden ist - diese nach ziel - andernfalls kopiere diese nach Temp.

Gruß
Machete
Machete 03.12.2010 um 23:14:05 Uhr
Goto Top
Mein Fehler face-smile

Nun funktionier das Ganze per Prompt.
Wie kann ich das nun in eine Datei Packen um dies in einen geplanten Task zu legen?

Habe noch zwei andere Abgleiche welche ich mit rein packen möchte aber das bekomme ich hin (ist "nur" xCopy)

Gruß
60730
60730 04.12.2010 um 01:20:27 Uhr
Goto Top
Servus,

du wolltest doch einen Lösungsansatz.
  • Mit welchem Befehl wurde denn die Lösung gefunden?
  • Wo findet man Hilfe zu dem Befehl? (in dem kleinen schwarzen Kästchen)
Um den FOR-Befehl in einem Batchprogramm zu verwenden, geben Sie...

Ich dachte - gelesen zu haben - du hättest bereits vorm Erstellen deiner Frage gesucht und trotzdem nix gefunden....
Hast du ganz offensichtlich weder vorm Frage hier stellen, als auch danach nicht gemacht. - Find ich traurig...

Gruß
Machete
Machete 04.12.2010 um 14:32:39 Uhr
Goto Top
Zitat von @60730:

Ich dachte - gelesen zu haben - du hättest bereits vorm Erstellen deiner Frage gesucht und trotzdem nix gefunden....
Hast du ganz offensichtlich weder vorm Frage hier stellen, als auch danach nicht gemacht. - Find ich traurig...

Gruß


Bei der ersten Frage habe ich gesucht und nicht das richtige gefunden.
Bei der Frage wie ich das nun in eine Datei packe habe ich tatsächlich nicht gesucht, war aber keine böse Absicht.
Ich fand das dies als Abschluss noch gut in den Tread gepasst hätte.
Wenn der nächst etwas ähnliches sucht wäre hier dann alles komplett.

Finde ich weniger traurig sondern hilfreicher.

Ich bedanke mich für die Hilfe die ich erhalten habe, allerdings sollte man, wenn man mehr mosern als helfen möchte, vielleicht überlegen ob man auf eine Frage antworten möchte. Vielleicht gibt das Userfoto auch etwas Aufschluss face-smile

Mir war nicht klar dass das Adminforum nur etwas für Fortgeschrittene und nicht für Anfänger ist.

Vielen Dank nochmal und Gruß
Machete
60730
60730 04.12.2010 um 22:00:47 Uhr
Goto Top
Moin,

lass es mich in kurze Worte fassen (so ich dessen mächtig bin, was viele zu recht bezweifeln)
Eine Unterhaltung sehe ich bidirektional - Dialog statt monolog.

Wie ich es in der Schule (nicht nur die des Lebens, sondern auch die mit den Zeugnisen) gelernt habe - bringt man jemandem nachhaltig etwas bei, wenn man Ihm Aufgaben stellt, die er lösen muß.

Deine Aufgabe an uns - die ich aufgenommen habe - einen vom User HelgeSchneider angefangenen Denkansatz für dein Problem zu erweiterten.

Jeder, der hier mitgeholfen hat, tippte Wörter wie:

dann musst du genauer werden in deiner Beschreibung:
Von daher.....etwas mehr Info/Probieren deinerseits wäre vielleicht auch ne Möglichkeit gewesen zum Ziel zu kommen....
Nur als Anmerkung (da ich ohne ausreichenden Input auch nur im Schneegestöber face-wink )

Wenn der nächst etwas ähnliches sucht wäre hier dann alles komplett.
Das ist wirklich die kleinste und somit deine Aufgabe gewesen, genauso wie den Pistaziengrünen Haken an diesen Fred.

Bitte sieh das so, wie es gemeint ist - und denk dran - irgendeiner muß mal meine/ Bastlas/Bibers unsere Rente erwirtschaften face-wink
Es bringt doch keinem was, wenn man "irgendwas" vorgekaut bekommt - sich nicht damit auseinander setzt (wie z.B das mit den 3 Ordnern) und solche Konstrukte dann in sein Live/produktivsystem einsetzt und keinen Blassen Dunst hat, warum weshalb wieso.

Und eine Zeile sei mir noch gestattet - in er letzten Zeit gab es sehr viele aktualisierungen im Administratorforum - mit dem Resultat, dass es teilweise nicht zur Verfügung stand - dieses unabhängig von meinem Avatarbild im Hinterkopf - sollte dir wirklich zeigen, dass du zur Not im Leben auf deine Beine gestellt bist.

Gruß