How to pass an argument starting with "//" to a wsh script?

If I have the following script (which just prints the first argument to the console):

@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)); 

And I'm trying something like

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

I get the following error

Input error: Unknown option "// test".

Despite the quotation marks. It is considered as an option for the windows script host. How to pass an argument starting with // . Named arguments?

+6
source share
2 answers
 cscript //E:JScript //nologo "%~f0" // %* 

Pass a double slash to end your own parsing of cscript arguments.

note : I don't know if it is documented anywhere, but tested in windows 7 and 10

Test script:

 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 

Result (sorry, spanish):

 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:\> 
+12
source

It works with named arguments after all.

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

and

 cscript myscript.wsf /test:"//test" 
+3
source

Source: https://habr.com/ru/post/1014762/


All Articles