#author("2019-12-14T16:48:17+09:00","","") #navi(../) * プログラムに渡された引数を取得する方法 [#xd14c8f3] プログラムの後ろに設定した(する)引数の値を取得するサンプルコードをC#とVisual Basicで紹介します。~ 引数を取得する手段を3種類紹介しています。 #htmlinsert(windev-top.html) #contents * 参考記事 [#ced9b0ac] -[[Microsoft|.NET ConsoleApplicationBase.CommandLineArgs プロパティ>https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.visualbasic.applicationservices.consoleapplicationbase.commandlineargs?view=netframework-4.8]] -[[Microsoft|.NET Environment クラス>https://docs.microsoft.com/ja-jp/dotnet/api/system.environment?view=netframework-4.8]] * テスト環境 [#oddfa0e6] - Windows 10 ver.1909 - Visual Studio 2019 - .NET Core 3.1 * System.Environment.CommandLine & System.Environment.GetCommandLineArgs [#r9bb303e] Environmentクラスにある、CommandLineとGetCommandLineArgsを使った~ C#とVisual Basic(VB)のサンプルコードを紹介します。 - System.Environment.CommandLine~ コマンドラインの文字列がそのまま返却されます。~ .NET Coreだとexeで起動しても、dllになるんですね!~ .NET Frameworkだとexeとなりました。 - System.Environment.GetCommandLineArgs 引数をStringの配列に格納されます。~ 本サンプルではループにて引数を1つずつ表示させています。 ** C# [#d1b14a8e] using System; class Program { static void Main(string[] args) { String cmd; String[] opts; cmd = Environment.CommandLine; opts = Environment.GetCommandLineArgs(); Console.WriteLine("CommandLine: " + cmd); int i = 0; foreach(String opt in opts) { Console.WriteLine("opts["+ i + "]: " + opt); i++; } } } ** Visual Basic [#yb3d2ca8] Imports System Module Program Sub Main(args As String()) Dim cmd As String Dim opts As String() cmd = Environment.CommandLine opts = Environment.GetCommandLineArgs() Console.WriteLine("CommandLine: " & cmd) Dim i As Integer = 0 For Each opt As String In opts Console.WriteLine("opts[" & i & "]: " & opt) i += 1 Next End Sub End Module ** 実行結果 [#ee3c6e63] 引数に 1 2 3 4 5 を渡し実行した結果となります。~ どちらも当然、同じ出力となります。 -C# D:\repos\EnvCmdCS\bin\Release\netcoreapp3.1>EnvCmdCS.exe 1 2 3 4 5 CommandLine: D:\repos\EnvCmdCS\bin\Release\netcoreapp3.1\EnvCmdCS.dll 1 2 3 4 5 opts[0]: D:\repos\EnvCmdCS\bin\Release\netcoreapp3.1\EnvCmdCS.dll opts[1]: 1 opts[2]: 2 opts[3]: 3 opts[4]: 4 opts[5]: 5 -Visual Basic D:\repos\EnvCmdVB\bin\Release\netcoreapp3.1>EnvCmdVB.exe 1 2 3 4 5 CommandLine: D:\repos\EnvCmdVB\bin\Release\netcoreapp3.1\EnvCmdVB.dll 1 2 3 4 5 opts[0]: D:\repos\EnvCmdVB\bin\Release\netcoreapp3.1\EnvCmdVB.dll opts[1]: 1 opts[2]: 2 opts[3]: 3 opts[4]: 4 opts[5]: 5 * Mainから取得する方法 [#w86d0b9a] Mainメソッドを見ると、argsが渡されています。~ ここに引数が格納されているので、以下のC#, Visual Basicのサンプルコードで表示してみます。 ** C# [#x7521843] using System; class Program { static void Main(string[] args) { Console.WriteLine("Argument count:" + args.Length); int i = 0; foreach(String opt in args) { Console.WriteLine("opts[" + i + "]: " + opt); i++; } } } ** Visual Basic [#rd9a2c19] Imports System Module Program Sub Main(args As String()) Console.WriteLine("Argument count:" & args.Length) Dim i As Integer = 0 For Each opt In args Console.WriteLine("opts[" & i & "]: " & opt) i += 1 Next End Sub End Module ** 実行結果 [#ie69614d] 引数に A B C D を渡し実行した結果となります。~ どちらも当然、同じ出力となります。 - C# D:\repos\ArgsCS\bin\Release\netcoreapp3.1>ArgsCS.exe A B C Argument count:3 opts[0]: A opts[1]: B opts[2]: C -Visual Basic D:\repos\ArgsVB\bin\Release\netcoreapp3.1>ArgsVB.exe A B C Argument count:3 opts[0]: A opts[1]: B opts[2]: C 以上、C#, Visual Basic(VB)で引数を取得するサンプルコードの紹介でした。 #htmlinsert(windev-btm.html)