问题:.NET(或PInvokable)中是否有一个函数准备命令行(以一个字符串的形式);来自IEnumerable
个字符串。
这相当于python的subproces.list2cmdline
,但在.NET中。
它将与Win32的CommandLineToArgvW相反。
作为草图,它可能大致近似为:
static public string List2CmdLine(IEnumerable<string> args)
{
return string.Join(" ", args.Select((s) => "\"" + s + "\"")))
}
细节:
python的subprocess.list2cmdline
documentation声明他们所做的是尊重Windows C Runtime的规则。
我想他们说的是需要在包含空格的参数周围引用,并且在参数内转义引号。
答案 0 :(得分:0)
没有这样的内置功能。你可以编写自己的(从Python函数翻译)。
public static string ListToCommandLine(IEnumerable<string> args)
{
return string.Join(" ", args.Select(a =>
{
if (string.IsNullOrEmpty(a))
return "\"\"";
var sb = new StringBuilder();
var needQuote = a.Contains(' ') || a.Contains('\t');
if (needQuote)
sb.Append('"');
var backslashCount = 0;
foreach (var c in a)
{
switch (c)
{
case '\\':
backslashCount++;
break;
case '"':
sb.Append(new string('\\', backslashCount * 2));
backslashCount = 0;
break;
default:
if (backslashCount > 0)
{
sb.Append(new string('\\', backslashCount));
backslashCount = 0;
}
sb.Append(c);
break;
}
if (backslashCount > 0)
sb.Append(new string('\\', backslashCount * (needQuote ? 2 : 1)));
if (needQuote)
sb.Append('"');
}
return sb.ToString();
}));
}