18. august 2010 - 10:07Der 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?
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
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
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
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
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.