Запись результата cmd команды в файл

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
tima89
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 11.04.2004 (Вс) 16:51

Запись результата cmd команды в файл

Сообщение tima89 » 14.04.2004 (Ср) 19:29

Надо чтобы результат shell'а записывался в файл. По идее в cmd это делаеться так : command > smt.txt
Я сделал кодишку на основе этого

Код: Выделить всё

dim shellquery as string
shellquery = txtquery.Text

Shell " " + shellquery + " > c:\result.txt"


Выдает ошибку, что файла не сушествует (так эта команда поидее должна же его создавать, разве не так?) Не подскажите люди добрые в чем моя ошибка? Может файл надо сначала создать?
(знаю вопрос ламерский, пару дней назад VB достал - а в новичках помоч не смогли)

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 14.04.2004 (Ср) 21:21

Файл создают так:
Код: Выделить всё
Open "C:\result.txt" For Output As #1: Close #1

Однако, это проблемы не решает: ничего в файле нет.
Нет меня больше

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.04.2004 (Чт) 8:40

Редиректом (>, <, >>) заправляет интерпретатор комманд. А при вызове из Shell аргументы передаются довольно странно, т.е. Shell пытается найти и вызвать файл с именем "prog1.exe > C:\result.txt". Естественно такого файла нет (т.к. знак > запрещен в имени файла).
Попробуй вызывать так: "cmd /c prog1.exe >c:\result.txt" - есть некоторая вероятность, что выполнится. Естественно для Win9x систем нужно вызывать не cmd, а command.
Lasciate ogni speranza, voi ch'entrate.

Sur
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 91
Зарегистрирован: 14.07.2003 (Пн) 20:54
Откуда: C2H5OH

Сообщение Sur » 15.04.2004 (Чт) 15:25

Генерить *.bat файл и его запускать.

Ilya Vasilyev
Постоялец
Постоялец
 
Сообщения: 820
Зарегистрирован: 06.08.2002 (Вт) 5:36
Откуда: Russia, Omsk

Сообщение Ilya Vasilyev » 16.04.2004 (Пт) 7:46

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

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 16.04.2004 (Пт) 15:53

А отличить command от cmd поможет функция Environ:

Код: Выделить всё
Dim ShellQuery As String
Dim Proc As String, Temp As String
ShellQuery = txtQuery.Text
Proc = Environ("COMSPEC")
If Len(Proc) = 0 Then
    Temp = Environ("WINDIR")
    If Len(Temp) = 0 Then _
    Temp = "C:\WINDOWS"
    If Right(Temp, 1) = "\" Then _
    Temp = Mid(Temp, 1, Len(Temp) - 1)
    If Len(Dir(Temp + _
    "\command.com")) = 0 Then
        Proc = Temp + "\system32\cmd.exe"
    Else
        Proc = Temp + "\command.com"
    End If
End If
Shell Proc + " /c " + ShellQuery + " > c:\result.txt", vbHide
Моду создают модоки, а распространяют модозвоны.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 16.04.2004 (Пт) 16:02

И еще: чтобы нормально прочитать файл, созданный бравой консолью Виндов (TM), надо преобразовать его в ANSI-формат:

Код: Выделить всё
Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, _
ByVal lpszDst As String) As Long

Public Function OEM2ANSI (ByVal _
sOem As String) As String
On Error Resume Next
Dim sAnsi As String
    sAnsi = String(Len(sOem), Chr(0))
    Ret = OemToChar(sOem, sAnsi)
    OEM2ANSI = sAnsi
End Function

Public Sub GetResults()
On Error Resume Next
Dim fn As Byte, FileText As String
Dim CurrentLine As String
    fn = FreeFile
    Open "C:\result.txt" For Input As fn
    Do Until EOF(fn)
        DoEvents
        Line Input fn, CurrentLine
        If Len(CurrentLine) <> 0 Then
            FileText = FileText + CurrentLine + _
            vbCrLf
        End If
    Loop
    Close fn
    If Len(FileText) = 0 Then Exit Sub
    FileText = Mid(FileText, 1, Len(FileText) - 2)
    FileText = OEM2ANSI(FileText)
    txtResult.Text = FileText
End Sub
Моду создают модоки, а распространяют модозвоны.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: PetalBot и гости: 21

    TopList  
cron