gpt4 book ai didi

windows - 双引号命令字符串超出/k 标志

转载 作者:可可西里 更新时间:2023-11-01 11:15:47 26 4
gpt4 key购买 nike

我正在更新一个批处理文件,该文件最初有一个可执行文件的变量,如下所示:

set var=C:\SomeProgram\program.exe

我能够使用以下 cmd.exe 语法正确地从批处理文件运行程序:

start ""cmd/k %var% "%param1%""%param2%"

不得不在网络上移动一些东西,现在变量是这样的:

set var=D:\Some Group\3.团队号\SomeProgram\program.exe

空格和 \ 往往会导致问题,具体取决于组合,我知道可以通过用 "" 包围变量来解决这个问题,如下所示:"%var%"。但是,当我尝试运行命令时:

start ""cmd/k "%var%""%param1%""%param2%"

我得到:D:\Some is not recognized as an internal...yada yada...。通过一些调试:

start ""cmd/k "%var%" 运行应用程序

start ""cmd/k ""%var%""%param1%""%param2%"" 运行应用程序

为什么我现在需要将周围的 "" 包含到整个命令字符串中,而以前我不需要这样做,仅仅是因为应用程序端点位置现在包含在 ""中?

最佳答案

cmd.exe 可能非常古怪。如果您键入 cmd/?,其输出中的以下段落解释了这一切:

If /C or /K is specified, then the remainder of the command line after
the switch is processed as a command line, where the following logic is
used to process quote (") characters:

1. If all of the following conditions are met, then quote characters
on the command line are preserved:

- no /S switch
- exactly two quote characters
- no special characters between the two quote characters,
where special is one of: &<>()@^|
- there are one or more whitespace characters between the
two quote characters
- the string between the two quote characters is the name
of an executable file.

2. Otherwise, old behavior is to see if the first character is
a quote character and if so, strip the leading character and
remove the last quote character on the command line, preserving
any text after the last quote character.

在你的情况下,处理1的条件并没有全部满足,所以使用处理2。在 cmd/k "%var%""%param1%""%param2%" 中,第一个和最后一个引号被删除,以不正确的 cmd/k %var%"结尾“%param1%” “%param2%。在 /k 之后在整行周围添加引号,就像您所做的那样,问题就解决了。

关于windows - 双引号命令字符串超出/k 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48082829/

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