Hot News:

Unser Angebot:

  Foren auf CAD.de
  VBasic / vb.net / vbs / wsh
  Verzeichnisse und Dateien netzwerkkonform umbenennen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
Autor Thema:  Verzeichnisse und Dateien netzwerkkonform umbenennen (950 mal gelesen)
Gregi
Mitglied



Sehen Sie sich das Profil von Gregi an!   Senden Sie eine Private Message an Gregi  Schreiben Sie einen Gästebucheintrag für Gregi

Beiträge: 274
Registriert: 26.03.2004

erstellt am: 13. Jul. 2004 12:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Wir müssen sämtliche Dateien und Verzeichnisse unserer Netzwerkablage so umbenennen, das die keine Umlaute und Sonderzeichen mehr enthalten. Habe dafür ein Tool geschrieben, aber es klappt nicht richtig!

Was korrekt läuft, ist die korrektur der unerlaubten Zeichen. Ich habe also den gewünschten String des neuen Dateinamens. Jetzt wollte ich mit der NAME Funktion die Dateien umbenennen. Das funktioniert aber nur teilweise. Unterverzeichnisse berücksichtigt er nicht. Und alle Dateien, die in einem Verzeichnis liegen, das Sonderzeichen enthält, werden auch nicht geändert. Nicht zu vergessen natürlich, das er das Verzeichnis ansich auch nicht umbenennt.
Leider kann ich die VBA Datei nich anhängen, deshalb tue ich den Code mal hier rein.

Public Type BROWSEINFO
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _
                (ByVal pidl As Long, ByVal pszPath As String) As Long

Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" _
                (lpBrowseInfo As BROWSEINFO) As Long

Private z!

'Ruft das Dialogfeld zur Ordnerauswahl auf
Function GetDirectory(Msg) As String
Dim bInfo As BROWSEINFO
Dim path As String
Dim r As Long, x As Long, pos As Integer

With bInfo
    .pidlRoot = 0&
    .lpszTitle = Msg
    .ulFlags = &H1
End With
x = SHBrowseForFolder(bInfo)
path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal path)
If r Then
    pos = InStr(path, Chr$(0))
    GetDirectory = Left(path, pos - 1)
Else
    GetDirectory = ""
End If
End Function

Sub Dateisuche(Laufwerk, Dateien)
Dim tmp, Wdhlg, Dateiname As String
Dim KorName As String
On Error Resume Next
If Right(Laufwerk, 1) <> "\" Then Laufwerk = Laufwerk + "\"

tmp = Dir(Laufwerk & Dateien)

Do While Len(tmp)
    Dateiname = Laufwerk & tmp
    Application.StatusBar = Dateiname
    Cells(z, 1).Select
    Cells(z, 1) = Laufwerk & tmp 'Pfad
    'Cells(z, 2) = FileLen(Laufwerk & tmp) 'Größe
    'Cells(z, 3) = FileDateTime(Laufwerk & tmp) 'Datum/Zeit
    'Cells(z, 4) = tmp 'nur Dateiname
   
    KorName = KorrekterDateiname(Dateiname)
    Cells(z, 2) = KorName

    If Dateiname <> KorName Then Name Dateiname As KorName
   
    z = z + 1
    tmp = Dir()
Loop
tmp = Dir(Laufwerk, vbDirectory)
Do While Len(tmp)
    If (tmp <> ".") And (tmp <> "..") Then
        If (GetAttr(Laufwerk & tmp) And vbDirectory) = vbDirectory Then
            Dateisuche Laufwerk & tmp, Dateien
            z = z - 1
            Wdhlg = Dir(Laufwerk, vbDirectory)
            z = z + 1
            Do While Wdhlg <> tmp
                Wdhlg = Dir()
            Loop
        End If
    End If
    tmp = Dir()
Loop
On Error GoTo 0
Application.StatusBar = False
End Sub

'Aufruf mit dem folgenden Makro
Sub Suchen()
Dim Laufwerk$, Dateien$
'Ersze Zeile, in der eine Eintragung erfolgt
z = 2
'Alte Eintragungen löschen
[a1:e5000] = ""
'Den Variablen Laufwerk und Dateien kann
'auch ein direkter Wert zugewiesen werden.
'Ersatz: ... = "C:\Eigene Dateien"
Laufwerk = GetDirectory("Bitte einen Ordner wählen")
If Laufwerk = "" Then Exit Sub
'Ersatz: Dateien = "*.*"
Dateien = InputBox("Nach welchen Dateien soll in" & _
    Chr(10) & " " & Laufwerk & Chr(10) & _
    "gesucht werden (z. B. *.xls)?", _
    "Dateityp", "*.*")
If Dateien = "" Then Exit Sub
Dateisuche Laufwerk, Dateien
End Sub

Private Function KorrekterDateiname(DateinameAlt As String) As String
    Dim DateinameNeu As String
    Dim BuchstabeAlt As String
    Dim BuchstabeNeu As String
    Dim Laufwerksbuchstabe As String
    Dim DateiEndung As String
    Dim i As Integer
   
    Laufwerksbuchstabe = Left(DateinameAlt, 2)
    DateiEndung = Right(DateinameAlt, 4)
    For i = 1 To Len(DateinameAlt) - 4
        BuchstabeAlt = Mid(DateinameAlt, i, 1)
        With Sheets("Einstellungen")
            Select Case BuchstabeAlt:
                Case .Cells(2, 1).Value
                BuchstabeNeu = .Cells(2, 2).Value
                Case .Cells(3, 1).Value
                BuchstabeNeu = .Cells(3, 2).Value
                Case .Cells(4, 1).Value
                BuchstabeNeu = .Cells(4, 2).Value
                Case .Cells(5, 1).Value
                BuchstabeNeu = .Cells(5, 2).Value
                Case .Cells(6, 1).Value
                BuchstabeNeu = .Cells(6, 2).Value
                Case .Cells(7, 1).Value
                BuchstabeNeu = .Cells(7, 2).Value
                Case .Cells(8, 1).Value
                BuchstabeNeu = .Cells(8, 2).Value
                Case .Cells(9, 1).Value
                BuchstabeNeu = .Cells(9, 2).Value
                Case .Cells(10, 1).Value
                BuchstabeNeu = .Cells(10, 2).Value
                Case .Cells(11, 1).Value
                BuchstabeNeu = .Cells(11, 2).Value
                Case .Cells(12, 1).Value
                BuchstabeNeu = .Cells(12, 2).Value
                Case .Cells(13, 1).Value
                BuchstabeNeu = .Cells(13, 2).Value
                Case .Cells(14, 1).Value
                BuchstabeNeu = .Cells(14, 2).Value
                Case .Cells(15, 1).Value
                BuchstabeNeu = .Cells(15, 2).Value
                Case .Cells(16, 1).Value
                BuchstabeNeu = .Cells(16, 2).Value
                Case .Cells(17, 1).Value
                BuchstabeNeu = .Cells(17, 2).Value
                Case .Cells(18, 1).Value
                BuchstabeNeu = .Cells(18, 2).Value
                Case .Cells(19, 1).Value
                BuchstabeNeu = .Cells(19, 2).Value
                Case .Cells(20, 1).Value
                BuchstabeNeu = .Cells(20, 2).Value
                Case .Cells(21, 1).Value
                BuchstabeNeu = .Cells(21, 2).Value
                Case .Cells(22, 1).Value
                BuchstabeNeu = .Cells(22, 2).Value
                Case .Cells(23, 1).Value
                BuchstabeNeu = .Cells(23, 2).Value
                Case " "
                BuchstabeNeu = .Cells(24, 2).Value
                Case Else
                BuchstabeNeu = BuchstabeAlt
            End Select
        End With
        DateinameNeu = DateinameNeu + BuchstabeNeu
    Next i
    KorrekterDateiname = DateinameNeu + DateiEndung
End Function

------------------
Grüßle
Gregi

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

jakob schaaf
Mitglied
DIpl. Ing.


Sehen Sie sich das Profil von jakob schaaf an!   Senden Sie eine Private Message an jakob schaaf  Schreiben Sie einen Gästebucheintrag für jakob schaaf

Beiträge: 49
Registriert: 05.08.2003

ACAD-INV 2010-12
XP + W7

erstellt am: 02. Aug. 2004 13:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gregi 10 Unities + Antwort hilfreich

Hallo Gregi.

Versuche es mal mit fso (FileSystemObject).
DIM fso as new Filesystemöbject
unter den Verweisen das MICROSOFT SCRIPTINMG RUNTIME aktivieren.

mit fso.folderexist überprüfen, ob Verzeichnis vorhanden ist. mit fso.foldercreate kannst Du Verzeichnisse erstellen.

So kannst Du die Pfade und Dateien umbenennen:
neuerPfad = Replace(neuerPfad, "Ü", "UE", , , vbTextCompare)
neuerPfad = Replace(neuerPfad, "Ä", "AE", , , vbTextCompare)

mit fso.copyfile wird die datei kopiert.

hoffe das hilft Dir weiter.

mfg
Jakob Schaaf

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz