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

如何实现C#控制台程序通过批处理传递多启动参数并执行对应逻辑

问题解决:修复C#控制台应用的命令行参数逻辑

核心问题分析

你的代码存在两个关键错误:

  1. 错误使用ProcessStartInfo:ProcessStartInfo用于配置启动外部进程的参数,而非读取当前应用自身的启动参数。你需要直接使用Main方法传入的args数组来获取批处理传递的参数。
  2. 逻辑分支错误:原代码中else分支绑定到Directory.Exists("locale")的判断,导致即使执行了创建文本文件的逻辑,只要locale目录不存在,就会触发错误提示。

修正后的完整代码

首先确保LaunchArguments常量类定义正确:

public static class LaunchArguments
{
    public const string Operation_AddLocale = "-AddLocale";
    public const string Operation_CreateTextFile = "-CreateTextFile";
}

然后是修正后的Main方法及辅助逻辑:

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // 检查是否传入有效参数
        if (args.Length == 0)
        {
            ShowInvalidInputMessage();
            return;
        }

        string operation = args[0];

        // 根据参数执行对应操作
        switch (operation)
        {
            case LaunchArguments.Operation_CreateTextFile:
                CreateTextFile();
                break;
            case LaunchArguments.Operation_AddLocale:
                AddLocale();
                break;
            default:
                ShowInvalidInputMessage();
                break;
        }
    }

    private static void CreateTextFile()
    {
        Console.WriteLine("Creating a text file.");
        // 使用using自动关闭文件流,避免文件锁定
        using (File.Create("file.txt")) { }
        Console.WriteLine("Done!");
    }

    private static void AddLocale()
    {
        if (Directory.Exists("locale"))
        {
            try
            {
                using (File.Create("locale.txt")) { }
                Console.WriteLine("Locale file created successfully!");
            }
            catch (Exception ex)
            {
                Console.WriteLine("An error occurred:");
                Console.WriteLine(ex.ToString());
                Console.ReadLine();
            }
        }
        else
        {
            Console.WriteLine("The 'locale' directory does not exist.");
            Console.ReadLine();
        }
    }

    private static void ShowInvalidInputMessage()
    {
        Console.WriteLine("Incorrect Input, quitting");
        Console.WriteLine("This application only accepts arguments of type '-CreateTextFile' or '-AddLocale'");
        Console.Beep();
        Console.ReadLine();
    }
}

关键修复点说明

  • 使用args数组获取参数:直接读取批处理传递的参数,替代错误的ProcessStartInfo用法。
  • 重构逻辑分支:使用switch语句清晰区分不同参数的处理逻辑,将错误提示分支独立出来,避免逻辑混乱。
  • 正确处理文件流:用using包裹File.Create,确保文件流自动关闭,防止文件被锁定无法后续操作。
  • 分离功能方法:将创建文本文件、本地化文件的逻辑拆分为独立方法,提升代码可读性和可维护性。

测试验证

  1. 执行批处理start SW_project_generator.exe -AddLocale:若locale目录存在,会创建locale.txt;若不存在,提示目录不存在。
  2. 执行批处理start SW_project_generator.exe -CreateTextFile:成功创建file.txt并输出完成提示。
  3. 无参数或传入无效参数:显示错误提示信息并退出。

内容的提问来源于stack exchange,提问作者Technika číslo 1 s.r.o

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:27:20