我希望用一组给定的参数生成一个命令,这些参数可以是任意字符串 - 特别是,一个参数可以包含空格,冒号等。我想这样做而不必逃避参数字符串(s),主要是因为我发现它几乎不可避免地导致在某些时候出现过度,不足或误逃。
据我所知,使用System.Diagnostics.Process
API无法做到这一点 - ProcessStartInfo.Arguments
总是在空格上拆分字符串,并对其他一些字符有一些特殊的解释。我目前正在做的是产生xargs --null
(我在Linux上开发),使用命令运行并通过stdin向它提供参数。这是有效的,但不会为最美丽的解决方案赢得任何奖项。
是否有更好的.NET API用于做我想要的事情?
编辑:例如,请考虑传递参数“I am a filename with crazy characters "'%1!#\^*☺” fear my splitting
。有可能逃脱 - 据我所知所有需要发生的事情就是在它周围抛出"
然后使用{{1}转义嵌入式"
}。只是不必逃避它就会更清晰,更简单,也不会出错。
答案 0 :(得分:2)
我不认为在程序中传递几个参数在Windows中是正确标准化的。启动进程时,可以将命令行传递给可执行文件。但是如何解释这个命令行,取决于该程序。
理论上,每个程序都可以使用不同的方案将命令行拆分为单个参数,以及转义空格,引号和特殊字符。
在实践中,大多数程序将使用命令行拆分,它是VisualStudio C标准库的一部分。如果安装了VisualStudio(包括C / C ++部分),您将在文件C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\stdargv.c
如果我正确理解了代码,规则很简单:
为了构建有效的命令行,这些规则应该直接实现。但据我所知,没有Windows或C#功能提供此功能。