如何在C#控制台程序中获取命令行启动时传入的参数?
嗨,作为C#初学者能想到做带命令行参数的程序,已经迈出很棒的一步啦!针对你需要获取-d "D:\output\"这类带选项的参数需求,我给你分享两个实用的方案,从基础到进阶都有:
方案1:手动解析(无需额外依赖)
最基础的方式就是用Main方法自带的args参数,或者Environment.GetCommandLineArgs()来获取所有参数,然后自己遍历匹配选项。
比如你输入的命令C:\Program Files\myprogram.exe -d "D:\output\",args数组会直接返回:
["-d", "D:\\output\\"]
(如果用Environment.GetCommandLineArgs(),第一个元素是程序本身的路径,后面的内容和args完全一致)
手动解析的代码示例:
static void Main(string[] args) { string outputDir = null; for (int i = 0; i < args.Length; i++) { // 匹配-d选项 if (args[i] == "-d" && i + 1 < args.Length) { outputDir = args[i + 1]; break; } } if (outputDir != null) { Console.WriteLine($"获取到输出目录:{outputDir}"); // 这里写你的业务逻辑,比如操作这个目录 } else { Console.WriteLine("未指定-d参数"); } }
这种方式适合简单的参数场景,不用额外装包,上手快。
方案2:用官方推荐的
System.CommandLine库(进阶首选) 如果以后你的程序需要更多命令行选项(比如多个参数、必填项、自动帮助信息),微软官方的System.CommandLine库绝对是最佳选择,它能帮你自动处理参数解析、验证、帮助文档生成等工作,不用自己写繁琐的遍历逻辑。
步骤1:安装库
可以通过Visual Studio的NuGet包管理器搜索System.CommandLine安装,或者在终端运行:
dotnet add package System.CommandLine
步骤2:编写代码
using System.CommandLine; class Program { static async Task<int> Main(string[] args) { // 定义-d选项,还可以加别名(比如--directory)和描述 var directoryOption = new Option<string>( name: "-d", description: "指定输出文件的目录路径") { // 如果这个参数是必填的,就把IsRequired设为true IsRequired = false }; // 创建根命令,设置程序描述 var rootCommand = new RootCommand("我的C#命令行工具"); rootCommand.AddOption(directoryOption); // 设置命令的处理逻辑 rootCommand.SetHandler((outputDir) => { if (!string.IsNullOrEmpty(outputDir)) { Console.WriteLine($"输出目录已确定:{outputDir}"); // 在这里添加你的业务代码 } else { Console.WriteLine("请通过-d参数指定输出目录"); } }, directoryOption); // 执行命令并返回退出码 return await rootCommand.InvokeAsync(args); } }
这样运行你的命令时,程序会自动解析-d后面的路径,而且还支持自动生成帮助信息——只要运行myprogram.exe --help,就能看到所有选项的说明,非常专业!
小提示
不管用哪种方式,命令行里用引号括起带空格的路径(比如"D:\My Output\")都是正确的,两种方法都能正确识别完整路径,不会被空格拆分。
内容的提问来源于stack exchange,提问作者HanXin
相关产品推荐
相关产品推荐

