freshdomi
Goto Top

Jeden n-ten Ordner löschen

Hallo,

ich bin leider auf der CMD ein kompletter Döddel und hoffe irgendjemand kann mir bei meinem Problem weiterhelfen:

Ich habe eine Kamera die Bilder auf einen Server speichert, jetzt will ich daraus einen Film zusammenschneiden und brauchen dazu nur jedes 30te Bild...
Die Strucktur ist wie folgt:
Ich habe z.B. 145 Ordner(steigt mit jedem Tag) Name ist 000-X in diesen Ordner gibt es wieder Unterordner 001-999 in denen die Bilder gespeichert sind. Ich würde nun gerne nur jeden 30ten Unterordner behalten. Also das nur mehr die Ordner 001, 031, 061, 091, 121 etc. vorhanden sind

zwei ähnliche Foreneinträge habe ich zu dem Thema schon gefunden nur leider bin ich zu blöd diese auf mein Problem zu übertragen:
Jede zweite Datei löschen via Batch
https://www.wer-weiss-was.de/t/windows-explorer-jede-2-datei-markieren/6 ...

Dieser Befehl würde glaube ich prinzipiell funktionieren nur leider geht der nur für jpg Dateien...
for /f "delims=: tokens=1*" %i in ('dir *.jpg /a-D /o-d /b^|findstr /n $') do @(set /a "x=%i % 2")>nul & @if !x!==1 del "%j"  

Hoffe es findet sie ein gnädige Seele dir mir aus der Patsche helfen kann!

mfg Dominik

Content-Key: 382105

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

Printed on: April 26, 2024 at 01:04 o'clock

Member: emeriks
emeriks Aug 02, 2018 at 10:21:07 (UTC)
Goto Top
Hi,
.... dir *.jpg ....
Hast Du übersehen?


E.
Member: freshdomi
freshdomi Aug 02, 2018 at 10:35:22 (UTC)
Goto Top
was meinst du mit übersehen?
Das ist irgend ein Befehl denn ich gefunden habe; Ich dachte
dir *.jpg
deklariet das er alle jpg Dateien unbestimmt von deren Namen auswählt?!
Member: SeaStorm
SeaStorm Aug 02, 2018 at 11:02:55 (UTC)
Goto Top
hi

Dieser Befehl würde glaube ich prinzipiell funktionieren nur leider geht der nur für jpg Dateien...
Darauf bezieht er sich...
Member: emeriks
emeriks Aug 02, 2018 updated at 11:48:57 (UTC)
Goto Top
Das ist irgend ein Befehl denn ich gefunden habe; Ich dachte
dir *.jpg
deklariet das er alle jpg Dateien unbestimmt von deren Namen auswählt?!
Ja. JPG-Dateien mit beliebigen Namen.
Wenn Du PNG-Dateien behandeln willst dann als *.png.
Und BMP eben *.bmp
Und alle dann *.*

Du schriebst doch ..?
funktionieren nur leider geht der nur für jpg Dateien..
Member: erikro
erikro Aug 02, 2018 updated at 14:13:53 (UTC)
Goto Top
Moin,

mit der Powershell:

get-childitem | %{$number = $_.name.split("-")  
>> if(($number-1)%30 -ne 0) {
>> remove-item $_.name -recurse -force}}
>>

Das geht nur dann ohne Fehlermeldung, wenn alle Ordner, die im Verzeichnis sind, Deinem Muster entsprechen. Achtung! Das löscht gnadenlos alles, was gefunden wird. -recurse löscht alle Dateien und Unterordner. -force sorgt dafür, dass auch versteckte Dateien u. ä. gelöscht werden.

<edit>Die Doppelpfeile am Anfang der Zeile kommen dann, wenn Du das auf der Powershellkonsole eingibst und die Enter-Taste drückst. Die PS merkt, dass da noch was kommen muss, und zeigt so an, dass sie die vorherige Zeile erst abarbeitet, wenn die Eingabe beendet wurde. In der letzten Zeile musst Du dann zweimal Enter drücken.</edit>

hth

Erik
Member: freshdomi
freshdomi Aug 06, 2018 at 09:13:00 (UTC)
Goto Top
Hallo,

Danke für die Antworten!

@erik das heißt ich muss mich mit der CMD in meinen Ordner" E:\Kamerabilder/Cam1/10_20_34_16/" begeben, da fängt dann die oben genannte Struktur an, und den Befehl ausführen? Richtig?

mfg Dominik
Member: freshdomi
freshdomi Aug 06, 2018 at 09:51:17 (UTC)
Goto Top
Da kommt: der Befehl "get-childitem" ist entweder falsch geschrieben oder konnte nicht gefunden werden..
Member: erikro
erikro Aug 20, 2018 at 08:36:38 (UTC)
Goto Top
Moin,

entschuldige, dass ich erst jetzt antworte. Ich war im Urlaub. Nein, nicht cmd, sondern Powershell. Dann wird auch der Befehl get-childitem gefunden. ;)

Liebe Grüße

Erik
Member: freshdomi
freshdomi Aug 21, 2018 at 13:09:53 (UTC)
Goto Top
hallo ok danke bekomme aber immer noch eine Fehlermeldung:
kann das sein das ich das nicht in einer Wurst schreiben darf?
powershell
Member: erikro
erikro Aug 22, 2018 at 06:39:12 (UTC)
Goto Top
Moin,

wie schon weiter oben gesagt:

Die Doppelpfeile am Anfang der Zeile kommen dann, wenn Du das auf der Powershellkonsole eingibst und die Enter-Taste drückst. Die PS merkt, dass da noch was kommen muss, und zeigt so an, dass sie die vorherige Zeile erst abarbeitet, wenn die Eingabe beendet wurde. In der letzten Zeile musst Du dann zweimal Enter drücken.

Das heißt, dort, wo die Doppelpfeile stehen, schreibst Du NICHT die Doppelpfeile, sondern drückst ENTER. Am Ende musst Du ZWEIMAL Enter drücken.

hth

Erik
Member: freshdomi
freshdomi Aug 22, 2018 at 09:27:16 (UTC)
Goto Top
OK das sieht jetzt schon besser aus bei mir face-smile
ein kleines Problem habe ich aber jetzt doch noch face-sad
mit diesem Befehl werden die Ordner dezimiert in denen die Ordner verzeichnet sind sie ich eigentlich löschen will...
d.h. i würde noch einen Zusatz brauchen der in jeden Ordner reingeht und dann erst zum Löschen beginnt...
Member: erikro
erikro Aug 22, 2018 at 09:33:50 (UTC)
Goto Top
Moin,

dann schreibe vor den ganzen Spaß in dem Hauptverzeichnis, in dem die Unterverzeichnisse liegen

get-childitem | %{ cd $_.name 
>> (hier weiter mit dem, was oben steht)

Ans Ende müssen dann drei schließende geschweifte Klammern.

hth

Erik
Member: freshdomi
freshdomi Aug 23, 2018 at 10:49:31 (UTC)
Goto Top
ok erstmal DANKE für deine Hilfe ohne dich wäre ich denkich komplett verloren face-smile
das funktioniert jetzt schon fast so wie es soll; Problem: er geht nur in den ersten Ordner also 000 rein und löscht dann eh wie er soll aber er bleibt halt bei 000 stehen und geht nicht zu 001 weiter...
diese Fehlermeldung gibt er mir in der Powershell aus:
powershell
Member: erikro
erikro Aug 23, 2018 at 11:26:00 (UTC)
Goto Top
Dann stimmt der Aufbau des Verzeichnisnamens nicht überein mit dem, was Du angegeben hast.
Member: freshdomi
freshdomi Aug 24, 2018 at 11:54:14 (UTC)
Goto Top
Doch eigentlich schon... Meine Struktur sieht wie folgt aus:
Cam1 -> Cam_IP -> 000 (im Ordner 000 befinden sich wieder Ordner 000-999)
Stammverzeichniss ist CAM_IP darin sind die Ordner 000-x und in jedem dieser Ordner befinden sich nochmal Ordner 000-999 in denen sich die Bilder befinden... die PS soll quasi jeden Ordner ausser jeden 30. aus 000-999 löschen...
Member: colinardo
colinardo Aug 24, 2018 updated at 13:42:02 (UTC)
Goto Top
Servus,
kein Problem
gci 'D:\Ordner\Cam1\Cam_IP\*\*' -Directory | ?{(([int]$_.Basename)-1) % 30 -ne 0} | remove-item -Recurse -Force -verbose  
Grüße Uwe
Member: erikro
erikro Aug 24, 2018 at 14:22:54 (UTC)
Goto Top
Stimmt, ich habe es falsch verstanden. Die Ordner, die gelöscht werden sollen, heißen nicht xxx-000, sondern nur 000. Dann ist das viel einfacher, so wie Uwe das schon als Einzeiler gepostet hat.
Member: freshdomi
freshdomi Sep 03, 2018 at 10:45:06 (UTC)
Goto Top
Hallo,

leider bekomme ich noch immer eine Fehlermeldung face-sad
2018_09_03_12_43_46_windows_powershell
Member: colinardo
colinardo Sep 03, 2018 updated at 11:05:05 (UTC)
Goto Top
Zitat von @freshdomi:
leider bekomme ich noch immer eine Fehlermeldung face-sad
Weil in dem Fall dann deine Powershell zu alt ist (< 3.0) , und die den Parameter -Directory noch nicht kennt, deswegen face-smile! Lässt sich aber leicht auch für eine alte Powershell kompatibel machen:
gci 'D:\Ordner\Cam1\Cam_IP\*\*' | ?{$_.PSIsContainer -and ((([int]$_.Basename)-1) % 30 -ne 0)} | remove-item -Recurse -Force -verbose  
Member: freshdomi
freshdomi Sep 03, 2018 updated at 11:50:03 (UTC)
Goto Top
Sehr gut hat alles Perfekt geklappt!
Danke für deine Hilfe! face-smile bzw. für eure Hilfe!!