2015-11-10 188 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」)'是代碼失敗的地方,幾乎看起來你正在使用VBScript混合.Net語法。 – Lankymart

+0

是的,我發現,同時也暗示了這個提示。我現在得到它的工作和postet作爲回答下面的 –

回答

0

找到解決方案。正如Lankymart在他的評論中提到的,我正在與VBS混合使用.Net。

的工作代碼爲:

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 

答你看我換成name.EndsWith("B1")InStr(name,"B1")>0

+0

不像EndsWith()一樣,但會做的工作,你也可以使用如果權利(名稱,2)=「B1」然後'模仿'Endswith ()更接近。 – Lankymart