Wie kann man in einer Batch Dateien miteinander vergleichen?
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)
Vielen Dank im voraus
D3ns!007
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)
@Echo off
set source="D:\Module\Zip-Archive"
Pushd "%source%"
For /F "Delims=" %%A in ('Dir /B/A-D "D:\Module\Zip-Archive\01-*.mda"') Do call :ZipIt "%%~fA"
Popdrem
Del "D:\Module\Zip-Archive\01-*.mda"
Goto :Eof
:ZipIt
Set "Zip=%~n1"
Set "Zip=%archive%%Zip:~0,9%.zip"
"C:\Program Files\7-Zip\7z.exe" u "%Zip%" %1
Vielen Dank im voraus
D3ns!007
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 121040
Url: https://administrator.de/contentid/121040
Ausgedruckt am: 25.11.2024 um 12:11 Uhr
10 Kommentare
Neuester Kommentar
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:
Für ein entspanntes Testen steht vor dem "del" noch ein "echo", damit der Löschbefehl nur angezeigt wird ...
Grüße
bastla
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:
@echo off & setlocal
set "source=D:\Module\Zip-Archive"
set "dest=D:\Archive"
set "ext=mdb"
for %%i in ("%source%\*.%ext%") do (
set dupe=
echo Vergleiche %%i
for %%a in ("%dest%\*.%ext%") do fc /b "%%i" "%%a">nul && set dupe=true
if defined dupe echo del "%%i"
)
REM Verbliebene Dateien kopieren
REM copy "%source%\*.%ext%" "%dest%"
Grüße
bastla
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
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
Hallo zusammen!
Eventuell könnte man den Vergleich ja auf den Datei-Namen, Größe und DateLastModified beschränken.
Gruß Dieter
Eventuell könnte man den Vergleich ja auf den Datei-Namen, Größe und DateLastModified beschränken.
Gruß Dieter
Hallo D3ns!007 und didi1954!
Soferne die Dateigröße als Kriterium taugt, etwa mit folgender neuen Zeile 9:
[Edit] Zu spät gesehen ...
oder ohne Vergleich des Inhaltes:
[/Edit]
Grüße
bastla
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
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
if exist "%dest%\%%~nxi" do set dupe=true
Grüße
bastla
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:
und neue Zeile 14
Als Zeile 10 sollte übrigens genügen:
Die obigen Zeilen sind (da kein "echo" vor dem "del" verwendet wurde) "scharf" geschaltet und löschen tatsächlich.
Grüße
bastla
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%"
del "%source%\*.%ext%"
if exist "%dest%\%%~nxi" do fc /b "%%i" "%dest%\%%~nxi">nul && set dupe=true
Grüße
bastla