joe2011
Goto Top

Batch Dateien kopieren, deren Dateiname 8 Stellen lang ist

Hallo zusammen,

Problem: es werden durch verschiedenen Quellen PDF´s generiert, die eigentlich eine Dateinamenslänge von 8 Stellen haben sollten.
Durch fehlerhafte Erkennung etc. kommen auch Dateien vor, die kürzere oder längere Dateinamen haben - die will ich löschen bzw. nur die richtigen kopieren und den Rest dann löschen.

Alle 5 Minuten lasse ich den Ordner nach neuen Dateien durchsuchen - es betrifft also immer eine Wildkart bzw. Schleife.

Also:
12345678.pdf ist gut.
012345678.pdf ist böse.

Ich habe schon viel gesucht und doch keine Batch-Lösung bisher gefunden.

Gruß

Joe

Content-ID: 370895

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

Ausgedruckt am: 21.11.2024 um 23:11 Uhr

135950
Lösung 135950 12.04.2018 aktualisiert um 10:59:56 Uhr
Goto Top
Batch
@echo off
For /f "delims=" %%a in ('dir /b /s /a-d "c:\Ordner\*.pdf" ^| findstr  /iv "\\........\.pdf$" 2^>nul') do del "%%a"  
Powershell
dir "c:\Ordner\*.pdf" -File -Recurse | ?{$_.Basename.length -ne 8} | del -Force  
Gruß m.
NetzwerkDude
NetzwerkDude 12.04.2018 um 12:09:52 Uhr
Goto Top
Hier auch was für Powershell, in der Variante mit RegularExpressions:
gci | ? Name -match '.{8}\.pdf$'  

der befehlt generiert dir die liste der dateien die exakt 8 beliebige zeichen im namen haben und eine .pdf am schluss
135950
Lösung 135950 12.04.2018 aktualisiert um 12:45:16 Uhr
Goto Top
Zitat von @NetzwerkDude:

Hier auch was für Powershell, in der Variante mit RegularExpressions:
gci | ? Name -match '.{8}\.pdf$'  

der befehlt generiert dir die liste der dateien die exakt 8 beliebige zeichen im namen haben und eine .pdf am schluss
Der Regex hat in diesem Fall einen gravierenden Fehler, wenn dann müsste dieser so aussehen, da ansonsten auch längere Dateien gematcht werden!
^.{8}\.pdf$
Es fehlte also das Caret (^) für den Anfang.

Gruß m.
NetzwerkDude
NetzwerkDude 12.04.2018 um 12:51:05 Uhr
Goto Top
shit, hast recht face-smile
Joe2011
Joe2011 12.04.2018 um 13:04:09 Uhr
Goto Top
Danke an euch.