2017-02-07 5 views
6

Если у меня есть следующий сценарий (который просто выводит первый аргумент в консоль):Как передать аргумент, начинающийся с "//" в wsh-скрипт?

@if (@X)==(@Y) @end /* JScript comment 
    @echo off 
    cscript //E:JScript //nologo "%~f0" %* 
    exit /b %errorlevel% 
@if (@X)==(@Y) @end JScript comment */ 

WScript.Echo(WScript.Arguments.Item(0)); 

И я пытаюсь что-то вроде

C:\>test.bat "//test" 

Я получаю следующую ошибку

Input Error: Unknown option "//test" specified.

Несмотря на кавычки. Он берется как опция для хоста сценариев Windows. Как передать аргумент, начинающийся с //. Именованные аргументы?

ответ

12
cscript //E:JScript //nologo "%~f0" // %* 

Проходят двойной слэш, чтобы закончить cscript собственный аргумент синтаксический.

примечание: Я не знаю, если это документировано в любом месте, но испытано на окнах 7 и 10

тест сценарий:

Option Explicit 

Dim argument 

    For Each argument In WScript.Arguments 
     WScript.Echo "argument: " & argument 
    Next 

    For Each argument In WScript.Arguments.Named 
     WScript.Echo "Named: " & argument 
    Next 

    For Each argument In WScript.Arguments.UnNamed 
     WScript.Echo "UnNamed: " & argument 
    Next 

выход (извините, испанский языковой стандарт):

W:\>cscript //nologo test.vbs //test 
Error de entrada: Opción desconocida "//test" especificada. 

W:\>cscript //nologo test.vbs // //test /one two 
argument: //test 
argument: /one 
argument: two 
Named: /test 
Named: one 
UnNamed: two 

W:\>cscript test.vbs // //nologo //test /one two 
Microsoft (R) Windows Script Host versión 5.812 
Copyright (C) Microsoft Corporation. Reservados todos los derechos. 

argument: //nologo 
argument: //test 
argument: /one 
argument: two 
Named: /nologo 
Named: /test 
Named: one 
UnNamed: two 

W:\> 
+0

Ничего себе. Отличный взлом! Я не видел этого документально, но я снова проверю – npocmaka

3

В конце концов, он работает с именованными аргументами.

WScript.Echo(WScript.Arguments.Named.Item("test")); 

и

cscript myscript.wsf /test:"//test"