#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)


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS