我使用的CScript运行一个VBScript文件,我需要一个命令行传递到其中参数包括空格和引号的脚本。 整个命令必须作为一个参数传递给脚本传递。 例如:
C:\> CScript myscript.vbs //Nologo "cmd.exe /c "dir && del /q *.txt""
注意上面的特定命令行仅仅是一个例子,但它确实对我想要做的触摸(即传递涉及到运行cmd.exe的命令行)。 我试图解决一般情况下,但是。
问题是,在CScript似乎是越来越糊涂试图确定在引号打开和关闭。 至少在某些时候。
下面的脚本可能有助于解释。 它只是输出同参数传递,因为它看到他们:
Dim count
For count = 0 To WScript.Arguments.Count-1
WScript.Echo CStr(count) & " = " & WScript.Arguments.Item(count)
Next
很多时候,它按预期工作:
C:\> cscript myscript.vbs //Nologo "1 2 3"
0 = 1 2 3
但是,当有引述参数引号内,事情的变化:
C:\> cscript myscript.vbs //Nologo "1 "2 3""
0 = 1 2
1 = 3
我知道有关于每个报价是否被打开或在上述示例中关闭参数,所以下一个我试图逃避内部引号因此命令处理器将它们视为文字串引入的模糊性:
C:\> cscript myscript.vbs //Nologo "1 ^"2 3^""
0 = 1 ^2
1 = 3
嗯,貌似只有当shell做你的通配等,并为你的作品。 我怀疑CSCRIPT理解^
像cmd.exe的转义字符一样。
使用双引号的命令中的单引号(如“CMD.EXE / C‘DIR && CD \’”)正确分析为单个参数,但不会与/ c参数调用CMD.EXE的情况,因为工作,单引号是不够的。 例如:
C:\> cmd /c 'dir && cd \'
''dir' is not recognized as an internal or external command,
operable program or batch file.
我想我可以遍历脚本中的所有参数和他们一起回一个长字符串,但我会失去内部引号和上下文他们提供这样做。 或者,也许我不使用双引号里面PARAM单引号和映射那些回脚本中的双引号。 但是,如果意图是单引号,我不考虑未来的一些情况? 因为我试图解决一般情况下,我不能确定这一点。
有任何想法吗?