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, 5879 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 ..
Ähnliche Inhalte
Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(29)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Windows Server

Exchange 2010 Active Directory und Windows Server 2016

(4)

Erfahrungsbericht von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Internet
gelöst Mitarbeiter surft auf unerwünschter Seite - Wie damit umgehen? (49)

Frage von sabines zum Thema Internet ...

LAN, WAN, Wireless
gelöst Eintägige Netzwerkunterbrechung trotz Backupleitung (15)

Frage von iAmbricksta zum Thema LAN, WAN, Wireless ...

Router & Routing
PFsense - Netzverbindung steht, aber kein Internet vorhanden (14)

Frage von aschmid zum Thema Router & Routing ...

Windows Server
Server 2012 R2 - Zugriff Verweigert bei jeglicher Tätigkeit (13)

Frage von DarkLevi zum Thema Windows Server ...