Top-Themen

Aktuelle Themen (A bis Z)

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

Wie kann man in einer Batch Dateien miteinander vergleichen?

Frage Entwicklung Batch & Shell

Mitglied: D3ns007

D3ns007 (Level 1) - Jetzt verbinden

22.07.2009, aktualisiert 10:45 Uhr, 4568 Aufrufe, 10 Kommentare

Folgendes Szenario: Dateien (Dateinamen) sollen miteinander verglichen werden die unter verschiedenen Pfaden zu finden sind. Danach sollen Dateien die im Verzeichniss A und B zu finden sind aus A rausgelöscht werden. Alle anderen Dateien sollen von A nach B kopiert werden.

Ich hab mir gedacht das eine If-Anweisung hier am sinnvollsten ist. Leider kenne ich die Syntax nicht und weiß auch nicht wie man sagt "DU Datei 12345.mdb aus Verzeichnis A vergleiche dich mit allen *.mdb im Verzeichnis B"

Könnt Ihr mir auf die Sprünge helfen?
Dazu hier mein eigentlicher Quellcode:

(Es sollen damit Dateien in Ziparchive komprimiert werden)

01.
@Echo off 
02.
 
03.
set source="D:\Module\Zip-Archive" 
04.
 
05.
Pushd "%source%" 
06.
For /F "Delims=" %%A in ('Dir /B/A-D "D:\Module\Zip-Archive\01-*.mda"') Do call :ZipIt "%%~fA" 
07.
Popdrem 
08.
Del "D:\Module\Zip-Archive\01-*.mda" 
09.
Goto :Eof 
10.
:ZipIt 
11.
Set "Zip=%~n1" 
12.
Set "Zip=%archive%%Zip:~0,9%.zip" 
13.
"C:\Program Files\7-Zip\7z.exe" u "%Zip%"  %1


Vielen Dank im voraus
D3ns!007
Mitglied: bastla
22.07.2009 um 11:12 Uhr
Hallo D3ns!007!

Die Anforderung "DU Datei 12345.mdb aus Verzeichnis A vergleiche dich mit allen *.mdb im Verzeichnis B" ließe sich (gleich für alle ".mdb" des %source%-Verzeichnisses) ungetestet etwa so umsetzen:
01.
@echo off & setlocal 
02.
set "source=D:\Module\Zip-Archive" 
03.
set "dest=D:\Archive" 
04.
set "ext=mdb" 
05.
 
06.
for %%i in ("%source%\*.%ext%") do ( 
07.
    set dupe= 
08.
    echo Vergleiche %%i 
09.
    for %%a in ("%dest%\*.%ext%") do fc /b "%%i" "%%a">nul && set dupe=true 
10.
    if defined dupe echo del "%%i" 
11.
12.
REM Verbliebene Dateien kopieren 
13.
REM copy "%source%\*.%ext%" "%dest%"
Für ein entspanntes Testen steht vor dem "del" noch ein "echo", damit der Löschbefehl nur angezeigt wird ...

Grüße
bastla
Bitte warten ..
Mitglied: D3ns007
22.07.2009 um 11:29 Uhr
Hallo bastla,
also das Script vergleicht fröhlich vor sich hin. Nur gibt es da ein Problem.
Es sollen jeden Tag ungefähr 1000 Dateien so verglichen werden und das dauert bei knappen 20 Testdateien schon ganz schön lange. Kann man das beschleunigen?

Aber Danke natürlich für die schnelle Hilfe!

Bisher zeig die Console an das die Dateien verglichen werden...

Grüße
Dens!007
Bitte warten ..
Mitglied: bastla
22.07.2009 um 11:39 Uhr
Hallo D3ns!007!

Da jede Datei mit jeder anderen verglichen werden muss, dauert das natürlich ...

Flotter wären auf Derartiges spezialisierte Tools (als ein Beispiel etwa CloneSpy) - wieweit sich diese aber autmatisieren lassen, habe ich noch nie untersucht ...

Grüße
bastla
Bitte warten ..
Mitglied: 76109
22.07.2009 um 12:02 Uhr
Hallo zusammen!

Eventuell könnte man den Vergleich ja auf den Datei-Namen, Größe und DateLastModified beschränken.

Gruß Dieter
Bitte warten ..
Mitglied: D3ns007
22.07.2009 um 13:23 Uhr
Ja genau so hatte ich mir das auch schon überlegt... aber Wie?
Ein Vergleich des DAteinamens würde mir schon ausreichen.
Bitte warten ..
Mitglied: bastla
22.07.2009 um 13:30 Uhr
Hallo D3ns!007 und didi1954!

Soferne die Dateigröße als Kriterium taugt, etwa mit folgender neuen Zeile 9:
for %%a in ("%dest%\*.%ext%") do if %%~zi eq %%~za fc /b "%%i" "%%a">nul && set dupe=true
[Edit] Zu spät gesehen ...
Ein Vergleich des DAteinamens würde mir schon ausreichen.
In diesem Fall:
if exist "%dest%\%%~nxi" do fc /b "%%i" "%dest%\%%~nxi">nul && set dupe=true
oder ohne Vergleich des Inhaltes:
if exist "%dest%\%%~nxi" do set dupe=true
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: D3ns007
22.07.2009 um 13:33 Uhr
Kann man einen Vergleich des Namens auch noch realisieren?

Und gibt es ein paar Einschlägige Seiten auf denen man Übungsmaterial zu diesen Scripts findet?
=> Hatte bisher nicht das gefundne was ich mir vorstelle.

Grüße
D3ns!007
Bitte warten ..
Mitglied: D3ns007
22.07.2009 um 13:57 Uhr
Das Script ist jetzt bei weitem schneller wie vorher nur löscht es die Dateien die überprüft wurden und nach "Dest" kopiert wurden nicht aus der "Source" raus.

Nachdem der Vergleich gemacht wurde soll ja entsprechend entweder gelöscht werden oder kopiert und gelöscht werden.

Wisst Ihr da vielleicht Rat?

Der Quelltext bisher sieht so aus:


01.
 
02.
@echo off & setlocal 
03.
set "source=C:\Test\Source" 
04.
set "dest=C:\Test\Dest" 
05.
set "ext=mda" 
06.
 
07.
for %%i in ("%source%\*.%ext%") do ( 
08.
set dupe= 
09.
echo Vergleiche %%i 
10.
for %%a in ("%dest%\*.%ext%") do if exist "%dest%\%%~nxi" do fc /b "%%i" "%dest%\%%~nxi">nul && set dupe=true 
11.
if defined dupe echo del "%%i" 
12.
13.
REM Verbliebene Dateien kopieren 
14.
copy "%source%\*.%ext%" "%dest%" 
15.
 
16.
 
17.
 
18.
Pushd "%dest%" 
19.
For /F "Delims=" %%A in ('Dir /B/A-D "%dest%\*.%ext%"') Do call :ZipIt "%%~fA" 
20.
Popdrem 
21.
Del "%dest%\*.%ext%" 
22.
Goto :Eof 
23.
:ZipIt 
24.
Set "Zip=%~n1" 
25.
Set "Zip=%archive%%Zip:~0,9%.zip" 
26.
"C:\Program Files\7-Zip\7z.exe" u "%Zip%"  %1

Grüße
D3ns!007
Bitte warten ..
Mitglied: bastla
22.07.2009 um 14:08 Uhr
Hallo D3ns!007!

Eigentlich sollte es ja genügen, die Nicht-Duplikate zu kopieren und am Ende alle Dateien zu löschen, daher neue Zeile 11:
if not defined dupe copy "%%i" "%dest%"
und neue Zeile 14
del "%source%\*.%ext%"
Als Zeile 10 sollte übrigens genügen:
if exist "%dest%\%%~nxi" do fc /b "%%i" "%dest%\%%~nxi">nul && set dupe=true
Die obigen Zeilen sind (da kein "echo" vor dem "del" verwendet wurde) "scharf" geschaltet und löschen tatsächlich.

Grüße
bastla
Bitte warten ..
Mitglied: D3ns007
22.07.2009 um 17:23 Uhr
Danke für die Hilfe!

Problem wurde gelöst...
Grüße
D3ns!007
Bitte warten ..
Ähnliche Inhalte
Microsoft
Tabellen miteinander vergleichen
Frage von Acht85Microsoft1 Kommentar

Hallo Community, ich habe 2 Tabellen mit Namen (die auch unterschiedlich geschrieben sein können, baer nicht mehrmals auftauchen) und ...

Batch & Shell
Batch vergleich von zwei dateien
gelöst Frage von realdavegerBatch & Shell6 Kommentare

Hallo, nach Jahrelangem zugucken, habe ich jetzt schlussendlich eine Frage welche ich selbst stelle. Ich versuche 2 zeiten aus ...

Batch & Shell
Batch vergleiche Dateien mit Zeitstempel
gelöst Frage von Streuner1Batch & Shell5 Kommentare

Hallo, ich möchte mit einer batch in einem Ordner Dateien mit einem Zeitstempel suchen, vergleichen, kopieren und löschen. Möglichkeiten: ...

Batch & Shell
Batch Vergleichen von Dateien
gelöst Frage von BlaberBatch & Shell2 Kommentare

Hallo Leute, ich habe ein kleines Problem bei einer Batch-Datei. In dieser versuche ich zwei Text-Dateien miteinander zu vergleichen, ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 10 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 14 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware10 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...