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

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, 4511 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 ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Windows Server
Zuordnung von Netzlaufwerken mit Hilfe von Batch-Dateien (4)

Frage von doc-jochim zum Thema Windows Server ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...