Analizar argumentos de línea de comandos en C#

Saad Aslam 12 octubre 2023
  1. Utilice el CommandLineParser para analizar argumentos en C#
  2. Utilice la instrucción If-Else para analizar argumentos en C#
Analizar argumentos de línea de comandos en C#

Esta publicación presentará cómo analizar los argumentos de la línea de comandos usando el lenguaje de programación C#. Investigaremos dos enfoques y estrategias para completar este objetivo.

El formato estándar para un comando es commandName -argumentName argumentValue, donde commandName es el nombre del comando. Tomemos, por ejemplo, el conocido comando apt utilizado en Linux.

apt install exiftool

Utilice el CommandLineParser para analizar argumentos en C#

En lugar de analizar manualmente los comandos y argumentos, puede usar una biblioteca como CommandLineParser para realizar la tarea por usted, para que no tenga que preocuparse por eso. Entonces, su concentración principal puede ir a poner en acción la lógica del comando.

Le mostraremos cómo desarrollar un código que permita que CommandLineParser reciba argumentos y ejecute sus comandos de la manera que se muestra a continuación.

static void Main(string[] args) {
  Parser.Default.ParseArguments<UpdateCommand, InstallCommand>(args).WithParsed<ICommand>(
      t => t.Execute());
}

Primero, debes instalar el paquete NuGet, lo cual se puede hacer ejecutando el siguiente comando.

Install-Package CommandLineParser

Cree una clase base o interfaz para sus comandos si aún no existen. Por otro lado, construir una interfaz le permite usar solo un único .WithParsed<ICommand> en su código.

public interface ICommand {
  void Execute();
}

Primero se debe agregar UpdateCommand, luego el atributo Verb. Este parámetro indica a CommandLineParser que produzca un objeto UpdateCommand cuando encuentre la palabra update.

[Verb("update", HelpText = "updates your system to the newest version")]
public class UpdateCommand : ICommand {
  public void Execute() {
    Console.WriteLine("Updating the system");
  }
}

Ponga en este mismo momento el InstallCommand y el parámetro message del comando install. Incluir la propiedad Mensaje y el atributo Opción como consecuencia directa.

Este atributo proporciona al CommandLineParser instrucciones para convertir argumentos en propiedades.

[Verb("install", HelpText = "installing your software")]
public class InstallCommand : ICommand {
  [Option("message", Required = true, HelpText = "installing the program")]
  public string Message { get; set; }
  public void Execute() {
    Console.WriteLine($"Executing install for the : {Message}");
  }
}

Por último, pase los argumentos a CommandLineParser como parámetros de tipo para analizarlos.

Utilice la instrucción If-Else para analizar argumentos en C#

A continuación se muestra un ejemplo de análisis de los argumentos de la línea de comandos.

static void Main(string[] args) {
  if (!(args.Length != 0)) {
    Console.WriteLine("arguments not correct");
    return;
  }
}

El propósito de la línea que dice static void Main(string[] args) es obtener los argumentos de la línea de comando y guardarlos en la matriz args. La línea if (!(args.Length != 0)) comprueba si la longitud de los argumentos totales es 0 o no.

Si la longitud es 0, indica que no se proporcionaron argumentos de línea de comandos al programa.

La línea que dice Console.WriteLine("argumentos no correctos"); muestra en la pantalla que los argumentos son incorrectos para que el usuario ingrese el número correcto de argumentos la próxima vez.

var c = args[0];

La var c = args[0]; line crea el nombre de variable c y almacena el primer argumento pasado en la línea de comando.

if (c == "update") {
  update();
} else if (c == "install") {
  if (args.Length == 2)
    install(args[1]);
} else {
  Console.WriteLine("Invalid Command");
}

Determinaremos si la variable c se proporciona o no con el argumento actualizar al principio de los argumentos enviados a través de la línea de comandos. Se llama a la función update() si la respuesta es afirmativa.

La condición instalar comprueba si la variable c incluye el argumento instalar al principio y, si lo hace, determina si debe tener o no dos argumentos comparando la longitud de los argumentos. variable a 2.

Por lo tanto, verificamos que dentro de la lista de parámetros de los parámetros que se le dan a través de la línea de comando.

Si la longitud de los args es 2, llama a la función install() con args[1] como parámetro.

El caso si no se ejecutará siempre que ninguno de los otros casos coincida, momento en el que se imprimirá en la pantalla Comando no válido.

static void update() {
  Console.WriteLine("updating your system");
}

La función actualizar() imprime "Actualizando su sistema" cuando se envía la actualización como argumento.

static void install(string message) {
  Console.WriteLine($"installing the program {message}");
}

La función instalar() imprime "Instalando el programa {mensaje}" cuando se envía instalar como argumento.

Código fuente completo:

using System;

class CommandLineParser {
  static void Main(string[] args) {
    if ((args.Length == 0)) {
      Console.WriteLine("arguments not correct");
      return;
    }
    var c = args[0];

    if (c == "update") {
      update();
    } else if (c == "install") {
      if (args.Length == 2)
        install(args[1]);
    } else {
      Console.WriteLine("Invalid Command");
    }
  }
  static void update() {
    Console.WriteLine("updating your system");
  }
  static void install(string message) {
    Console.WriteLine($"installing the program {message}");
  }
}
Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn