VBS - файл создан, но я не могу его увидеть или открыть - PullRequest
0 голосов
/ 30 мая 2019

Я пытался создать VBS для тестирования создания файлов, потому что написанный мной сценарий большего размера не создает выходной файл. Смысл следующего скрипта - проверить функциональность; которого я сейчас не вижу.

Option Explicit
Dim objFSO, objFSOText, objFolder, objFile
Dim strDirectory, strFile
strDirectory = "C:\Test\next"
strFile = "\Try.txt"

' Create the File System Object
Set objFSO = CreateObject("Scripting.FileSystemObject")

' Create the Folder specified by strDirectory on line 10
Set objFolder = objFSO.CreateFolder(strDirectory)

' -- The heart of the create file script
'-----------------------
'Creates the file using the value of strFile on Line 11
' -----------------------------------------------
Set objFile = objFSO.CreateTextFile(strDirectory & strFile)
Wscript.Echo "Just created " & strDirectory & strFile

Wscript.Quit

Во время выполнения этого кода все работает с первого раза, но в каталоге назначения нет выходного файла. Когда я запускаю его снова, он выдает ошибку, что файл уже существует.

1 Ответ

0 голосов
/ 01 июня 2019

Мне кажется, проблема в том, что вы пытаетесь создать путь "C:\Test\next", который представляет собой структуру из двух вложенных папок) за один раз, а также не проверяете, существует ли этот путь.

Чтобы создать структуру вложенных папок, я добавил небольшую вспомогательную функцию CreateNestedFolder в ваш код и немного ее убрал:

Option Explicit

Dim strDirectory, strFile, overwrite

strDirectory = "C:\Test\next"
strFile      = "Try.txt"
overwrite    = True  'set this to False if you do not wish to overwrite an existing file

'Create the (nested) Folder Structure specified by strDirectory if it does not exist yet
If Not CreateNestedFolder(strDirectory) Then
    Wscript.Echo "Could not create folder " & strDirectory
Else
    Dim objFSO, objFile
    ' Create the File System Object
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    ' -- The heart of the create file script
    '-----------------------
    'Creates the file using the value of strFile
    ' -----------------------------------------------

    'combine the directory and filename
    strFile = strDirectory & "\" & strFile
    'Create the new file and write something in it
    Set objFile = objFSO.CreateTextFile(strFile, overwrite)
    objFile.WriteLine("This is a test.")
    objFile.Close
    Wscript.Echo "Just created " & strFile

    'Clean up the used objects
    Set objFile = Nothing
    Set objFSO  = Nothing
End If

Function CreateNestedFolder(ByVal sPath)
    'Helper function to create a nested folder structure.
    'Returns True on success, False otherwise
    Dim aFolders, oFso, i, firstIndex

    On Error Resume Next
    Set oFso = CreateObject("Scripting.FileSystemObject")

    'Check if the path already exists
    If Not oFso.FolderExists(sPath) Then
        'Find the root drive and split the path in subfolder parts
        aFolders = Split(sPath, "\")
        'Get the root path from the complete path
        If Left(sPath, 2) = "\\" Then
            'If this is a UNC path then the root will be "\\server\share"
            sPath = "\\" & aFolders(2) & "\" & aFolders(3)
            firstIndex = 4
        Else
            'For a local path, the root is "X:"
            aFolders = Split(sPath, "\")
            sPath = aFolders(0)
            firstIndex = 1
        End If
        'Loop through the aFolders array and create new folders if needed
        For i = firstIndex to UBound(aFolders)
            If Len(aFolders(i)) > 0 Then
                sPath = sPath & "\" & aFolders(i)
                If Not oFso.FolderExists(sPath) Then oFso.CreateFolder sPath
            End If
        Next
    End If

    CreateNestedFolder = (Err.Number = 0)
    On Error GoTo 0
    Set oFso = Nothing
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...