Как передать аргумент, который начинается с "/ / " в сценарий 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"

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

ошибка ввода: указан неизвестный параметр "/ / test".

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

2 ответов


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

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

Примечание: Я не знаю, документирован ли он где-нибудь, но протестирован на windows 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:\>

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

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

и

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