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

Datei überprüfen, vergleichen, löschen und kopieren

Frage Entwicklung Batch & Shell

Mitglied: Nemthor

Nemthor (Level 1) - Jetzt verbinden

30.09.2009 um 12:44 Uhr, 5865 Aufrufe, 9 Kommentare

Hallo zusammen,

hab ein kleines Problem. Ich hab einen Ordner, indem immer akteulle Datein gespeichert werden. Die Dateien möchte ich in einen neuen Ordner kopieren, sobald neue erzeugt worden sind.

Ich hab es soweit hinbekommen, dass in dem orignal Ordner die Datei gesucht wird und kopiert und im zweiten die Daten vorher gelöscht werden. Mein Code sieht so aus:
01.
:Start 
02.
Del /S /Q "C:\Daten\NeuerOrdner\test"  
03.
xcopy C:\Daten\NeuerOrdner\over_m*.* C:\Daten\NeuerOrdner\test 
04.
ping -n 30 localhost >NUL 
05.
GOTO Start
funktioniert auch, nur ich möchte es so in der Art erweitern:
01.
:Start 
02.
 
03.
Ist im Ordner Test bereits die aktuelle Datei erhalten springe zu "BOX 2" 
04.
Ist die Datei nicht identisch springe zu "BOX 1" 
05.
 
06.
:box1 
07.
echo Neue Datei... 
08.
Del /S /Q "C:\Daten\NeuerOrdner\test"  
09.
xcopy C:\Daten\NeuerOrdner\over_m*.* C:\Daten\NeuerOrdner\test 
10.
 
11.
 
12.
:box2 
13.
ping -n 20 localhost >NUL 
14.
GOTO Start
Könnte mir da jemand behilfich sein?
Wär super.

Danke.
Gruß
Mitglied: bastla
30.09.2009 um 14:29 Uhr
Hallo Nemthor!

Du erwähnst immer nur eine Datei, daher nehme ich an, dass es sich tatsächlich nur um eine Datei (aber mit unterschiedlichem Namen) in den beiden Ordnern handelt. Auf Basis dieser Annahme könnte das (ungetestet) so gehen:
01.
:Start 
02.
for %%i in ("C:\Daten\NeuerOrdner\over_m*.*") do set "Neu=%%i" 
03.
for %%i in ("C:\Daten\NeuerOrdner\test") do set "Alt=%%i" 
04.
fc /b "%Neu%" "%Alt%">nul && goto :box2 
05.
 
06.
echo Neue Datei... 
07.
del "%Alt%"  
08.
copy "%Neu%" C:\Daten\NeuerOrdner\test 
09.
 
10.
:box2 
11.
ping -n 20 localhost >NUL 
12.
GOTO Start
Grüße
bastla
Bitte warten ..
Mitglied: Nemthor
30.09.2009 um 15:24 Uhr
Hallo bastla,

das funktioniert leider nicht so richtig. Ich glaub ich hab mich etwas falsch ausgedrückt.

In dem Ordner "NeuerOrdner" befinden sich ca. 20 Datein. 2 davon beginnen mit "over_m", enden jedoch unterschiedlich (over_m2342323 und over_m3321245465). Diese 2 Datein sollen in den Ordner "Test" kopiert werden. Soweit hab ich es selbst hinbekommen.

Jetzt mein Problem, der Ordner "NeuerOrdner" aktualisiert seine 20 Datein ca alle 3 Minuten. Sprich die alten 20 Daten werden gelöscht und durch die neuen ersetzt. Sobald dies passiert ist, sollen die 2 kopierten Daten im Ordner "Test" gelöscht werden und durch die neuen ersetzt werden. Ich hab mir jetzt gedacht, ich lass die Batch alle xx Sekunden durchlaufen und überprüfen ob eine neue Datei im Ordner "NeuerOrdner" vorhanden ist.

Ich hatte meine Batch erst so eingestellt, dass es alle 185 Sekunden ausgeführt wird. Problem, der Ordner "NeuerOrdner" kann sich auch schon nach 2 Minuten aktualisieren oder erst nach 10 Minuten, deswegen würde ich gerne alle 20 Sekunden die Batch laufen lassen.

Gibt es vielleicht eine besser Methode?
Bin für alles offen

Danke schonmal.
Gruß
Nemthor
Bitte warten ..
Mitglied: bastla
30.09.2009 um 15:55 Uhr
Hallo Nemthor!

Was spricht dagegen, die Dateien auf jeden Fall zu kopieren? Wenn sie unterschiedlich sind, ist's ohnehin erforderlich, und wenn sie den gleichen Inhalt haben, sollte es doch auch egal sein, ob die am Zielort vorhandene Datei durch die neue Datei ersetzt wird ...

Ansonsten hast Du mit "fc /b" ein Werkzeug, um einen binären Vergleich durchzuführen - sind die beiden Dateien gleich, erhältst Du einen Errorlevel 0, ansonsten 1 (vereinfacht lässt sich das per "&&" bzw "|" auswerten bzw dazu benutzen, bedingt einen oder mehrere Befehle auszuführen. Voraussetzung ist dafür, dass die Dateinamen bekannt sind oder sich auf andere Art (Dateigröße) eine Zuordnung der Dateien treffen lässt.

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
30.09.2009 um 16:06 Uhr
Hi Nemthor,

bastla's script läuft alle 20 Sekunden.

ping -n 20 localhost >NUL

Dein Problem muss noch etwas anderes sein.
Mal schauen!

Gruß
Tsuki
Bitte warten ..
Mitglied: 60730
30.09.2009 um 16:41 Uhr
Servus,

ich würde das anders anfassen..

01.
:start 
02.
ping n-20 localhost >nul 
03.
dir /tc C:\Daten\NeuerOrdner\over_m*.* |find "%date:~-4%" >C:\Daten\NeuerOrdner\log.log 
04.
dir /tc C:\Daten\NeuerOrdner\test\over_m*.* |find "%date:~-4%" >C:\Daten\NeuerOrdner\test\log.log 
05.
fc C:\Daten\NeuerOrdner\log.log C:\Daten\NeuerOrdner\test\log.log  && goto nix || goto copy 
06.
goto eof 
07.
:nix 
08.
echo nix 
09.
goto start 
10.
:copy 
11.
echo copy 
12.
:eof
fc ist gut aber bei größeren Daten auch lahm

gruß
Bitte warten ..
Mitglied: bastla
30.09.2009 um 16:55 Uhr
@TimoBeil
Wenn die Datei alle paar Minuten neu geschrieben wird, bringt der Vergleich des Erstellungsdatums vermutlich nix (ganz abgesehen davon, dass wegen der "ping"-Pause und des dadurch verzögerten Kopierens das Erstellungsdatum im Zielordner im Normalfall einige Sekunden hinten nach sein dürfte).

Wäre das Änderungsdatum als Vergleichskriterium verwendbar, ließe sich die ganze Aktion auf ein "xcopy /d" reduzieren.

Letzte Möglichkeit, um das "fc" zu vermeiden: Wenn die Dateien unterschiedliche Größe haben, steht fest, dass es eine neue Datei gibt - wenn allerdings die Größe gleich ist, kann sich der Inhalt dennoch unterscheiden.

Diese Überlegungen hängen aber in der Luft, solange wir noch nicht einmal wissen, ob die beiden Dateien immer den gleichen Namen tragen, und falls nicht, woran die jeweils zusammengehörigen zu erkennen sind ...

... und was dagegen spräche, ganz ohne Prüfung mit der neuen Version zu überschreiben.

Grüße
bastla
Bitte warten ..
Mitglied: 60730
30.09.2009 um 17:00 Uhr
Zitat von bastla:
@TimoBeil


@bastla
ich schrieb ja "ich würde es anders anfassen" - nicht besser und stimme deinen Einwänden 100% zu.

Grüße
bastla

zurück
Bitte warten ..
Mitglied: bastla
30.09.2009 um 17:26 Uhr
@TimoBeil
Du kennst mich doch sicher schon gut genug, um zu wissen, dass ich kein Problem mit besseren Lösungen habe - und Dein Hinweis darauf, "fc" nach Möglichkeit zu vermeiden, ist auch völlig berechtigt.

Mein "lautes Denken" war zwar an Dich adressiert, aber soll natürlich auch Nemthor Anhaltspunkte liefern, was er noch zum Entwickeln der Lösung beitragen könnte/sollte ...

Grüße
bastla
Bitte warten ..
Mitglied: Nemthor
01.10.2009 um 07:34 Uhr
Guten Morgen,

erst mal danke für die Antworten.

Ich hab gestern noch mal einiges getestet und bin zum Entschluss gekommen die Daten immer ohne Überprüfung zu überschreiben. Mein Problem ist halt, dass wenn die Datei im ungünstigens Fall ersetzt wird sich das "Show-Prog" aufhängt. Das umgeh ich aber jetzt, indem ich eine Rückmeldung von dem "Show-Prog" erwarte und fals keine Rückmeldung kommt der Prozess gekillt und neu gestartet wird.

Nochmal kurz was ich gemacht hab:

- Messsystem gibt in einem Ordner die aktuellen Werte und Bilder aus (ca. 20 Datein) cvs, avr, tif
- Mit Excel/VBA hol ich mir die cvs und Werte sie aus.
- Die Bilder sollen in einen neuen Ordner kopiert werden, und am Monitor ausgegeben werden. Das war auch hier mein Problem mit over_m. Die Bilder haben immer die gleiche Größe und beginnen mit over_m und einem angefügten Zeitstempel (over_m01102009072953 heißt 01.10.2009 07:29:53 Uhr)

Ich hatte anfangs die Bilder auch in Excel/VBA mit verwaltet und ausgegeben. Das ging eigentlich recht gut, Problem nach 3 monaten Datenmüll gabs öfters Probleme. Jetzt sollte es wieder passen. Danke für die Tipps.

Gruß
Nemthor
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Perl
gelöst Mit Perl aus einer Datei teilidentische Zeilen löschen (5)

Frage von Jeduja zum Thema Perl ...

Batch & Shell
gelöst Per Batch nur neueste Datei mit bestimmten Dateianfang kopieren (3)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
Ordner erstellen ll Datei hinein kopieren (1)

Frage von heyalice zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...