You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:59:07