@ Nino
Sorry, Du hast recht - gelobe Besserung
@ Jacdelad
Das sieht echt gut aus! Vielen Dank!
gelöst: Dateiname und -Pfad per Regex prüfen
-
- Beiträge: 105
- Registriert: 06.03.2019 21:52
Re: Dateiname und -Pfad per Regex prüfen
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Irgendwas muss man ja gut können.
- jacdelad
- Beiträge: 341
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
Re: gelöst: Dateiname und -Pfad per Regex prüfen
Du könntest noch prüfen, ob ein Punkt am Ende ist. Das ist bei meinem Vorschlag noch erlaubt, könnte auch einfach verboten werden
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
- jacdelad
- Beiträge: 341
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
Re: gelöst: Dateiname und -Pfad per Regex prüfen
Ich hab nochmal mit RegEx weiterexperimentiert und das ist dabei rausgekommen:
Es scheint soweit zu funktionieren (für Windows), aber der Punkt am Ende des Dateinamens wird immer noch nicht angemeckert. Vielleicht hat jemand ne Idee.
Code: Alles auswählen
CreateRegularExpression(0,"^(\\\\|[a-zA-Z]\:\\)([^\\\\\/\?\*\:\|<>]+\\)*([^\\\\\/\?\*\:\|<>\r\n\t\f\v]+)+$")
Define NewList Dir.s()
AddElement(Dir())
Dir()="O:\"
Repeat
dir$=Dir()
If ExamineDirectory(0,Dir(),"*.*")
While NextDirectoryEntry(0)
name$=DirectoryEntryName(0)
If DirectoryEntryType(0)=#PB_DirectoryEntry_File
If Not MatchRegularExpression(0,dir$+name$)
Debug dir$+name$
count+1
Else
gut+1
EndIf
Else
If ReplaceString(name$,".","")<>""
AddElement(Dir())
Dir()=dir$+name$+"\"
EndIf
EndIf
Wend
FinishDirectory(0)
EndIf
FirstElement(Dir())
DeleteElement(Dir(),#True)
Until ListSize(Dir())=0
Debug "Gut: "+Str(gut)
Debug "schlecht: "+Str(count)
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
- NicTheQuick
- Ein Admin
- Beiträge: 8675
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: gelöst: Dateiname und -Pfad per Regex prüfen
Wenn auch sehr ungewöhnlich, müsste man auch noch prüfen, ob ein Short-Name drin ist. Siehe https://learn.microsoft.com/en-us/windo ... long-names
Und im Bereich Naming Conventions findet man auch noch die Liste an Dateinamen, die man nicht benutzen darf: CON, PRN, AUX, NUL, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
Und das gilt auch für die Dateinamen, wenn Erweiterungen dran hängen.
Aber ich weiß nicht genau wie weit du damit gehen willst. Es gibt auch maximale Pfadlängen und sowas.
Und im Bereich Naming Conventions findet man auch noch die Liste an Dateinamen, die man nicht benutzen darf: CON, PRN, AUX, NUL, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
Und das gilt auch für die Dateinamen, wenn Erweiterungen dran hängen.
Aber ich weiß nicht genau wie weit du damit gehen willst. Es gibt auch maximale Pfadlängen und sowas.
- jacdelad
- Beiträge: 341
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
Re: gelöst: Dateiname und -Pfad per Regex prüfen
Ja, stimmt. Das hatte ich vor und dann vergessen...NicTheQuick hat geschrieben: ↑10.05.2023 17:43 Wenn auch sehr ungewöhnlich, müsste man auch noch prüfen, ob ein Short-Name drin ist. Siehe https://learn.microsoft.com/en-us/windo ... long-names
Und im Bereich Naming Conventions findet man auch noch die Liste an Dateinamen, die man nicht benutzen darf: CON, PRN, AUX, NUL, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
Und das gilt auch für die Dateinamen, wenn Erweiterungen dran hängen.
Aber ich weiß nicht genau wie weit du damit gehen willst. Es gibt auch maximale Pfadlängen und sowas.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
- jacdelad
- Beiträge: 341
- Registriert: 03.02.2021 13:39
- Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
- Wohnort: Riesa
- Kontaktdaten:
Re: gelöst: Dateiname und -Pfad per Regex prüfen
Irgendwie hat's mir jetzt doch keine Ruhe gelassen:
beachtet, dass keine unerlaubten Zeichen drin sind, Namen müssen mindestens ein Zeichen lang sein und dürfen nicht auf Leerzeichen oder Punkt enden. Es funktionieren Laufwerksbuchstaben und Netzwerkpfade. Jetzt fehlen wirklich nur noch die reservierten Namen (NUL, COM1...), die auch nicht in Verbindung mit anderen Dateiendungen und so verwendet werden dürfen. Das hab ich aber noch nicht hingekriegt.^(?i-)(\\|[a-z]\:)\\([^\\\/\|\:\"\<\>\?\*]*[^\ \.\\\/\|\:\"\<\>\?\*]\\)*[^\\\/\|\:\"\<\>\?\*]*[^\ \.\\\/\|\:\"\<\>\?\*]$
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB