Войти

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


Instant_SR
20-11-2013, 10:19
Доброго времени суток. Есть 2 файла .bat и .vbs
в .bat есть код:

FOR /f "TOKENS=*" %%i IN ('DIR /b "%PathLocal%\Sirene\%COMPUTERNAME%"') DO ( ::тут просто ищется папка в сети
SET result=%%i ::тут устанавливается значение переменной "result"
IF "!result:~0,4!"=="gfum" ( ::тут в зависимости от того какое значение переменной некое действие
XCOPY %PathLocal%\Sirene\%COMPUTERNAME%\!result! C:\!result!\/e/i/q/h/y ::собственно само действие "xcopy"
IF EXIST C:\!result! ( ::проверка как оно там скопировано...


Из всего, что выше интересует только значение переменной result оно по сути gfum[число], из-за этого [числа] затруднительно постоянно учитывать значение, а число всегда меняется без этого никак.

теперь файл .vbs он по-сути создает ярлык на исполняющий файл, в копируемой .bat-ником папке, в нем вот такой код:


oShortCut.IconLocation = "c:\gfum[число]\AutoUpdate.exe ,0" :: сложность в передаче другому скрипту параметров переменной из основного скрипта


Как можно передать эту переменную в vbs из bat?
Есть мысль в vbs запустить проверку аналогичную в bat с поиском папки начинающейся на gfum и, в случае нахождения таковой, использовать ее имя в адресе.
Жду помощи, идей, решений...

Iska
20-11-2013, 14:35
Как можно передать эту переменную в vbs из bat? »
Так же, как и из vbs в пакетный файл — параметром командной строки:
cscript.exe //nologo "Путь\Скрипт.vbs" "gfum!result!"

Instant_SR
20-11-2013, 17:41
еще вопрос остался:
в VBS использую для адреса в ярлыке:

.TargetPath = "c:\" & result & "\run.exe"

При условии, что result=gfum100, ярлык должен искать run.exe по адресу:

c:\gfum100\run.exe

Ярлык создается, но ссылается на: C:\run.exe

Что не так? при исправлении result на c:\gfum100 , конструкцию .TargetPath = result & "\run.exe" принимает нормально

Instant_SR
20-11-2013, 18:08
проверил чуть, в VBS ошибок нет с помощью MsgBox вывел result = пустое сообщение, выходит, из BAT файла не передается result.
В *.bat вызываю скрипт так:
cscript.exe //nologo "путь\скипт.vbs" "!result!"

перед этим вызовом, попробовал отобразить ECHO !result! получил gfum100
Выходит vbs вызывается, а переменная не получает значения

Iska
20-11-2013, 19:02
в VBS использую для адреса в ярлыке:
.TargetPath = "c:\" & result & "\run.exe" »
А надо использовать «WScript.Arguments.Item(0)». Вы передаёте скрипту параметром значение, а не переменную. А чтобы не было таких «бяк», всегда используйте требование предварительного описания переменных — «Option Explicit» первой строкой скрипта. Сразу увидите ошибку.

Instant_SR
21-11-2013, 10:04
Так, тоже полезно, спасибо, но при выводе:
MsgBox WScript.Arguments.Item(0)

получаю конструкцию: result=gfum100
выходит, нужно отсечь часть символов от начала, а просто к result как бы перейти, чтобы в дальнейшем пользоваться уже result как переменной? В начале OptionExplict есть, Dim result объявлена...

Instant_SR
21-11-2013, 11:36
отбой... все решил... верней вызов из .bat был неверный:
было: cscript.exe //nologo "\\путь\файл.vbs" "result=!result!"
надо: cscript.exe //nologo "\\путь\файл.vbs" "!result!"
ну и в .vbs:

Option Explicit

это вначале обязательно. И при указании адреса для ярлыка, можно использовать:

.TargetPath = "c:\" & WScript.Arguments.Item(0) & "\run.exe"

тему "решаем" но пожелание осталось бы использовать не "громоздкую" конструкцию, а объявить в .vbs переменную result и пользоваться ей
т.е. Dim result
и .TargetPath = "c:\" & result & "\run.exe"

Iska
21-11-2013, 14:22
Instant_SR, использование параметров — это не «громоздкая конструкция», а единственно разумный и правильный вариант (есть ещё один, мало разумный).




© OSzone.net 2001-2012