首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QB64命令行所需的三重引号

QB64命令行所需的三重引号
EN

Stack Overflow用户
提问于 2017-11-15 05:39:54
回答 1查看 579关注 0票数 0

有一个在QB64中解析命令行的程序。命令$函数返回命令行。我需要解析一个长文件名,这个文件名可能包含一个空格,方法是从引号中解析一个空格,以区别于没有空格的文件名。例如,"long filename.ext“

问题是,当命令行没有引号时,命令$返回文件名,如果在引号中,则相同,例如," filename“和”filename“都返回文件名。但是,“文件名”返回带有引号的文件名.还有另一种方式来发送报价命令$吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-18 04:18:31

QB64提供了COMMAND$_COMMANDCOUNT函数--主要类似于C++中的argvargc。没有参数的COMMAND$将返回一个包含所有命令行args的字符串,但QB64还允许COMMAND$(i)以字符串的形式检索索引i处的参数。 entry上的QB64 Wiki示例:

代码语言:javascript
复制
limit = _COMMANDCOUNT
FOR i = 1 TO limit
    PRINT COMMAND$(i)
NEXT

您可以使用它们来处理QB64中的命令行参数。如果您想将包含引号的命令行args传递给程序,则可能需要使用反斜杠来转义所需的引号。

不幸的是,反斜杠转义并非万无一失,特别是在cmd.exe中会导致麻烦,主要是因为反斜杠在文件路径中使用。将其与文件路径中的空格相结合,您就拥有了一个噩梦般的命令解释器。在this answer中,将引用字符串中的引号加倍,以将正确的引号传递给程序:

代码语言:javascript
复制
> program.exe hello world
hello
world

> program.exe hello"" world
hello (+ empty quoted string)
world

> program.exe "hello"" world
hello"
world

> program.exe "hello""" world
hello" world

在葡萄酒的cmd.exe中,""转义引号还关闭了上面所示的引用字符串,因此需要立即连续引用,才能继续使用当前参数对下一个行距项进行分组。我不确定Windows实现,因为我没有运行Windows机器,但在我看来,可能会发生同样的行为。

换句话说,您传递"""filename"""是因为:

代码语言:javascript
复制
"        Open quoted string
""       Escaped double quote, closes quoted string
filename Concatenated at the end of the first quoted string
"        Open quoted string, concatenated to filename
""       Escaped double quote, closes quoted string

编辑

您可以在引用的字符串之外使用^",但这有其自身的问题,例如,""^""中的结果,就像"""一样。将""^"传递给批处理文件需要作为""^^"进行额外的转义。因此,不建议使用^,特别是当"""""同样工作的时候。有关^转义字符的信息,请参阅我上面链接的答案。

您还应该小心反斜杠和引号字符串。考虑如何将类Unix参数'C:/Program Files/"file" name'的正确的Windows表示形式作为单个参数传递给程序:

代码语言:javascript
复制
> program.exe "C:\Program Files\\""file\"" name"
C:\Program Files\"file" name

cmd.exe解释:

代码语言:javascript
复制
"                   Open quoted string
C:\Program Files\\  Quoted string contents, including escaped \
""                  Escaped double quote, closes quoted string
file\               Unquoted string contents, including C escape char
""                  Open quoted string with escaped double quote
[ ]name             Quoted string contents
"                   Close quoted string

这将导致将"C:\Program Files\\"file\" name"的命令行传递给程序,然后生成C:\Program Files\"file" name路径。当然,这样的路径在Windows中是不可能的(也许在NTFS文件系统上根本不可能?),但它说明了一点:您需要考虑cmd.exe的引用规则和C运行时的引用规则以及反斜杠转义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47300144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档