2015-04-02 3 views
1

Я хотел бы узнать, возможно ли передать скрипт как строку в cscript/wscript, аналогичную опции -Command PowerShell. Кроме того, есть ли другой способ выполнить сценарии VBS из cmd?Пропустить скрипт для cscript/wscript как строку

В документации к cscript/wscript не указан такой параметр, но поскольку я не очень хорошо разбираюсь в сценариях Windows, мне интересно, не хватает ли я чего-то.

Спасибо!

+0

'Cscript /' возвращает Использование: 'CScript scriptname.extension [вариант ...] [аргументы ...]'. Эзотерический? Прочитайте [Запустите скрипт VBScript/Windows Scripting Host (WSH)] (http://ss64.com/vb/cscript.html). – JosefZ

+1

Нет, это обычная черта современных языков сценариев, например. интерпретатор CPython предоставляет параметр -c «pass script as string». (Для powershell см. Ответ ниже). Это очень полезно для среды, если вы хотите управлять другим интерпретатором, но не можете создавать файлы. –

+0

Очень полезно передать небольшой скрипт без необходимости доступа к файловой системе. Например, интерпретатор Python поддерживает его с помощью '-c'. Это работает: 'python -c" print 3 + 4 "' –

ответ

2

Многие (скриптовые) языки имеют R (ead) -E (оценивать) -P (rint) -L (oop) - инструменты и/или строки процесса, заданные в командной строке. Таким образом, с помощью Powershell вы можете сделать:

powershell -command (2+3)*10 
50 

Perl:

perl -e "print 'hello';" 
hello 

Для VBScript вы должны свернуть свой собственный; возможно, начиная с here или here (ff).

Очень простое (доказательство концепции) скрипт, который просто имеет дело с кодом из командной строки:

Option Explicit 

Dim goWAN : Set goWAN = WScript.Arguments.Named 
Dim goWAU : Set goWAU = WScript.Arguments.UnNamed 

If goWAN.Count <> 1 Or goWAU.Count <> 1 Or Not (goWAN.Exists("x") Or goWAN.Exists("e")) Then 
    WScript.Echo "usage: ", WScript.ScriptName, "/x|/e ""code to execute/evaluate"" (use ' for "")" 
Else 
    Dim sCode : sCode = Replace(goWAU(0), "'", """") 
    If goWAN.Exists("x") Then 
     Execute sCode 
    Else 
     WScript.Echo Eval(sCode) 
    End If 
End If 

выход:

cscript 29416456.vbs 
usage: 29416456.vbs /x|/e "code to execute/evaluate" (use ' for ") 

cscript 29416456.vbs /e "(2+3)*10" 
50 

cscript 29416456.vbs /x "WScript.Echo 'Now: ' & Now" 
Now: 4/3/2015 10:53:49 PM 
1

Один из способов сделать это, чтобы написать файл VBS из cmd через echo>, затем выполните его, а затем удалите.

Пример:

echo WScript.Echo WScript.CreateObject("WScript.Shell").SpecialFolders(WScript.Arguments(0)) > test.vbs 
cscript test.vbs "Desktop" //nologo 
del test.vbs 
Смежные вопросы