Не удается запустить DIR из оболочки WScript в VBA?

Я использую следующую функцию во многих моих проектах VBA. Сначала я добавил ссылку на объектную модель Windows Script, чтобы воспользоваться преимуществами Intellisense, но затем переключился на позднюю привязку, поэтому мне не пришлось ссылаться на кучу вещей.

Private Function RunCMD(ByVal strCMD As String) As String
    'Runs the provided command
    Dim oShell As Object 'New WshShell
    Dim cmd As Object 'WshExec
    Dim x As Integer
    Const WshRunning = 0

    On Error GoTo wshError

    x = 0
    RunCMD = "Error"
    Set oShell = CreateObject("Wscript.Shell")
    Set cmd = oShell.Exec(strCMD)
    'Debug.Print strCMD
    'Stop
    Do While cmd.Status = WshRunning
        Sleep 100 'for 1/10th of a second
        x = x + 1
        If x > 1200 Then 'We've waited 2 minutes so kill it
            cmd.Terminate
            MsgBox "Error: Timed Out", vbCritical, "Timed Out"
        End If
    Loop

    RunCMD = cmd.StdOut.ReadAll & cmd.StdErr.ReadAll
    Set oShell = Nothing
    Set cmd = Nothing
    Exit Function

wshError:
    On Error Resume Next
    RunCMD = cmd.StdErr.ReadAll
    Resume Next
End Function

Это прекрасно работает, когда вы делаете что-то вроде RunCMD("ping www.bing.com") или же RunCMD("winrs -r:" & strHost & " reg query hklm\system\currentcontrolset\services\cdrom /v start")

тем не мение RunCMD("Dir c:\config* /a:-d /b /d /s") не удается, и cmd.StdErr.ReadAll выдает объектную переменную или блок не установлен. Даже простой RunCMD("Dir") выходит из строя.

Почему DIR делает оболочку WScript дерьмовым? Что еще более важно, как я могу использовать функцию DIR CMD (не функцию DIR VBA!), Чтобы получить список файлов, которые соответствуют шаблону поиска?

1 ответ

Решение

Работает ли это, если вы вводите команду dir с помощью "cmd /c " и заключаете команду DOS в двойные кавычки, например

RunCmd("cmd /c ""DIR""")

или же

RunCmd("cmd /c ""Dir c:\config* /a:-d /b /d /s""")
Другие вопросы по тегам