【发布时间】:2010-10-28 08:34:12
【问题描述】:
如何解析将被解释为路径的命令行参数? args[] 包含被引用时自动连接的字符串,例如:
example.exe 一二“三四”
args[0] = one
args[1] = two
args[2] = three four
但是,args[] 不会将 "C:\Example\" 属性解析为参数。相反,它将以 "C:\Example"" 的形式提供参数(包括额外的引号。)这是由于路径中的反斜杠被视为转义字符,因此用户在命令中提供的结束引号-line 成为参数的一部分。
.例如:
example.exe 一个 "C:\InputFolder" "C:\OutuptFolder\"
args[0] = one
args[1] = C:\InputFolder"
args[2] = C:\OutputFolder"
一个简单的组合可能是:
_path = args[i].Replace("\"", @"\");
但是,我确信有一个最佳实践。如何正确解析包含路径的命令行,防止 args[] 数组不正确地填充已解析为转义字符的字符串?
注意:我不想在我的项目中包含整个命令行解析库!我只需要处理引用的路径并希望以“手动”方式进行。请不要推荐 NConsoler、Mono 或任何其他大型“厨房水槽”命令行解析库。
另请注意:据我所知,这不是一个重复的问题。虽然其他问题侧重于通用命令行解析,但这个问题专门针对路径在其中的一部分被解释为转义序列时引入的问题。
【问题讨论】:
-
你在哪里看到这个额外的字符?我正在使用 sn-p 编译器。这是主要的.. 字符串 s=args[0]; Console.WriteLine(s);它可以正常工作。
-
@shahkalpesh:不知道您的 sn-p 编译器,但请尝试从命令行运行它,并为您的程序提供以 \" 结尾的参数(反斜杠双引号)。正如 ebwi 所说,打开我的眼睛。
-
我现在明白了。抱歉,我没有正确理解输入参数。
-
更改您的作业流以使用转义反斜杠作为命令行的输入参数。 "\\\\machine\\share\\path\\filename\\" 作为避免此问题的替代方法。
标签: c# command-line escaping