如何传递以" //"开头的参数到wsh脚本?

时间:2017-02-07 12:38:48

标签: vbscript jscript 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 个答案:

答案 0 :(得分:12)

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

传递一个双斜杠以结束cscript自己的参数解析。

note :我不知道它是否记录在任何地方,但在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:\>

答案 1 :(得分:3)

毕竟它适用于命名参数。

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

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