Создание файла VBS с возможностью записи в текстовый файл - PullRequest
1 голос
/ 04 ноября 2011

У меня есть файл VBS, который я пытаюсь использовать, чтобы определить, какие папки и файлы находятся в определенном каталоге. Я считаю, что код написан правильно, но всякий раз, когда я пытаюсь записать файл или текущий каталог, я получаю пустой текстовый документ, в котором ничего не написано, кроме корневого каталога. Любой совет будет принята с благодарностью.

Dim NewFile

Function GetFolders (strFolderPath)
Dim objCurrentFolder, colSubfolders, objFolder, files

Set objCurrentFolder = objFSO.GetFolder(strFolderPath)
Set colSubfolders = objCurrentFolder.SubFolders

For Each objFolder In colSubfolders

NewFile.WriteLine("    - " & objFolder.Path)

Set files = folder.Files
For each folderIdx In files
    NewFile.WriteLine("        - "& folderIdx.Name)
Next

Call GetFolders (objFolder.Path)

Next

End Function

Dim fso, sFolder

Set fso = CreateObject("Scripting.FileSystemObject")
sFolder = Wscript.Arguments.Item(0)
If sFolder = "" Then
  Wscript.Echo "No Folder parameter was passed"
  Wscript.Quit
End If
Set NewFile = fso.CreateTextFile(sFolder&"\FileList.txt", True)

NewFile.WriteLine(sFolder)

Call GetFolders(sFolder)

NewFile.Close

1 Ответ

2 голосов
/ 04 ноября 2011

Вы не уделили достаточного внимания присвоению имен переменных.Ваш скрипт является хорошим примером причины, по которой все VBScripts должны начинаться со строки: -

Option Explicit

Это позволит выделить все переменные, которые не были объявлены, что, в свою очередь, укажет на опечатки и несоответствия вименование переменных.Вот как бы я это написал: -

Option Explicit

Dim msFolder : msFolder = Wscript.Arguments.Item(0)

If msFolder = "" Then     
    Wscript.Echo "No Folder parameter was passed"     
    Wscript.Quit     
End If

Dim mfso : Set mfso = CreateObject("Scripting.FileSystemObject")
Dim moTextStream : Set moTextStream = mfso.CreateTextFile(msFolder & "\FileList.txt", True) 

moTextStream.WriteLine(msFolder) 

WriteFolders mfso.GetFolder(msFolder)

moTextStream.Close 

Sub WriteFolders(oParentFolder) 

    Dim oFolder
    For Each oFolder In oParentFolder.SubFolders  

        moTextStream.WriteLine("    - " & oFolder.Path) 

        Dim oFile
        For Each oFile In oFolder.Files  
            moTextStream.WriteLine("        - " & oFile.Name) 
        Next 

        WriteFolders oFolder

    Next 

End Sub 
...