当前位置: 首页 > 编程语言 > C#

C#命令行解析引用路径和避免转义字符分享

时间:2023-04-10 22:52:35 C#

C#命令行解析引用路径和避免转义字符如何解析命令行参数被解释为路径?args[]包含在引用时自动连接的字符串,例如:example.exe一二“三四”args[0]=一args[1]=二args[2]=三四但是,args[]不会将“C:\Example”属性作为参数进行解析。相反,它会将参数提供为“C:\Example””(包含额外的引号。)这是由于路径中的反斜杠被视为转义字符,因此用户在命令中提供的结束引号-行成为参数的一部分。例如:example.exea"C:InputFolder""C:OutuptFolder"args[0]=oneargs[1]=C:InputFolder"args[2]=C:OutputFolder"一个简单的kludge可能是:_path=args[i].Replace(""",@"");但是,我确信这是最好的方法。如何正确解析包含路径的命令行,防止args[]数组被错误地填充已被解析为转义字符的字符串?注意:我不想在我的项目中包含整个命令行解析库!我只需要处理引用的路径,并希望以“手动”方式处理。请不要推荐NConsoler、Mono或任何其他大型“厨房水槽”命令行解析库。另请注意:据我所知,这不是一个重复的问题。虽然其他问题侧重于通用命令行解析,但此问题特定于将部分路径解释为转义序列时引入的问题。不是答案,而是来自Microsoft在线社区支持JeffreyTan(12/7/2006)的一些背景和解释:注意:这不是代码错误,而是设计使然,因为反斜杠通常用于转义某些特殊字符。另外,该算法与Win32命令行参数解析函数CommandLineToArgvW相同。请参阅下面的备注部分:http://msdn2.microsoft.com/en-us/library/bb776391.aspx另请参阅FX方法Environment.GetCommandLineArgs以进一步解释斜杠处理行为。就我个人而言,我认为这是一种拖累,我很惊讶我以前没有被它咬过。也许我有但不知道?但是,盲目地将引号替换为斜杠并不能解决我的问题。我投票是因为这让我大开眼界。我喜欢你的想法:_path=args[i].Replace(""",@"");它很干净,除非有问题,否则不会工作。我有同样的挫败感。我的解决方案是使用正则表达式公式。我的预期输入是一个路径列表,其中一些可能被引用。除非所有最终参数都被引用,否则上面的kludge不起作用。//捕获带引号的字符串或不带引号的字符串,后跟空白字符串exp=@"^(?:""([^""]*)""s*|([^""s]+)s*)+";Matchm=Regex.Match(Environment.CommandLine,exp);//期望三个组//group[0]=整个匹配//group[1]=来自左侧捕获组的匹配//group[2]=来自右侧捕获组的匹配if(m.Groups.Count().Concat(m.Groups[2].Captures.Cast()).OrderBy(x=>x.Index).ToArray();//captures[0]是可执行文件if(captures.Length谁能看到更高效的regex上面是C#学习教程:C#命令行解析引用路径和避免转义字符,如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络合集呢不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: