gpt4 book ai didi

vbscript - 如何将带有空格和引号的命令作为单个参数传递给 CScript?

转载 作者:行者123 更新时间:2023-12-04 16:39:02 24 4
gpt4 key购买 nike

我正在使用 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.

我想我可以遍历脚本中的所有参数并将它们连接回一个长字符串,但是我会丢失它们提供的内部引号和上下文。或者也许我确实在双引号参数中使用了单引号,并将它们映射回脚本中的双引号。但是,如果我不考虑的 future 案例的意图是单引号怎么办?由于我试图解决一般情况,因此我无法做出决定。

有任何想法吗?

最佳答案

看起来您正在尝试描述参数中的值。我建议使用引号之外的其他内容并重新添加引号。例如使用波浪线:

Dim count
For count = 0 To WScript.Arguments.Count-1
WScript.Echo CStr(count) & " = " & replace(WScript.Arguments.Item(count),"~",chr(34))
Next

通过:
cscript myscript.vbs //Nologo "1 ~2 3~"
0 = 1 "2 3"

关于vbscript - 如何将带有空格和引号的命令作为单个参数传递给 CScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10091711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com