gb2407
Goto Top

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

Content-Key: 291773

Url: https://administrator.de/contentid/291773

Printed on: May 7, 2024 at 14:05 o'clock

Member: rubberman
rubberman Dec 27, 2015 at 20:57:42 (UTC)
Goto Top
Hallo gb2407, willkommen im Forum.

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
Member: gb2407
gb2407 Dec 28, 2015 at 19:26:10 (UTC)
Goto Top
Hallo rubberman

Vielen herzlichen Danke!!
Das "Programm" funktioniert bestens!! Und so schnell hätte ich keine Antwort erwartet.

Ich möchte jetzt noch die Zeilen "zerlegen" und schauen, wie das im Detail funktioniert. Wahrscheinlich tauchen noch 1-2 Fragen auf. Deshalb möchte ich die Frage auch noch nicht als gelöst markieren

Danke nochmals
gerhard
Member: rubberman
rubberman Dec 28, 2015 at 20:12:47 (UTC)
Goto Top
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
setlocal EnableDelayedExpansion
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
2>nul md "!dirAll!"
Falls das Verzeichnis für alle übrig gebliebenen Dateien noch nicht existiert, wird es erstellt.

Zeile 17
for /l %%i in (9 -1 2) do (
Der FOR Variablen %%i wird nacheinander der Wert 9, 8, 7 ... 3, 2 zugewiesen.

Zeile 18
  for /f %%j in ('set /a %%i-1') do (
Der FOR Variablen %%j wird %%i - 1 zugewiesen.

Zeile 19
    for %%k in ("!dir%%i!\*.dxf") do (
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
      for %%l in ("!dir%%j!\%%~nxk") do (
Die Datei mit gleichem Name im angegebenen Verzeichnis (beginnend in dem in dir8 hinterlegten Verzeichnis) wird der FOR Variablen %%l zugewiesen.

Zeile 21
        if %%~zk equ %%~zl (
Wenn die Dateigrößen der Datei in %%k gleich der in %%l ist ...

Zeile 22
          del /f "%%~fk"
... lösche die Datei in %%k ...

Zeile 23
        ) else (
... ansonsten ...

Zeile 24
          for /f "delims=_" %%m in ("%%~nk") do move /y "%%~fk" "!dirALL!\%%m_%%i%%~xk"
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
for %%i in ("!dir1!\*.dxf") do move /y "%%~fi" "!dirALL!\%%~nxi"
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 ...
for /?
... in einem CMD Fenster nach.

Grüße
rubberman
Member: gb2407
gb2407 Dec 31, 2015 at 19:48:46 (UTC)
Goto Top
Hallo rubberman

Ich habe mit meinen Kollegen bis gestern abend noch Zeichnungen erstellt. Dabei war dein batch-Programm sehr hilfreich. Danke nochmals.

Grundsätzlich verstehe ich den Aufbau. Aber die Syntax ist der clou.

Ich wünsche dir einen guten Rutsch ins neue Jahr und wir hören uns noch face-wink

gerhard
Member: rubberman
rubberman Jan 01, 2016 at 11:28:47 (UTC)
Goto Top
Hallo Gerhard,

alles Gute im neuen Jahr auch dir.
Wenn es noch Unklarheiten gibt, einfach fragen face-wink

Grüße
rubberman