我有一个.net / c#命令行应用程序,它采用以下格式的几个参数:
some.exe -p1: value -p2: someothervalue
等
完整的示例调用如下所示:
JobWorker.exe -j:b38815af-68ce-4cb9-a858-3c016cc3c033 -cs:fors37ca -ch:384 -s:fors37ea -dp:667 -op:B:\ -ci:"d:\TFS\iRMA-4.2-P1\Applications.JobExecutor\bin\x86\Debug\Image Cache\" -cas:fors35fa -cap:333 -gs:fors395a -gb:gibraltar -gt:5 -jn:"DocumentJob #iRMA FSP #Some User Name #Open #6/16/2011"
现在由于某种原因-ci:“d:....”部分打破了字符串[] args奇怪,请参阅-ci:one:
vs没有:
过去-ci:部分的一切都搞砸了...出于某种原因&我想知道它是什么?有什么想法吗?
答案 0 :(得分:0)
我认为liho1eye在评论中说得对。
这与.NET无关,而是与您使用什么方法将args传递给程序有关。
您是从CMD.exe shell运行它吗?
解决方法是要么删除尾随反斜杠,要么加倍,如下所示:
-ci:"d:\TFS\iRMA-4.2-P1\Applications.JobExecutor\bin\x86\Debug\Image Cache\\"
答案 1 :(得分:0)
Per msdn
以反斜杠(\“)开头的双引号被解释为文字双引号字符(”)
http://msdn.microsoft.com/en-us/library/78f4aasd(v=vs.80).aspx
它将其视为文字并且不会关闭参数。
答案 2 :(得分:0)
你有一个非常复杂的命令行,需要很多参数,它可能是以编程方式生成的(我希望如此。)因为它很复杂并且你需要允许麻烦的字符然后我会建议传递一个, base64编码的块作为包含所有参数信息的参数。它是一种穷人的序列化程序,但它保护你的命令免受通过命令行传递args和管道和角括号等十几个特殊字符所带来的许多怪异: < >和其他几个人。您可以解码并解析逻辑中的base64块,而无需担心特殊字符。
因此,使用base64编码,您的命令将如下所示:
JobWorker.exe LWo6YjM4ODE1YWYtNjhjZS00Y2I5LWE4NTgtM2MwMTZjYzNjMDMzIC1jczpmb3JzMzdjYSAtY2g6Mzg0IA0KLXM6Zm9yczM3ZWEgLWRwOjY2NyAtb3A6QjpcIA0KLWNpOiJkOlxURlNcaVJNQS00LjItUDFcQXBwbGljYXRpb25zLkpvYkV4ZWN1dG9yXGJpblx4ODZcRGVidWdcSW1hZ2UgQ2FjaGVcIiANCi1jYXM6Zm9yczM1ZmEgLWNhcDozMzMgLWdzOmZvcnMzOTVhIC1nYjpnaWJyYWx0YXIgLWd0OjUgDQotam46IkRvY3VtZW50Sm9iICNpUk1BIEZTUCAjU29tZSBVc2VyIE5hbWUgI09wZW4gIzYvMTYvMjAxMSI =
您可以verify the en/decoding here以及许多其他在线位置。