Этот пакетный запуск был создан, чтобы пакетные файлы не запускали окно командной строки ... Теперь, когда я добавляю больше переменных, это не работает ...

Я запускаю VBScript вот так;

wscript D:\batchlaunchersyntax.vbs D:\the batch\batch.bat 11 D:\program files\hello world

Последние 2 переменные меняются. Я хотел бы запустить пакетный файл, передавая число, за которым следует переменная каталога.

Не могли бы вы помочь мне отредактировать этот VBScript, чтобы сделать это?

'--------------------8<----------------------
sTitle = "Batch launcher"

Set oArgs = WScript.Arguments
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("WScript.Shell")

Если oArgs.Count <> 3 Тогда

' Will die after 10 seconds if no one is pressing the OK button
oShell.Popup "Error: You need to supply a file path " _
& "as input parameter!", 10, sTitle, vbCritical + vbSystemModal

Wscript.Quit 1
End If

sFilePath = oArgs(0)
sArg = oArgs(1)

sArg2 = oArgs(2)

If Not oFSO.FileExists(sFilePath) Then
' Will die after 10 seconds if no one is pressing the OK button
oShell.Popup "Error: Batch file not found", _
10, sTitle, vbCritical + vbSystemModal

Wscript.Quit 1
End If

' add quotes around the path in case of spaces

iRC = oShell.Выполнить ("" "" & sFilePath & "" "" & sArg & "" & sArg2 & "", 0, True)

' Return with the same errorlevel as the batch file had
Wscript.Quit iRC

'--------------------8<----------------------

2 ответа2

1

Прочитайте и следуйте синтаксису: Escape-символы, разделители и кавычки:

Использование "двойных кавычек"

Если один параметр содержит пробелы, вы все равно можете передать его как один элемент, заключив его в "кавычки" - это хорошо работает для длинных имен файлов.

Применительно к вашему делу используйте:

wscript D:\batchlaunchersyntax.vbs "D:\the batch\batch.bat" 11 "D:\program files\hello world"

В противном случае командная строка размечается следующим образом:

rem     ↓ script name
wscript D:\batchlaunchersyntax.vbs D:\the batch\batch.bat 11 D:\program files\hello world
rem oArgs(0)    D:\the
rem oArgs(1)    batch\batch.bat
rem oArgs(2)    11
rem oArgs(3)    D:\program
rem oArgs(4)    files\hello
rem oArgs(5)    world
0

Ваш скрипт принимает только два аргумента, поэтому вам придется изменить эту строку, чтобы отразить количество аргументов, которые вы хотите передать скрипту:

If oArgs.Count <> 2 Then

Измените 2 на любой новый лимит.

Первый аргумент, oArgs(0) , является именем пакетного скрипта, который вы хотите запустить.

Второй аргумент, oArgs(1) , является именем параметра, передаваемого первому аргументу.

Чтобы передать больше аргументов, вы должны присвоить oArgs(2) и т.д. Новым переменным, а затем изменить строку, которая гласит:

oShell.Run("""" & sFilePath & """" & sArg, 0, True)

... чтобы в сценарий можно было передать больше аргументов. Вы добавили бы их после переменной sArg , таким образом: sArg & " " & sArg2 & " " & sArg3 предполагая, что вы присвоили переданные аргументы sArg2 и sArg3

Конечно, ваш командный файл должен знать, что делать с переданными аргументами. :-)

Надеюсь это поможет!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .