C# でコマンドライン引数を解析する
この記事では、C# プログラミング言語を使用してコマンドライン引数を解析する方法を紹介します。この目標を達成するために、2つのアプローチと戦略を調査します。
コマンドの標準形式は commandName -argumentName argumentValue
です。ここで、commandName
はコマンドの名前です。たとえば、Linux で使用されているよく知られた apt
コマンドを考えてみましょう。
apt install exiftool
C#
で引数を解析するために CommandLineParser
を使用する
コマンドと引数を手動で解析する代わりに、CommandLineParser
のようなライブラリを使用してタスクを実行できるため、心配する必要はありません。その後、あなたの主な集中力は、コマンドロジックを実行に移すために行くかもしれません。
CommandLineParser
が引数を受け取り、次の方法でコマンドを実行できるようにするコードを開発する方法を示します。
static void Main(string[] args) {
Parser.Default.ParseArguments<UpdateCommand, InstallCommand>(args).WithParsed<ICommand>(
t => t.Execute());
}
まず、NuGet
パッケージをインストールする必要があります。これは、次のコマンドを実行することで実行できます。
Install-Package CommandLineParser
コマンドがまだ存在しない場合は、コマンドの基本クラスまたはインターフェイスを作成します。一方、インターフェイスを構築すると、コードで使用できる .WithParsed<ICommand>
は 1つだけになります。
public interface ICommand {
void Execute();
}
最初に UpdateCommand
を追加し、次に Verb
属性を追加する必要があります。このパラメータは、update
という単語に遭遇したときに UpdateCommand
オブジェクトを生成するように CommandLineParser
に指示します。
[Verb("update", HelpText = "updates your system to the newest version")]
public class UpdateCommand : ICommand {
public void Execute() {
Console.WriteLine("Updating the system");
}
}
この時点で InstallCommand
と install
コマンドの message
パラメータを入力します。直接的な結果として、Message
プロパティと Option
属性を含めます。
この属性は、引数をプロパティに変換する手順を CommandLineParser
に提供します。
[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}");
}
}
最後に、引数を型パラメーターとして CommandLineParser
に渡して解析します。
C#
で引数を解析するには、If-Else
ステートメントを使用する
以下は、コマンドライン引数の解析の例です。
static void Main(string[] args) {
if (!(args.Length != 0)) {
Console.WriteLine("arguments not correct");
return;
}
}
static void Main(string[] args)
を読み取る行の目的は、コマンドラインから引数を取得し、それらを args
配列に保存することです。if (!(args.Length != 0))
行は、引数の合計の長さが 0 であるかどうかをチェックします。
長さが 0 の場合、コマンドライン引数がプログラムに提供されていないことを示します。
Console.WriteLine("arguments not correct");
という行は、引数が正しくないう行ユーザーが次回正しい数の引数を入力できるように、引数が正しくないことを画面に表示します。
var c = args[0];
var c = args[0];
の行は、変数名 c
を作成し、コマンドラインで渡された最初の引数を格納します。
if (c == "update") {
update();
} else if (c == "install") {
if (args.Length == 2)
install(args[1]);
} else {
Console.WriteLine("Invalid Command");
}
コマンドラインから送信される引数の先頭で、変数 c
に引数 update
が指定されているかどうかを判断します。答えが肯定的である場合、update()
関数が呼び出されます。
install
条件は、c
変数の先頭に install
引数が含まれているかどうかを確認し、含まれている場合は args
変数の長さを 2 と比較して、引数を 2つ持つべきかどうかを判断します。
したがって、コマンドラインから指定されたパラメータのパラメータリスト内で確認します。
args
の長さが 2 の場合、パラメーターとして args[1]
を使用して install()
関数を呼び出します。
else
ケースは、他のケースが一致しない場合は常に実行され、その時点で Invalid Command
と画面に表示されます。
static void update() {
Console.WriteLine("updating your system");
}
update()
関数は、update
が引数として送信されると、"updating your system"
を出力します。
static void install(string message) {
Console.WriteLine($"installing the program {message}");
}
install()
関数は、install
が引数として送信されると、"Installing the program {message}"
を出力します。
完全なソースコード:
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}");
}
}
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