gpt4 book ai didi

C# - 将可执行文件路径和参数拆分为两个字符串

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:50 24 4
gpt4 key购买 nike

我一直在谷歌搜索,但没有找到任何解决方案。路径参数组合最常见的情况是引号如

"C:\Program Files\example.exe"-argument --argument -argument "argument 参数"

"C:\Program Files\example.exe"/argument/argument/argument "argument 参数"

他们只是简单地检查整个事情,寻找第二个引用,然后将其后的所有内容都视为一个论点。

.

我找到的第二个解决方案(see here)不带引号但只适用于没有空格的路径。见下文。

这有效:C:\Windows\System32\Sample.exe -args -args -args "argument argument"

这不起作用:C:\Program Files\Sample.exe -argument "arg arg"--arg-arg

这以相同的方式工作。他们寻找第一个空格,然后将其后的所有内容视为参数,这不适用于某些/大多数程序(程序文件文件夹名称有一个空格)。

.

有解决办法吗?我尝试使用和调整许多片段,甚至尝试制作我自己的正则表达式语句,但它们都失败了。代码片段甚至库都会派上用场。

提前致谢!

编辑:我根据要求找到的片段

片段 1:

char* lpCmdLine = ...;
char* lpArgs = lpCmdLine;
// skip leading spaces
while(isspace(*lpArgs))
lpArgs++;
if(*lpArgs == '\"')
{
// executable is quoted; skip to first space after matching quote
lpArgs++;
int quotes = 1;
while(*lpArgs)
{
if(isspace(*lpArgs) && !quotes)
break;
if(*lpArgs == '\"')
quotes = !quotes;
}
}
else
{
// executable is not quoted; skip to first space
while(*lpArgs && !isspace(*lpArgs))
lpArgs++;
}
// TODO: skip any spaces before the first arg

来源 2:here 中的几乎所有内容

来源 3:各种黑幕博客

最佳答案

您可以尝试 CSV 解析器,例如 .NET 中唯一的板载 VisualBasic.TextFieldParser:

List<string[]> allLineFields = new List<string[]>();
var textStream = new System.IO.StringReader(text);
using (var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(textStream))
{
parser.Delimiters = new string[] { " " };
parser.HasFieldsEnclosedInQuotes = true; // <--- !!!
string[] fields;
while ((fields = parser.ReadFields()) != null)
{
allLineFields.Add(fields);
}
}

对于单个字符串,列表包含一个 String[],第一个是路径,其余是参数。

更新:这适用于除最后一个字符串之外的所有字符串,因为路径是 C:\Program Files\Sample.exe。您必须将其用引号引起来,否则 Program Files 中的空间会将它们分成两部分,但这是 Windows 路径和脚本的一个已知问题。

关于C# - 将可执行文件路径和参数拆分为两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29827049/

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