Visual Basic, Захват вывода из cmd

Извините, если это спрашивали раньше, я обнаружил, что другие решения слишком сложны для меня. В любом случае, я пытаюсь найти изображение с помощью cmd в коде Visual Basic и сохранить путь изображения в строку, но я не могу захватить вывод из cmd справа. Любая помощь будет оценена, спасибо!.

Код:

    Dim imageLocation As String
    Dim cmd As New Process
    Dim SR As System.IO.StreamReader
    cmd.StartInfo.FileName = "cmd.exe"
    cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    cmd.StartInfo.Arguments = "/C dir /b/s Roey.png"
    cmd.Start()
    SR = cmd.StandardOutput
    imageLocation = SR.ReadLine

ОБНОВЛЕНО Итак, я обнаружил, что сохранение вывода в текстовый файл, а затем чтение может быть более простым, поэтому я написал следующий код:

        Dim cmd As New Process
        cmd.StartInfo.FileName = "cmd.exe"
        cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
        cmd.StartInfo.Arguments = "/C dir /b/s Roey.png > 
        C:\Users\ירין\Desktop\Roeyyy\path.txt"
        cmd.Start()
        cmd.WaitForExit()

когда я запускаю

    "dir /b/s Roey.png > 
    C:\Users\ירין\Desktop\Roeyyy\path.txt"

на CMD работает отлично, так почему здесь не работает? :(


person yarinc    schedule 07.10.2018    source источник
comment
Здесь много проблем. "/C dir /b/s Roey.png" => это должно быть "/C Roey.png dir /B /S". .StartInfo.WorkingDirectory = [SomePath] => Укажите Каталог, с которого следует начать перечисление. .StartInfo.RedirectStandardOutput = True =› Для этого нужно перенаправить StdOut =› .StartInfo.UseShellExecute = False, потому что по умолчанию стоит True и это не сработает. Dim SR As StreamReader = cmd.StandardOutput While (imageLocation = String.Empty) imageLocation = SR.ReadLine End While. Склонен к ошибкам. Используйте Directory.GetFiles() или Directory.EnumeratetFiles().   -  person Jimi    schedule 07.10.2018
comment
не знаю почему, но когда я запускаю следующую команду в cmd, она работает нормально. 'dir /b/s Roey.png › C:\Users\ירין\Desktop\Roeyyy\path.txt', но когда я его пишу, он не работает, обновляю пост сейчас..   -  person yarinc    schedule 08.10.2018
comment
CMD.EXE – это Программа. Он интерпретирует команды и выполняет процедуру. Что ты должен делать. Одна строка для замены всего этого: Dim MyFilePath As String = Directory.GetFiles([SomePath], "*.png", SearchOption.AllDirectories).Where(Function(f) f.Contains("Roey.png")).FirstOrDefault(), где [SomePath] — это базовый каталог для перечисления. ==› В первом комментарии есть ошибка: Должно быть: /C dir Roey.png /B /S   -  person Jimi    schedule 08.10.2018


Ответы (2)


Я нашел это:

Dim MyFilePath As String = Directory.GetFiles([SomePath], "*.png", SearchOption.AllDirectories).
     Where(Function(f) f.Contains("Roey.png")).FirstOrDefault()

Решено!

person yarinc    schedule 07.10.2018
comment
Что ж, так лучше. Все еще не лучший вариант, просто передайте roey.png в качестве второго аргумента. Шаблон поиска также может быть точным именем файла. - person Hans Passant; 08.10.2018
comment
Выглядит идентично комментарию @Jimi. - person Mary; 08.10.2018

Вы программист, поэтому ищете файлы.

Imports System.Runtime.InteropServices
Sub Main
'On Error Resume Next
Set fso = CreateObject("Scripting.FileSystemObject")
Dirname = InputBox("Enter Dir name")

ProcessFolder DirName

End Sub

Sub ProcessFolder(FolderPath)
    On Error Resume Next
    Set fldr = fso.GetFolder(FolderPath)

    Set Fls = fldr.files

    For Each thing in Fls
         msgbox Thing.Name & " " & Thing.path 
         'fso.copyfile thing.path, "C:\backup"
    Next

    Set fldrs = fldr.subfolders
    For Each thing in fldrs
        ProcessFolder thing.path
    Next

End Sub
person CatCat    schedule 07.10.2018