2015-11-10 5 views
-1

Мне нужно добавить шаблон счетчика в подпапки выбранной папки.Переименование подпапок с VBScript

Мой VBScript до сих пор:

AuswahlTitel = "Bitte Datei oder Verzeichnis auswählen" 
StartOrdner = "17" 'Arbeitsplatz 
Set Dateiauswahl = CreateObject("Shell.Application").BrowseForFolder(0,AuswahlTitel,16,StartOrdner) 
Set Ordner = Dateiauswahl.Self 

RenameFolders(CreateObject("Scripting.FileSystemObject").GetFolder(Ordner.Path)) 

Sub RenameFolders(Ordner) 
    Dim i, name, newName, number, a 
    i = 0 
    newName = "" 
    For Each Unter In Ordner.SubFolders 
     name = Unter.Name 
     If name.EndsWith("B1") Then 
      i = i + 1 
      If i<10 Then 
       number = "00" & i 
      ElseIf i<100 Then 
       number = "0" & i 
      Else 
       number = i 
      End if 
     End If 
     a = Split(name,"_") 
     newName = a(0) & "_" & a(1) & "_" & a(2) & "_" & a(3) & "_Heft_" & number & "_" & a(4) & "_" & a(5) 
     Unter.Name = newName 
    Next 
End Sub 

по какой-то причине unknowen я только получаю следующее сообщение об ошибке: error

Таким образом, команда name = Unter.Name, похоже, не работает, и я не знаю, почему.

Может ли кто-нибудь указать мне в правильном направлении?

+0

Вы обращаетесь к 'name', как будто он содержит' object' со свойствами, когда это просто 'string', содержащий имя папки. Это будет 'name.Endswith (" B1 ")', где код не работает, похоже, что вы смешиваете синтаксис .Net с VBScript. – Lankymart

+0

Да, я обнаружил, что между тем тоже thatnks для намека. Я теперь получил его работу и опубликую его как ответ ниже –

ответ

0

Найдено решение. Как упоминал Ланкимарт в своем комментарии, я смешивал .Net с VBS.

рабочий код будет:

AuswahlTitel = "Bitte Datei oder Verzeichnis auswählen" 
StartOrdner = "17" 'Arbeitsplatz 
Set Dateiauswahl = CreateObject("Shell.Application").BrowseForFolder(0,AuswahlTitel,16,StartOrdner) 
Set Ordner = Dateiauswahl.Self 

RenameFolders(CreateObject("Scripting.FileSystemObject").GetFolder(Ordner.Path)) 

Sub RenameFolders(Ordner) 
    Dim i, name, newName, number, fso, Unter 
    i = 0 
    newName = "" 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    For Each Unter In Ordner.SubFolders 
     'Set Unter = fso.GetFolder(Unter.Path) 
     name = CStr(Unter.Name) 
     If (InStr(name,"B1")>0) Then 
      i = i + 1 
      If i<10 Then 
       number = "00" & i 
      ElseIf i<100 Then 
       number = "0" & i 
      Else 
       number = i 
      End if 
     End If 
     a = Split(name,"_") 
     newName = a(0) & "_" & a(1) & "_" & a(2) & "_" & a(3) & "_Heft_" & number & "_" & a(4) & "_" & a(5) 
     Unter.Name = newName 
    Next 
End Sub 

Ans, как вы видите, я заменил name.EndsWith("B1") с InStr(name,"B1")>0

+0

Не совсем то же самое, что и 'EndsWith()', но выполнит задание, вы также можете использовать 'If Right (name, 2) =" B1 "Then', чтобы имитировать' Endswith() ближе. – Lankymart

 Смежные вопросы

  • Нет связанных вопросов^_^