C#: Komfortable Kommandozeilen-Parameter

Für ein kleines Komanndozeilen-Programm, welches eine Mail in einer Batch datei weg schicken soll, brauchte ich ein paar Parameter zum übergeben an das Programm.
Nach ein Paar Stunden überlegungen und rumgeschnüffel im Web kam folgende recht komfortable Möglichkeit heraus.

Damit können Parameter dann z.b: in folgenden formen übergeben werden:

programm.exe --parameter1=value1 --parameter2="value 2"
programm.exe /parameter1:value1 /parameter2:"value 2"

Zusätzlich brauchte ich noch eine Möglichkeit Standardparameter zu definieren, sollten sie nicht angegeben worden sein.
Diese liegen dann gesammelt in einem Dictionary und können sehr konfortabel über den key abgerufen werden.

Hier der Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
 
namespace cmd_args
{
	class Program
	{
		static void Main(string[] args)
		{
			// Dictionary "DictParams" in dem die übergebenen Parameter gespeichert werden 
			Dictionary<string, string> DictParams = new Dictionary<string, string>();
 
			// Regex-Ausdruck um die Parameter vom Kommandozeilen-String zu filtern (trennen)  
			// Hier wird z.b. bei einem "-", "--", "/", "=" oder ":" getrennt
			// So können Parameter in eien der folgenden Formen übergeben werden:
 			// Diese.exe --parameter1=value1 --parameter2="value 2"
			// Diese.exe /parameter1:value1 /parameter2:"value 2"
			Regex Spliter = new Regex(@"^-{1,2}|^/|=|:", RegexOptions.IgnoreCase);
 
			// in der foreach-Schleife gehen wir alle übergebenen Parmater durch
			foreach (string arg in args)
			{
				// Trennen der Parameter-Teile anahnd des oben angegebenen Regex-Ausdrucks
				string[] ArrParams = Spliter.Split(arg, 3);
				// Füllen des Dictionary mit den Parametern + Values (absichtlich mit .ToLower())
				DictParams.Add(ArrParams[1].ToLower(), ArrParams[2].ToLower());
			}
 
			// Hier werden noch Standard-Parameter gefüllt, falls sie nicht übergeben wurden
			if (!DictParams.ContainsKey("server"))	DictParams.Add("server", "standardserver.de");
			if (!DictParams.ContainsKey("user"))	DictParams.Add("user", "standarduser");
			if (!DictParams.ContainsKey("pwd"))		DictParams.Add("pwd", "standardpwd");
 
 
			#region Debug Ausgabe
			// Am Ende die ausgabe des Dictionarys
			foreach (KeyValuePair<string, string> data in DictParams)
			{
				Console.WriteLine(data.Key + "\t => " + data.Value);
			}
 
			Console.ReadLine();
			#endregion 
		}
	}
}

leave your comment


*

Unterstütze den Frickelblog!