Avatar billede maddog_em Nybegynder
18. august 2010 - 10:07 Der er 11 kommentarer og
1 løsning

Rename mapper og undermapper samt filer

Hej Eksperter

Jeg sidder med en kæmpe opgave på mit arbejde. Vi skal omdøbe samtlige mapper på et netværksdrev (ca. 176000 mapper)
De skal omdøbes fra dansk til engelske navne... Der er ca 30 forskellige navne der skal omdøbes, men de ligger fordelt i mere flere tusinde forskellige mapper der er døbt numerisk - lidt svært at forklare ;-( men jeg har brug for et script hvor jeg kan indtaste navnet på de mapper der skal søges efter, samt det navn der skal ændres til. Hvis det havde kunne lade sig gøre i bat ville mit bud være følgende:

@echo off
rename w:\kunder\folder-oversat folder
rename w:\kunder\rename-test.txt test.txt
REM her ville jeg så skrive de ca. 30 navne der skal oversættes
exit

Problemet med ovenstående bat er at den ikke kan se ned i undermapper. og jeg har googlet problemet, og tror det evt. kan løses med et vbs script - er det korrekt? og hvordan griber jeg det an?
Avatar billede supertekst Ekspert
18. august 2010 - 11:19 #1
Det skulle muligt via VBA - f.eks. med basis i et Excel ark, hvor gl. og nye navn kan defineres.
Avatar billede maddog_em Nybegynder
18. august 2010 - 11:25 #2
OK :-)

Kan jeg lokke dig til at komme med et eksempel? for det er jeg ikke helt med på...
Avatar billede supertekst Ekspert
18. august 2010 - 11:37 #3
Jeg skal prøve - men det kan vare lidt p.g.a. aktuel kundeopgave.

Du nævner filer i overskriften, men kan ikke se hvad der skal gøres ved disse?
Avatar billede maddog_em Nybegynder
18. august 2010 - 11:52 #4
Hej

det gælder det samme for filer som for mapperne, at de skal omdøbes. Det er dog ikke så væsentligt som det er for mapperne, men alligevel rart hvis det kan lade sig gøre med det samme

PFT
Avatar billede supertekst Ekspert
18. august 2010 - 12:00 #5
ok - regel for filer - samme som mapper - eller?
Avatar billede maddog_em Nybegynder
18. august 2010 - 12:36 #6
Hej - det er de samme regler der er gældende for mapper, undermapper og filer
Avatar billede supertekst Ekspert
18. august 2010 - 13:14 #7
ok - forsøger at konstruere et eksempel..
Avatar billede maddog_em Nybegynder
18. august 2010 - 13:30 #8
1000 tak
Avatar billede supertekst Ekspert
18. august 2010 - 15:23 #9
Hvis du sender en mail - kan jeg returnere hele modellen med mappe-strukturen inkl. filer. @-adresse under profil.


Nedenstående VBA er anbragt under ark1 i Excel-fil:

Const drevSTi = "C:\Documents and Settings\pb.KHNBPB\Skrivebord\renameMapper\drev"      'JUSTERES
Dim antalRækker As Long, mapNavn As String, filNavn As String, nytNavn As String
Public Sub renameSystem()
    antalRækker = ActiveCell.SpecialCells(xlLastCell).Row
   
    mapNavn = ""
    filNavn = ""
   
    traverserDrev drevSTi
   
    MsgBox mapNavn, vbOKOnly, "Fundne Mapper"
    MsgBox filNavn, vbOKOnly, "Fundne Filer"
   
End Sub
Private Sub traverserDrev(mappenavn)
    Dim fs, f, f1, fc
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(mappenavn)
    Set fc = f.SubFolders
   
    For Each f1 In fc
        mapNavn = mapNavn & f1.Name & vbCrLf
       
        findFiler f1.Path, f1.Name
       
Rem RENAMNE via opslag i Excel-ark
        nytNavn = findNytNavn(f1.Name)
        If nytNavn <> "" Then
            f1.Name = nytNavn
        End If
       
        traverserDrev f1
    Next
End Sub
Private Sub findFiler(mappesti, mappe)
Dim fs, f, f1, fc, fNavn As String, ext As String, navnSplit As Variant

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(mappesti)
    Set fc = f.Files
   
    For Each f1 In fc
        filNavn = filNavn & mappe & "\" & f1.Name & vbCrLf
       
        navnSplit = Split(f1.Name, ".")
        fNavn = navnSplit(0)
        ext = "." & navnSplit(1)
       
        nytNavn = findNytNavn(fNavn)
        If nytNavn <> "" Then
            f1.Name = nytNavn & ext
        End If
    Next
End Sub
Private Function findNytNavn(ptNavn)
    With ActiveWorkbook.Sheets(1).Range("A1:A" & antalRækker)
        Set c = .find(ptNavn, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            findNytNavn = Range("B" & c.Row)
        Else
            findNytNavn = ""
        End If
    End With
End Function
Avatar billede maddog_em Nybegynder
19. august 2010 - 07:42 #10
Hej

det er fuldstændigt som det skal være, jeg er 100% tilfreds......

der har du sparet mig rigtig mange timers arbejde

Smider du et svar
Avatar billede supertekst Ekspert
19. august 2010 - 09:17 #11
Fint -
Avatar billede maddog_em Nybegynder
19. august 2010 - 09:38 #12
Kanon service
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester