Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Построчное чтение из файла в переменную (http://forum.oszone.net/showthread.php?t=295016)

Elven 05-02-2015 12:36 2466704

Построчное чтение из файла в переменную
 
Было дело спрашивал как прочитать файл на vbs в переменную. Тогда скрипт отработал свое на "ура", а теперь, почему-то не хочет. Вроде как в пьяном угаре ничего не менял, но мало ли.
В общем теперь почему-то переменная возвращает "1" (без кавычек)
Просьба указать где я не прав.
Код:

01 Option Explicit
02 Dim strSourceFile
03 Dim oShell
04 Dim objFSO
05 Dim strLine
06
07 Set oShell = WScript.CreateObject("WScript.Shell")
08
09 strSourceFile = "IP.txt"
10
11 With WScript.CreateObject("Scripting.FileSystemObject")
12        If .FileExists(strSourceFile) Then
13                With .OpenTextFile(strSourceFile)
14                        Do Until .AtEndOfStream
15                                strLine = .ReadLine()
16
17 oShell.Run "putty.exe"
18 WScript.Sleep 300
19 oShell.SendKeys strLine
20 WScript.Sleep 300
21 oShell.SendKeys "%g"
22 WScript.Sleep 300
23 oShell.SendKeys "{DOWN}"
24 WScript.Sleep 300
25 oShell.SendKeys "%l"
26 WScript.Sleep 300
27 oShell.SendKeys "%f" & "D:\logs\&H.log"
28 WScript.Sleep 300
29 oShell.SendKeys "%o"
30 WScript.Sleep 3000
31 oShell.SendKeys "user" & chr(13)
32 WScript.Sleep 300
33 oShell.SendKeys "P@$$w0rd" & chr(13)
34 WScript.Sleep 300
35 oShell.SendKeys "show ver | inc Serial" & chr(13)
36 WScript.Sleep 300
37 oShell.SendKeys "exit" & chr(13)
38
39
40                                Loop
41                       
42                        .Close
43                End With
44        Else
45                WScript.Echo "Can't find [" & strSourceFile & "]."
46                WScript.Quit 1
47        End If
48 End With
49
50 WScript.Quit 0


Iska 05-02-2015 13:12 2466733

Цитата:

Цитата Elven
В общем теперь почему-то переменная возвращает "1" (без кавычек) »

Про что речь? Про «strLine» вот здесь:
Код:

strLine = .ReadLine()
?

Elven 05-02-2015 13:21 2466738

Вот здесь
Код:

19 oShell.SendKeys strLine

Iska 05-02-2015 13:39 2466747

Elven, тогда вовсе не могу понять изложенного:
Цитата:

Цитата Elven
теперь почему-то переменная возвращает "1" (без кавычек) »

Поясните, что Вы имеете в виду.

Elven 05-02-2015 14:04 2466768

скрипт должен брать построчно данные из файла (IP.txt), запускать "putty.exe" и передавать открывшемуся окну значение находящееся в переменной.
именно в этот момент окну "putty.exe" передается значение "1"
Файл IP.txt - существует, путь к нему я пытался указывать и относительный и абсолютный, результат один - "1". (извините за каламбур)

Iska 05-02-2015 14:46 2466788

Elven, я никогда не рассчитывал на гарантированную работу «.SendKeys».

Elven 05-02-2015 15:02 2466800

Обрезал то что все равно не имеет значения.
Код:

Option Explicit

Dim strSourceFile

Dim oShell

Dim objFSO
Dim strLine

Set oShell = WScript.CreateObject("WScript.Shell")

strSourceFile = "IP.txt"

With WScript.CreateObject("Scripting.FileSystemObject")
        If .FileExists(strSourceFile) Then
                With .OpenTextFile(strSourceFile)
                        Do Until .AtEndOfStream
                                strLine = .ReadLine()
WScript.Echo strLine
                                Loop
                       
                        .Close
                End With
        Else
                WScript.Echo "Can't find [" & strSourceFile & "]."
                WScript.Quit 1
        End If
End With

WScript.Quit 0

В файле оставил один IP. Вот что получил на выходе:

Iska 05-02-2015 15:50 2466827

Elven, упакуйте Ваш файл «IP.txt» в архив, выложите на RGhost. Ссылку — сюда.

Elven 05-02-2015 16:12 2466841

ссылко

Iska 05-02-2015 16:44 2466847

Elven, Ваш файл в кодировке Unicode LE/1200. Просто сохраните его в ANSI/1251.

Ситуация, кстати, интересная…
Например, метод «.OpenTextFile()» объекта «Scripting.FileSystemObject»:
Скрытый текст
Код:

Option Explicit

Const ForReading  = 1
Const TristateTrue      = -1


Dim strSourceFile
Dim strLine


strSourceFile = "E:\Песочница\0429\IP.txt"

With WScript.CreateObject("Scripting.FileSystemObject")
        If .FileExists(strSourceFile) Then
                With .OpenTextFile(strSourceFile, ForReading, TristateTrue)
                        Do Until .AtEndOfStream
                                strLine = .ReadLine()
                                WScript.Echo strLine
                        Loop
                       
                        .Close
                End With
        Else
                WScript.Echo "Can't find [" & strSourceFile & "]."
                WScript.Quit 1
        End If
End With

WScript.Quit 0


несмотря на параметры, открывает файл как ANSI/1251, со всеми вытекающими.

А вот если использовать, казалось бы, вполне аналогичный же метод «.OpenAsTextStream» объекта «File»:
Скрытый текст
Код:

Option Explicit

Const ForReading  = 1
Const TristateTrue      = -1


Dim strSourceFile
Dim strLine


strSourceFile = "E:\Песочница\0429\IP.txt"

With WScript.CreateObject("Scripting.FileSystemObject")
        If .FileExists(strSourceFile) Then
                With .GetFile(strSourceFile).OpenAsTextStream(ForReading, TristateTrue)
                        Do Until .AtEndOfStream
                                strLine = .ReadLine()
                                WScript.Echo strLine
                        Loop
                       
                        .Close
                End With
        Else
                WScript.Echo "Can't find [" & strSourceFile & "]."
                WScript.Quit 1
        End If
End With

WScript.Quit 0


с теми же параметрами — то всё отрабатывает как положено. Пожалуй, в первый раз сталкиваюсь с подобным поведением.

Elven 05-02-2015 16:55 2466854

Жесть какая, однако.
Iska, спасибо огромное.


Время: 00:53.

Время: 00:53.
© OSzone.net 2001-