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

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

Ragnazar 10-10-2012 07:42 2002483

VBS - переменные файла
 
Как заставить VBS скрипт читать переменные из файла?
Есть файл var.cfg в нем примерно такой текст

anyVar=VARHERE
another.var1=Var1
another.var2=Var2

и тд. Тоесть

название.переменной=значение переменной

В java такое точно есть но нужно через VBS

Iska 10-10-2012 07:58 2002487

Ragnazar, в VBScript переменные не могут содержать точку:
Код:

Naming Restrictions
Variable names follow the standard rules for naming anything in VBScript. A variable name:
* Must begin with an alphabetic character.
* Cannot contain an embedded period.
* Must not exceed 255 characters.
* Must be unique in the scope in which it is declared.

В остальном — пожалуйста:
Код:

Option Explicit

Dim strContent
Dim strLine

With WScript.CreateObject("Scripting.FileSystemObject")
        With .OpenTextFile("E:\Песочница\0182\var.cfg")
                For Each strLine In Split(.ReadAll(), vbCrLf)
                        WScript.Echo "Var name:", Split(strLine, "=")(0), vbTab, "Var value:", Split(strLine, "=")(1)
                       
                        Execute strLine
                        '…or ExecuteGlobal strLine
                Next
               
                .Close
        End With
End With

WScript.Quit 0


Ragnazar 10-10-2012 08:30 2002499

Работает. Но есть два недочета
1) Пишет значение только первой строчки.
var.cfg
var1=AnyVar
var2=VarHere

Выход
Var name: var1 Var value: AnyVar
var2

2) После нажатия ОК выдает ошибку
Строка: 11
Символ: 4
Ошибка: Недопустимый знак

Самому разобрать и понять скрипт пока не получилось и я просто скопировал

Iska 10-10-2012 08:59 2002508

Цитата:

Цитата Ragnazar
Работает. Но есть два недочета
1) Пишет значение только первой строчки.
var.cfg
var1=AnyVar
var2=VarHere
Выход
Var name: var1 Var value: AnyVar
var2 »

У меня на приведённом примере:
Цитата:

Код:

Var name: var1          Var value: AnyVar
Var name: var2          Var value: VarHere


Цитата:

Цитата Ragnazar
2) После нажатия ОК выдает ошибку
Строка: 11
Символ: 4
Ошибка: Недопустимый знак »

Ragnazar, полагаю, дело по-прежнему в именовании переменных. Выложите файл «var.cfg», упаковав его в архив.

P.S. Я предпочитаю исполнять скрипты под cscript.exe.

Ragnazar 10-10-2012 14:49 2002731

Странно но вторая проблема прошла сама. Но вторая сточка все так-же выдает только var2
А и можно - ли сделать что-бы эти переменные можно-было использовать далее?? Не только в пределах
WScript.Echo "Var name:", Split(strLine, "=")(0), vbTab, "Var value:", Split(strLine, "=")(1)

Ragnazar 10-10-2012 14:51 2002732

Вложений: 1

var.cfg

Iska 11-10-2012 08:50 2003206

Цитата:

Цитата Ragnazar
Но вторая сточка все так-же выдает только var2 »

Как я и предполагал — Ваш файл «var.cfg» в качестве разделителя строк использует не стандартные для Windows «CrLf», а только «Lf», использование которых характерно для Unix [оттого-то я и просил не просто выложить содержимое файла на форум, а хотел увидеть именно сам файл и именно в архиве, дабы сохранить его целостность для последующего анализа]. Потому Вы и видели в выводе:
Код:

Var name: var1 Var value: AnyVar
var2

одну лишь, единственную переменную — var1, со значением AnyVar ↵var2 (где «↵» — Lf, LineFeed).

Выход: использовать в функции Split() разделитель «vbLf» вместо «vbCrLf», либо перейти использование в файле «var.cfg» стандартных для Windows разделителей строк.

Цитата:

Цитата Ragnazar
А и можно - ли сделать что-бы эти переменные можно-было использовать далее?? Не только в пределах
WScript.Echo "Var name:", Split(strLine, "=")(0), vbTab, "Var value:", Split(strLine, "=")(1) »

А как Вы будете заранее знать, какие в файле переменные?

Опишите, что именно Вы хотите получить. Хранение значений некоторых, заранее известных, переменных между запусками скрипта?

Ragnazar 13-10-2012 15:28 2004614

Будет лишь один скрипт а вот var.cfg будет гулять и меняться
Скрипт будет дописан с учетом всех переменных.
Лишние переменные не будут использоваться а те что отсутствуют будут с ошибками либо скрипт не продолжит работу

Iska 13-10-2012 17:04 2004671

Ragnazar, понятней не стало.

Ragnazar 13-10-2012 19:14 2004744

Скрипт будет основан на выведении данных в виде
Товар:%var1% Статус:%var1s%
И при добавлении новых строк в конфиг будет больше строк выводиться
Если в конфиге 4 товара
Товар:Некийтовар Статус:ОК
Товар:Другойтовар Статус:ОК
Товар:Ещетовар Статус:Нет
Товар:Товар Статус:

cfg
var1=Некийтовар
var1s=ОК
var2=Другойтовар
var2s=ОК
var3=Ещетовар
var3s=Нет
var4=Товар
var4s=

Iska 14-10-2012 00:29 2004903

Ragnazar, тогда переменные Вам ни к чему. Это обычные данные. Используйте простой двумерный (а лучше — ассоциативный) массив.

Iska 14-10-2012 19:40 2005269

Ragnazar, если не совсем понятно, вот пример:
читать дальше »
Код:

Option Explicit

Dim objDictionary
Dim elem

Dim strLine


Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

With WScript.CreateObject("Scripting.FileSystemObject")
        With .OpenTextFile("E:\Песочница\0183\var.cfg")
                For Each strLine In Split(.ReadAll(), vbCrLf)
                        objDictionary.Add Split(strLine, "=")(0), Split(strLine, "=")(1)
                Next
               
                .Close
        End With
End With

For Each elem In objDictionary.Keys
        WScript.Echo "Key:", elem, vbTab, "Value:", objDictionary.Item(elem)
Next

objDictionary.RemoveAll
Set objDictionary = Nothing

WScript.Quit 0


Если же понадобится заполнять некий шаблон — Вы можете проверять существование путём «objDictionary.Exists(<Key>)».


Время: 15:30.

Время: 15:30.
© OSzone.net 2001-