Войти

Показать полную графическую версию : [решено] Построчное чтение из файла в переменную


Elven
05-02-2015, 12:36
Было дело спрашивал (http://forum.oszone.net/thread-275470.html) как прочитать файл на 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
В общем теперь почему-то переменная возвращает "1" (без кавычек) »
Про что речь? Про «strLine» вот здесь:
strLine = .ReadLine()
?

Elven
05-02-2015, 13:21
Вот здесь
19 oShell.SendKeys strLine

Iska
05-02-2015, 13:39
Elven, тогда вовсе не могу понять изложенного:
теперь почему-то переменная возвращает "1" (без кавычек) »
Поясните, что Вы имеете в виду.

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

Iska
05-02-2015, 14:46
Elven, я никогда не рассчитывал на гарантированную работу «.SendKeys».

Elven
05-02-2015, 15:02
Обрезал то что все равно не имеет значения.
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. Вот что получил на выходе:
http://s019.radikal.ru/i602/1502/a7/1d17d9d34f54.jpg

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

Elven
05-02-2015, 16:12
ссылко (http://rghost.ru/private/8k6rrg54N/60b31b36ed9ce63d132af12cc22443a2)

Iska
05-02-2015, 16:44
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
Жесть какая, однако.
Iska, спасибо огромное.




© OSzone.net 2001-2012