|
Die Name-Anweisung
ist zwar eigentlich dazu gedacht, eine Datei oder einen Ordner zu
verschieben. Sie können Sie aber auch dazu verwenden, den Datei-
oder Ordner-Namen in durchgehende Groß- oder Kleinschreibung
umzuwandeln.
Name Path As LCase$(Path)
oder
Name Path As UCase$(Path)
Auch wenn dabei der gesamte Pfadname in Groß- oder
Kleinbuchstaben umgewandelt wird, ist nur Name der Datei bzw. des
Ordners selbst betroffen, und nicht etwa der gesamt darüber
liegende Pfad.
Die Schreibweise einer einzelnen Datei oder eines einzelnen
Ordners lässt sich so recht einfach ändern. Wenn Sie aber die
Namen aller alle Dateien eines Ordners, oder gar aller Dateien und
Ordner in einem Ordner samt Unterordnern ändern wollen, ist schon
ein wenig mehr Aufwand notwendig. Mit Hilfe des FileSystemObjects
aus der Microsoft Scripting Runtime (ab Visual Basic 6
verfügbar, oder auf Systemen mit Internet Explorer) hält sich
dieser Aufwand jedoch in Grenzen. Mit Hilfe der File- und
Folder-Objekte und der Files- und SubFolders-Collections der
Scripting Runtime können Sie die Namen aller Ordner und Dateien ab
einem bestimmten Pfad umwandeln.
Die Funktion ConvertFilesFoldersCase erledigt dies für Sie, mit
einigem Komfort obendrein. Sie übergeben ihr im ersten Parameter
einen Datei- oder Ordner-Pfad. Die Funktion unterscheidet
selbstständig zwischen beiden Kategorien. Im nächsten, optionalen
Parameter legen Sie mit den Konstantwerten vbLowerCase oder
vbUpperCase die gewünschte Schreibweise fest (Voreinstellung ist
vbLowerCase). Wir verwenden hier die VB-eigenen Konstanten der
StrConv-Funktion, da diese Funktion auch innerhalb unserer der
Funktion zur Umwandlung verwendet wird. Im optionalen Parameter
IncludeSubFolders legen Sie fest, ob auch die Namen unterhalb eines
in Path übergebenen Ordners gelegener Ordner und darin enthaltener
Dateien umgewandelt werden sollen. In Convert (optional) übergeben
Sie einen der Konstantwerte aus der ConvertConstants-Enumeration.
Bei cvfFilesOnly werden nur die Namen von Dateien umgewandelt, bei
cvfFoldersOnly nur die Namen von Ordnern, und bei cvfAll
(Voreinstellung) sowohl als auch. Setzen Sie im letzten optionalen
Parameter ExcludeStartFolder den Wert True, wird der Name eines in
Path übergebenen Ordners selbst nicht umgewandelt, sondern nur die
Namen der darin enthaltenen Dateien und Unterordner, abhängig von
der Einstellung im Parameter Convert.
Die Funktion gibt eine Collection zurück, die die Pfad-Namen
aller Dateien und Ordner enthält, bei denen die Umwandlung nicht
erfolgen konnte. Die Funktion bricht also beim Auftreten eines
Fehlers nicht einfach mitten drin ab. Sie können die in der
zurückgegebenen Auflistung enthaltenen Pfade anschließend einzeln
prüfen, gegebenenfalls auch einzeln noch einmal mit der
Name-Funktion umzuwandeln versuchen und einen dabei auftretenden
Fehler näher untersuchen.
Public Enum ConvertConstants
cvfFilesOnly
cvfFoldersOnly
cvfAll
End Enum
Public Function ConvertFilesFoldersCase(Path As String, _
Optional ByVal StrConvert As VbStrConv = vbLowerCase, _
Optional ByVal IncludeSubFolders As Boolean, _
Optional ByVal Convert As ConvertConstants = cvfAll, _
Optional ByVal ExcludeStartFolder As Boolean) As Collection
Dim nErrs As Collection
Select Case StrConvert
Case vbUpperCase, vbLowerCase
Case Else
Exit Function
End Select
Set nErrs = New Collection
On Error Resume Next
With New FileSystemObject
If .FileExists(Path) Then
With .GetFile(Path)
Name Path As StrConv(Path, StrConvert)
End With
If Err.Number Then
nErrs.Add Path
End If
ElseIf .FolderExists(Path) Then
zConvertFilesFoldersCase nErrs, .GetFolder(Path), StrConvert, _
IncludeSubFolders, Convert
Else
nErrs.Add Path
End If
End With
Set ConvertFilesFoldersCase = nErrs
End Function
Private Sub zConvertFilesFoldersCase(Errs As Collection, _
Folder As Folder, ByVal StrConvert As VbStrConv, _
ByVal IncludeSubFolders As Boolean, _
ByVal Convert As ConvertConstants, _
Optional ByVal ExcludeStartFolder As Boolean)
Dim nFile As File
Dim nFolder As Folder
Dim nPath As String
On Error Resume Next
With Folder
If Not ExcludeStartFolder Then
If Convert Then
nPath = .Path
Name nPath As StrConv(nPath, StrConvert)
End If
If Err.Number Then
Errs.Add .Path
Err.Clear
End If
End If
For Each nFile In .Files
With nFile
nPath = .Path
Name nPath As StrConv(nPath, StrConvert)
If Err.Number Then
Errs.Add .Path
Err.Clear
End If
End With
Next
If IncludeSubFolders Then
For Each nFolder In .SubFolders
zConvertFilesFoldersCase Errs, nFolder, _
StrConvert, True, Convert
Next
End If
End With
End Sub
Vielleicht werden Sie sich fragen, nachdem Sie sich die Funktion
näher angesehen haben, warum dort die Name-Anweisung zum Umbenennen
verwendet wird. Eigentlich müsste man doch lediglich die
Schreibweise der Name-Eigenschaft eines File- oder Folder-Objekts
ändern und wieder zuweisen. Ja, eigentlich... es funktioniert aber
leider nicht.
|