Batch: Dateien mit gleicher Größe löschen
Hallo
Ich will mittels einer Batch-Datei Dateien mit gleicher Größe löschen.
Ich komm momentan nicht weiter und hoffe, dass ihr mir helfen könnt.
Zur Vorgeschichte:
Mittels eines Zusatzprogramm exportiere ich aus einem CAD-Programm mehrere Zeichnungen mit unterschiedlich vielen Blättern.
Die Dateinamen der Zeichnungen sind unterschiedlich. z.B. 1111_1.dxf, 1112_1.dxf, 1113_1.dxf (Zeichnungsname[1111]+Blattnummer[_1])
Wenn es ein 2., 3. oder 4.Blatt von der Zeichnung gibt, dann kann immer nur der selbe Namen verwendet werden. Deshalb speichere ich die Dateien in unterschiedliche Ordner. Da das Zusatzprogramm nicht weiß wie viele Blätter es gibt, mache ich immer 9. Gibt es nur 3 Blätter, so sind die Blätter 3-9 gleich.
das heißt, ich habe folgende Struktur:
Verzeichnis 1
Datei 1111_1.dxf Größe 396.131
Datei 1112_1.dxf Größe 146.641
Datei 1113_1.dxf Größe 142.795
Datei ...
Verzeichnis 2
Datei 1111_1.dxf Größe 27.425
Datei 1112_1.dxf Größe 11.686
Datei 1113_1.dxf Größe 12.028
Datei ...
Verzeichnis 3
Datei 1111_1.dxf Größe 144.048
Datei 1112_1.dxf Größe 11.686
Datei 1113_1.dxf Größe 12.028
Datei ...
Verzeichnis 4
Datei 1111_1.dxf Größe 144.048
Datei 1112_1.dxf Größe 11.686
Datei 1113_1.dxf Größe 12.028
Datei ...
Verzeichnis ...
Verzeichnis 9
Datei 1111_1.dxf Größe 144.048
Datei 1112_1.dxf Größe 11.686
Datei 1113_1.dxf Größe 12.028
Datei ...
Die Zeichnung 1111 hat also 3 unterschiedliche Blätter (weil die Dateien unterschiedlich groß sind).
Die Zeichnung 1112 hat 2 unterschiedliche Blätter
...
Es sollen nun die Dateien in Verzeichnis 9 mit den Dateien in Verzeichnis 8 verglichen werden. Sind sie gleich (gleiche Größe), dann sollen die Daten im Verzeichnis 9 gelöscht werden. Anschließend Verzeichnis 8 mit 7, usw.
Herauskommen soll:
Verzeichnis 1
Datei 1111_1.dxf Größe 396.131
Datei 1112_1.dxf Größe 146.641
Datei 1113_1.dxf Größe 142.795
Verzeichnis 2
Datei 1111_1.dxf Größe 27.425
Datei 1112_1.dxf Größe 11.686
Datei 1113_1.dxf Größe 12.028
Verzeichnis 3
Datei 1111_1.dxf Größe 144.048
Verzeichnis 4
(leer)
Verzeichnis ...
Schlußendlich benenne ich die Daten noch um (Datei 1111_1.dxf aus dem Verzeichnis 3 wird zu 1111_3.dxf,...) und verschiebe sie in ein einzelnes Verzeichnis (z.B. ALLE)
Möglicherweise ist es einfacher, zuerst alle Dateien umzubenennen, in ein einzelnes Verzeichnis zu verschieben und dann erst die Selektion durchzuführen. (??)
Vielen Dank schon mal für die Hilfe.
Ich hab mich jetzt schon 3 Tage mit den FOR, DELIMS und dem TOKENS Befehlen abgemüht, aber ich komm einfach nicht weiter
LG
gerhard
Ich will mittels einer Batch-Datei Dateien mit gleicher Größe löschen.
Ich komm momentan nicht weiter und hoffe, dass ihr mir helfen könnt.
Zur Vorgeschichte:
Mittels eines Zusatzprogramm exportiere ich aus einem CAD-Programm mehrere Zeichnungen mit unterschiedlich vielen Blättern.
Die Dateinamen der Zeichnungen sind unterschiedlich. z.B. 1111_1.dxf, 1112_1.dxf, 1113_1.dxf (Zeichnungsname[1111]+Blattnummer[_1])
Wenn es ein 2., 3. oder 4.Blatt von der Zeichnung gibt, dann kann immer nur der selbe Namen verwendet werden. Deshalb speichere ich die Dateien in unterschiedliche Ordner. Da das Zusatzprogramm nicht weiß wie viele Blätter es gibt, mache ich immer 9. Gibt es nur 3 Blätter, so sind die Blätter 3-9 gleich.
das heißt, ich habe folgende Struktur:
Verzeichnis 1
Datei 1111_1.dxf Größe 396.131
Datei 1112_1.dxf Größe 146.641
Datei 1113_1.dxf Größe 142.795
Datei ...
Verzeichnis 2
Datei 1111_1.dxf Größe 27.425
Datei 1112_1.dxf Größe 11.686
Datei 1113_1.dxf Größe 12.028
Datei ...
Verzeichnis 3
Datei 1111_1.dxf Größe 144.048
Datei 1112_1.dxf Größe 11.686
Datei 1113_1.dxf Größe 12.028
Datei ...
Verzeichnis 4
Datei 1111_1.dxf Größe 144.048
Datei 1112_1.dxf Größe 11.686
Datei 1113_1.dxf Größe 12.028
Datei ...
Verzeichnis ...
Verzeichnis 9
Datei 1111_1.dxf Größe 144.048
Datei 1112_1.dxf Größe 11.686
Datei 1113_1.dxf Größe 12.028
Datei ...
Die Zeichnung 1111 hat also 3 unterschiedliche Blätter (weil die Dateien unterschiedlich groß sind).
Die Zeichnung 1112 hat 2 unterschiedliche Blätter
...
Es sollen nun die Dateien in Verzeichnis 9 mit den Dateien in Verzeichnis 8 verglichen werden. Sind sie gleich (gleiche Größe), dann sollen die Daten im Verzeichnis 9 gelöscht werden. Anschließend Verzeichnis 8 mit 7, usw.
Herauskommen soll:
Verzeichnis 1
Datei 1111_1.dxf Größe 396.131
Datei 1112_1.dxf Größe 146.641
Datei 1113_1.dxf Größe 142.795
Verzeichnis 2
Datei 1111_1.dxf Größe 27.425
Datei 1112_1.dxf Größe 11.686
Datei 1113_1.dxf Größe 12.028
Verzeichnis 3
Datei 1111_1.dxf Größe 144.048
Verzeichnis 4
(leer)
Verzeichnis ...
Schlußendlich benenne ich die Daten noch um (Datei 1111_1.dxf aus dem Verzeichnis 3 wird zu 1111_3.dxf,...) und verschiebe sie in ein einzelnes Verzeichnis (z.B. ALLE)
Möglicherweise ist es einfacher, zuerst alle Dateien umzubenennen, in ein einzelnes Verzeichnis zu verschieben und dann erst die Selektion durchzuführen. (??)
Vielen Dank schon mal für die Hilfe.
Ich hab mich jetzt schon 3 Tage mit den FOR, DELIMS und dem TOKENS Befehlen abgemüht, aber ich komm einfach nicht weiter
LG
gerhard
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 291773
Url: https://administrator.de/forum/batch-dateien-mit-gleicher-groesse-loeschen-291773.html
Ausgedruckt am: 09.05.2025 um 23:05 Uhr
5 Kommentare
Neuester Kommentar
Hallo gb2407, willkommen im Forum.
Speichere folgende Batchdatei in das übergeordnete Verzeichnis von Verzeichnis 1-9.
Passe ggf. in den Zeilen 3-11 die Verzeichnisnamen den tatsächlichen an.
Grüße
rubberman
Speichere folgende Batchdatei in das übergeordnete Verzeichnis von Verzeichnis 1-9.
@echo off &setlocal
set "dir1=Verzeichnis 1"
set "dir2=Verzeichnis 2"
set "dir3=Verzeichnis 3"
set "dir4=Verzeichnis 4"
set "dir5=Verzeichnis 5"
set "dir6=Verzeichnis 6"
set "dir7=Verzeichnis 7"
set "dir8=Verzeichnis 8"
set "dir9=Verzeichnis 9"
set "dirAll=ALL"
setlocal EnableDelayedExpansion
2>nul md "!dirAll!"
for /l %%i in (9 -1 2) do (
for /f %%j in ('set /a %%i-1') do (
for %%k in ("!dir%%i!\*.dxf") do (
for %%l in ("!dir%%j!\%%~nxk") do (
if %%~zk equ %%~zl (
del /f "%%~fk"
) else (
for /f "delims=_" %%m in ("%%~nk") do move /y "%%~fk" "!dirALL!\%%m_%%i%%~xk"
)
)
)
)
)
for %%i in ("!dir1!\*.dxf") do move /y "%%~fi" "!dirALL!\%%~nxi"
Passe ggf. in den Zeilen 3-11 die Verzeichnisnamen den tatsächlichen an.
Grüße
rubberman
Hallo Gerhard.
Die Tatsache, dass du den Code nicht einfach stumpf übernimmst, sondern auch verstehen willst wie er funktioniert, ist lobenswert. Ich kommentiere ihn etwas, damit es einfacher wird ...
Zeile 15
In diesem Fall wird die "Verzögerte Variablenerweiterung" dazu verwendet um Variablen in Variablen richtig zu expandieren. Dabei werden die sonst üblichen Prozentzeichen bei Variablen, durch Ausrufezeichen ersetzt.
Zeile 16
Falls das Verzeichnis für alle übrig gebliebenen Dateien noch nicht existiert, wird es erstellt.
Zeile 17
Der FOR Variablen %%i wird nacheinander der Wert 9, 8, 7 ... 3, 2 zugewiesen.
Zeile 18
Der FOR Variablen %%j wird %%i - 1 zugewiesen.
Zeile 19
Hier wird nach allen *.dxf Dateien im angegebenen Verzeichnis (beginnend in dem in dir9 hinterlegten Verzeichnis) gesucht und jeweils der FOR Variablen %%k zugewiesen.
Zeile 20
Die Datei mit gleichem Name im angegebenen Verzeichnis (beginnend in dem in dir8 hinterlegten Verzeichnis) wird der FOR Variablen %%l zugewiesen.
Zeile 21
Wenn die Dateigrößen der Datei in %%k gleich der in %%l ist ...
Zeile 22
... lösche die Datei in %%k ...
Zeile 23
... ansonsten ...
Zeile 24
Schneide den Dateiname in %%k am ersten Unterstrich ab und weise ihn der FOR Variablen %%m zu. Verschiebe die Datei in %%k in das Verzeichnis für die übrig gebliebenen Dateien und benenne die Datei gleichzeitig um. Der neue Name setzt sich aus dem abgeschnittenen Name in %%m, einem Unterstrich, der Zahl in %%i und der Dateiendung von %%k zusammen.
Zeile 31
Alle dxf-Dateien aus dir1 werden in das Verzeichnis für die übrig gebliebenen Dateien verschoben.
Wie FOR Variablen durch ~ und nachstehenden Buchstabe modifiziert werden, liest du bitte mit einem ...
... in einem CMD Fenster nach.
Grüße
rubberman
Die Tatsache, dass du den Code nicht einfach stumpf übernimmst, sondern auch verstehen willst wie er funktioniert, ist lobenswert. Ich kommentiere ihn etwas, damit es einfacher wird ...
Zeile 15
setlocal EnableDelayedExpansion
Zeile 16
2>nul md "!dirAll!"
Zeile 17
for /l %%i in (9 -1 2) do (
Zeile 18
for /f %%j in ('set /a %%i-1') do (
Zeile 19
for %%k in ("!dir%%i!\*.dxf") do (
Zeile 20
for %%l in ("!dir%%j!\%%~nxk") do (
Zeile 21
if %%~zk equ %%~zl (
Zeile 22
del /f "%%~fk"
Zeile 23
) else (
Zeile 24
for /f "delims=_" %%m in ("%%~nk") do move /y "%%~fk" "!dirALL!\%%m_%%i%%~xk"
Zeile 31
for %%i in ("!dir1!\*.dxf") do move /y "%%~fi" "!dirALL!\%%~nxi"
Wie FOR Variablen durch ~ und nachstehenden Buchstabe modifiziert werden, liest du bitte mit einem ...
for /?
... in einem CMD Fenster nach.
Grüße
rubberman