2017-02-07 33 views
6

Jeśli mam następujący skrypt (który po prostu drukuje pierwszy argument do konsoli):Jak przekazać argument rozpoczynający się od "//" do skryptu 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)); 

I spróbować czegoś podobnego

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

I pojawia się następujący błąd

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

Pomimo cytatów. Jest on dostępny jako opcja dla hosta skryptu Windows. W jaki sposób można przekazać argument rozpoczynający się od //. Nazwane argumenty?

Odpowiedz

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

zdać podwójny ukośnik, aby zakończyć cscript własne analizowania argumentów.

uwaga: Nie wiem, czy to jest udokumentowane w dowolnym miejscu, ale przetestowany na Windows 7 i 10

skrypt testowy:

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 

Output (przepraszam, hiszpański locale):

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

Wow. Świetny hack! Nigdzie nie zobaczyłem tego dokumentu, ale sprawdzę ponownie – npocmaka

3

W końcu działa z nazwanymi argumentami.

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

i

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