Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
1 / 1 / 1
Регистрация: 15.11.2013
Сообщений: 79

Запуск батника из вбс скрипта

16.07.2014, 01:43. Показов 8362. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как правильно запустить батник с параметрами из VBS скирпта?
Батник принимает 3 параметра, все эти параметры VBS скрипт читает из файла.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.07.2014, 01:43
Ответы с готовыми решениями:

Запуск скрипта при включении ОС
Подскажите, как написать скрипт, чтоб при включении или выключении он дописывал в текстовый файл время когда это произошло?

Запуск скрипта VBS из HTA
Добрый день. Помогите пожалуйста в решении следующей задачи. Есть скрипт который собирает определенные данные по ПК пользователя и есть...

Запуск скрипта на определенном сайте
Имеется скрипт, который запускается в на конкретных браузере и сайте: dim objShell, objWindow, strTitle set objShell =...

10
Заблокирован
16.07.2014, 01:55
Sean_mephi, чтобы файл открыть и запустить то там надо
Visual Basic
1
2
Open:\Путь к файлу.....
..........
0
1 / 1 / 1
Регистрация: 15.11.2013
Сообщений: 79
16.07.2014, 09:20  [ТС]
lodret, нет. Вы не поняли моего вопроса.
Ответ должен быть примерно таким:

WshShell.Run "cmd.exe"& "&my.bat"...
0
102 / 60 / 15
Регистрация: 29.01.2014
Сообщений: 119
16.07.2014, 09:52
Sean_mephi,
Visual Basic
1
WshShell.Run """полный путь к батнику"" параметры"
нет?
0
1 / 1 / 1
Регистрация: 15.11.2013
Сообщений: 79
16.07.2014, 13:24  [ТС]
loban_ser, а если параметры хранятся в переменных VBS, и получил я эти параметры чтением из файла?

Добавлено через 1 час 49 минут
loban_ser, а если параметры хранятся в переменных VBS, и получил я эти параметры чтением из файла?

Ваш вариант не работает.
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
16.07.2014, 20:32
Цитата Сообщение от Sean_mephi Посмотреть сообщение
Батник принимает 3 параметра, все эти параметры VBS скрипт читает из файла
Пример:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Dim objWShell, strPath1, strPath2, strArg1, strArg2, strArg3
Dim objFS, objFile, strTemp, arrTemp
 
strPath1 = "D:\1.bat"
strPath2 = "D:\args.txt"
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.FileExists(strPath1) Then
    If objFS.FileExists(strPath2) Then
        Set objFile = objFS.OpenTextFile(strPath2, 1)
        If objFS.GetFile(strPath2).Size > 0 Then
            strTemp = objFile.ReadAll
            objFile.Close
            Set objFile = Nothing
            arrTemp = Split(strTemp, vbNewLine)
            If UBound(arrTemp) > 1 Then
                If Len(arrTemp(0)) > 0 Then strArg1 = arrTemp(0)
                If Len(arrTemp(1)) > 0 Then strArg2 = arrTemp(1)
                If Len(arrTemp(2)) > 0 Then strArg3 = arrTemp(2)
                Erase arrTemp
                If IsEmpty(strArg1) Or IsEmpty(strArg2) Or IsEmpty(strArg3) Then
                    WScript.Echo "Не все аргументы определены"
                Else
                    Set objWShell = CreateObject("WScript.Shell")
                    objWShell.Run strPath1 & " " & strArg1 & " " & strArg2 & " " & strArg3, 1
                    Set objWShell = Nothing
                End If
            Else
                WScript.Echo "Недостаточно данных"
            End If
        Else
            WScript.Echo "Файл аргументов пуст"
        End If
    Else
        WScript.Echo "Не найден путь " & strPath2
    End If
Else
    WScript.Echo "Не найден путь " & strPath1
End If
Set objFS = Nothing
WScript.Quit 0
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.07.2014, 22:20
Цитата Сообщение от Dmitrii Посмотреть сообщение
arrTemp = Split(strTemp, vbNewLine)
Это так просто не получиться.
Что если я захочу задать в качестве аргументов: 1 2 "3 3". Split разобъет их на 4. На самом деле их 3.

Вот тут целая тема с разными вариантами парсинга: Простой парсер аргументов командной строки

Кроме того, для objWShell.Run объект запуска и все аргументы нужно передавать в кавычках.
Если батник будет находится в папке с пробелами, без кавычек не запустится.

С учетом замечаний, вариант с передачей неограниченного кол-ва аргументов будет выглядеть так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Option Explicit
 
Dim Batfile, ArgumentsFile
 
Batfile = "c:\1 1\args.exe"
ArgumentsFile = "h:\_VBA\_Dragokas\CommandLine_Arguments\args.txt"
 
call RunProcess(BatFile, ArgumentsFile)
 
Function RunProcess(strPath1, strPath2)
    Dim objFS, strTemp, argc, argv, CmdLine, n
 
    Set objFS = CreateObject("Scripting.FileSystemObject")
 
    If not objFS.FileExists(strPath1) Then WScript.Echo "Не найден путь " & strPath1: Exit Function
    If not objFS.FileExists(strPath2) Then WScript.Echo "Не найден путь " & strPath2: Exit Function
 
    If objFS.GetFile(strPath2).Size = 0 Then WScript.Echo "Файл аргументов пуст": Exit Function
    With objFS.OpenTextFile(strPath2, 1)
        strTemp = .ReadAll
        .Close
    end with
 
    CmdLine = """" & strPath1 & """"            ' Имя файла в кавычки
    
    If strTemp <> "" Then                       ' Если есть аргументы, их тоже добавляем в кавычках
        Parse_CMD strTemp, argc, argv           ' Вместо CommandLineToArgvW
        For n = 1 To argc
            CmdLine = CmdLine & " """ & argv(n) & """"
        Next
    End If
 
    CreateObject("WScript.Shell").Run CmdLine, 1
    Set objFS = Nothing
End Function
 
Sub Parse_CMD(inCmdLine, argc, argv)
  Dim Lex, St, nL, nA, Unit
  St = inCmdLine 'Command()
  Lex = Split(St) 'Разбиваем по пробелам для лексического анализа
  ReDim argv(UBound(Lex) + 1) 'Определяем выходной массив до максимально возможного числа параметров
  argv(0) = WScript.ScriptFullName
  If Len(St) <> 0 Then
    Do While nL <= UBound(Lex)
      Unit = Lex(nL) 'Записысаем смысловую единицу
      If Len(Unit) <> 0 Then 'Защита от двойных пробелов между параметрами
        If Left(Lex(nL), 1) = """" Then 'Если попалась кавычка
          Do Until Right(Lex(nL), 1) = """" 'Пока не найдем кавычке пару
            nL = nL + 1
            If nL > UBound(Lex) Then Exit Do 'Если не дождались завершающей кавычки, а лимит превышен
            Unit = Unit & " " & Lex(nL)
          Loop
          Unit = Replace(Unit, """", "") 'Удаляем кавычки
        End If
        argv(nA + 1) = Unit
        nA = nA + 1 'Счетчик выходных аргументов
      End If
      nL = nL + 1 'Счетчик лексических единиц
    Loop
  End If
  ReDim Preserve argv(nA)
  argc = nA
End Sub
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
16.07.2014, 22:24
Dragokas, новая строка же разделитель в том варианте а не пробел
Так что 3 параметра будет:
Code
1
2
3
1
2
"3 3"
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.07.2014, 22:48
Понятно. Я недочитал код.
Но ТС об этом ничего не говорил, поэтому пусть и выбирает нужный вариант.

+ я еще и проверки на кол-во аргументов убрал.
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
17.07.2014, 06:57
Цитата Сообщение от Dragokas Посмотреть сообщение
... так просто не получиться...
Цитата Сообщение от Dragokas Посмотреть сообщение
... для objWShell.Run объект запуска и все аргументы нужно передавать в кавычках...
Вообще, вся процедура разбора содержимого файла сильно зависит от частностей. Например, кавычки могут уже присутствовать, или аргументы могут совершенно не нуждаться в обрамлении кавычками.
Пример, безусловно, не универсален, но о деталях предпочитаю не гадать. Пусть об этом заботится уже автор темы.
Цитата Сообщение от Dragokas Посмотреть сообщение
...Если батник будет находится в папке с пробелами, без кавычек не запустится.
Этого, действительно, не учёл, а стоило бы.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
17.07.2014, 16:22
Цитата Сообщение от Dmitrii Посмотреть сообщение
Например, кавычки могут уже присутствовать, или аргументы могут совершенно не нуждаться в обрамлении кавычками.
Приведенный парсер как раз проверяет на присутствие кавычек и правильно разбивает на составляющие.

А вот на счет вызываемой программы:
- если это EXE, то в нем для парсинга входящих аргументов обычно используется стандартная API функция CommandLineToArgvW, которая по описанию MSDN требует обрамления каждого аргумента кавычками (делать это не обязательно, но желательно).
- если это БАТ-файл, то правильно написанный код сначала удаляет кавычки из аргументов, если они присутствуют,
а затем снова обрамляет их кавычками.
Делается это встроенными средствами ком. строки очень просто и это всегда хороший тон:
Bash
1
if "%~1"=="Первый аргумент" echo Значение Первого аргумента = "Первый аргумент"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.07.2014, 16:22
Помогаю со студенческими работами здесь

Запуск файла с vbs скрипта
Как запустить какой-либо файл с vbs скрипта? Прописал путь таким образом но не всегда он срабатывает set...

Запуск скрипта с правами администратора
Доброго времени суток! Есть система: WinXP (SP3). Машина входит в домен. На компе два пользователя: юзер и админ. Вопрос заключается...

Запуск одного скрипта из другого
Какими кодами активируются скрипты в VBS? Есть скрипты, нужно чтобы эти файлы запускались другим скриптом. Не аутохоткеем же их кликать....

Запуск vba из vbs скрипта
Прошу помощи. Сам я человек далёкий от VBS. Задача такая.... есть файл excel, в нём множество листов с данными, мне надо сохранить...

Запуск скрипта при выходе из системы
Как создать скипт для создания текстового файла при выходе из ситемы ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru