Jump to content

Batch-Skript zum Löschen namensgleicher Dateien aus zweitem Ordner (Dateiendung verschieden)?


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

ich denke, das Problem ist relativ einfach, aber ich konnte keine schnelle Lösung dafür finden...hat jemand eine Idee?

Also: Ich mache Bilder sowohl im RAW- als auch im JPG-Format und kopiere sie in Ordner, die wie folgt strukturiert sind:
(Betriebssystem: Windows10)
D:\20210829\arw
D:\20210829\jpg


Die Dateien in beiden Ordnern haben identische Namen, der einzige Unterschied ist ihre Erweiterung - jpg VS arw.
Dann beginne ich meine Auswahl und lösche alle JPGs, die ich nicht mehr benötige - und nun mein Problem im Workflow: Wie kann ich die entsprechenden ARW-Dateien im 2. Ordner einfach loswerden?

Kennt jemand ein kostenloses Programm, das diesen Job macht?
Vielleicht hat jemand ein Batch-Skript (oder kann eines erstellen) für diesen Zweck (oder mit PowerShell??) - ich kann mir nur vorstellen, dass sowas funktionieren würde, kenn mich aber mit Scripting nicht wirklich aus, leider...
Möglicherweise eine Batch-Datei, die ich einfach in den jeweiligen Hauptordner kopieren und dort ausführen könnte -also zb D:\20210829\ - die nur die beiden Unterordner \jpg und \arw scannen würde, damit man im Batch nicht für jeden Durchlauf die gesamte Ordnerstruktur ändern muss....

 

Freue mich über Ideen und bin für jede Hilfe dankbar!

LG Markus

Link zu diesem Kommentar

GCI D:\20210829\jpg | % { DEL "D:\20210829\arw\$($_.BaseName).arw" -EA Si }

 

Sorry, konnte nicht widerstehen :-) In lang:

GCI = Get-Childitem (aka "dir")

% ist Foreach - eine Schleife, die durch alle Ergebnisse von GCI durchläuft.

DEL ist klar - steht für Remove-Item

$_.Basename ist der Dateiname ohne Pfad und ohne Endung - wobei in $_ das jeweilige Item aus GCI steht, also immer eine einzelne Datei

-EA ist "ErrorAction"

Si ist "SilentlyContinue" - mach weiter, wenn's schiefgeht

 

Und ja, für sowas gibt's GUI-Tools noch und nöcher, die machen aber alle keinen Spaß.

Link zu diesem Kommentar

Danke für den Input, Martin!

Sieht recht elegant aus, macht aber bei mir leider etwas anderes...und zwar werden genau alle Files aus dem ARW-Ordner gelöscht, die im JPG-Ordner vorhanden sind...also genau andersrum.

Vielleicht hatte ich mich unklar ausgedrückt: Es sollen am Ende in beiden Ordnern genau dieselben Dateien übrig bleiben, einmal die JPGs (die eben von mir dezimiert wurden und so die Vorgabe für die Löschaktion darstellen), im anderen Ordner dieselben Bilder im Format ARW.

 

Außerdem: Die Ordnerstruktur war nur ein Beispiel - manchmal ist es länger und komplexer, Datum + Name...zB - D:\20210822_die Reise nach Absurdistan - im schönen Abendlicht\  ;-) oder so....also durchaus mit Leerzeichen, Umlauten etc... dann die beiden Unterordner JPG und ARW.

Ich hab keine Ahnung wie powershell damit umgehen würde, deshalb war auch meine Gedanke, wenn man ein Skript od Batch-Skript von innerhalb des Hauptordners startet, dass man sich damit das jeweilige Korrigieren der Syntax ersparen würde.

(Oder gerade kommt mir noch ein anderer Einfall: Wenn das (Batch)Skript den Hauptordner zb D:\ nach allen Unterordnern mit der Systematik D:\DATUM_irgendeineZeichenkette\ durchsucht - wobei DATUM immer eine 8-stellige Zahl beginnend mit 20 ist - und dann diese vergleichende Löschoperation in allen jeweiligen JPG bzw ARW-Ordnern durchführt, dann würde man sich das explizite Referenzieren auf einen bestimmten Ordner ersparen und das ganz nebenbei gleich für alle zu behandelnden Ordner lösen :-) vielleicht ist das zu kompliziert, keine Ahnung....)

 

LG Markus

Link zu diesem Kommentar

Geht alles, aber fertige Skripts schreibt hier nur @BOfH_666 :aetsch3:

Rekursiv: "-recurse"

Wenn der Dateiname selbst eindeutig ist über alle Unterordner hinweg und wenn in \jpg\ nur JPG liegen, deren Pendant in \arw\ vorhanden sein muß - und ohne Gewähr!

$Ref = ( GCI "D:\20210829\jpg" -re ).BaseName; GCI "D:\20210829\arw" -re | % { If ( $Ref -notcontains $_.BaseName ) { DEL $_ } }

Wenn Dir die Hürde zum Skripten zu hoch ist, wäre "Windows Mass Renamer" vermutlich der richtige Suchbegriff im Browser.

bearbeitet von daabm
Link zu diesem Kommentar
vor 16 Stunden schrieb MurdocX:

Leg was vor, dann können wir helfen. Jedem ein Skript schreiben geht ja nicht

So ist es.

Wir bieten gerne Hilfe zur Selbsthilfe, wenn möglich.

Ein gewisser Lerneffekt sollte sich beim Fragesteller einstellen, damit man befähigt ist zukünftig selbst Skripte dieser Art zu erstellen.

Wir sind keine "Skriptierstube", wir können tatsächlich nicht jedem sein custom skript schreiben.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...