Feedback

C# - Command Line parsen

Veröffentlicht von am 09.12.2013
(0 Bewertungen)
Mit Hilfe dieser Methode kann man eine Befehlszeile in die einzelnen Argumente zerlegen. Dabei wird die Zeichenfolge an jedem Leerzeichen zerlegt. Leerzeichen, die von Anführungszeichen eingeschlossen sind, werden ignoriert.

Hinweis
Für die Ausführungszeile des aktuellen Programms kann man auch einfach Environment.GetCommandLineArgs() aufrufen.

Test-Code
Mit folgendem Code habe ich die Methode getestet.
string[] cmds = new string[]{
"anwendung.exe",
"anwendung.exe /d",
"anwendung.exe /t /d",
"anwendung.exe \"C:\\Neuer Ordner\\test.txt\"",
"anwendung.exe \"C:\\Neuer Ordner\\test.txt\" /d",
"anwendung.exe /a \"C:\\Neuer Ordner\\test.txt\"",
"anwendung.exe /a \"C:\\Neuer Ordner\\test.txt\" /b",
"anwendung.exe /a \"C:\\Neuer Ordner\\test.txt\" \"C:\\Neuer Ordner\\test.txt\"",
"anwendung.exe /a \"C:\\Neuer Ordner\\test.txt\" \"C:\\Neuer Ordner\\test.txt\" /b",
"anwendung.exe /a \"C:\\Neuer Ordner\\test.txt\" /b \"C:\\Neuer Ordner\\test.txt\" /c",
};
foreach (var cmd in cmds)
{
var x = ParseCmdLineArgs(cmd);
Console.WriteLine(cmd);
Console.WriteLine(String.Join(" ", x));
Console.WriteLine();
}
Console.ReadKey();
GFU-Schulungen  [Anzeige]

C# Aufbaukurs

Sie haben grundlegende .NET- und C#-Kenntnisse und und wollen diese nun erweitern. Der Aufbaukurs C# führt Sie ein die Arbeit mit Interfaces und Delegates, Generics und Parallel Computing.

Angular mit ASP.NET Core für .NET-Entwickler

.NET ist Ihnen vertraut, als Entwickler verfügen Sie über einschlägige Kenntnisse. In diesem Kurs lernen Sie nun, Angular in .NET-Umgebungen einzusetzen. Sie verstehen das Konzept von Angular und integrieren das clientseitige JS-Framework sicher in.NET-Anwendungen.


/// Analysiert eine Zeichenfolge und zerlegt diese danach in die einzelnen Argumente für die Eingabeaufforderung.
/// </summary>
/// <remarks>
/// Die Zeichenfolge wird bei jedem Leerzeichen auf gesplittet, das nicht zwischen 2 Anführungszeichen steht.
/// </remarks>
/// <param name="cmdLine">Die zu analysierende Zeichenfolge.</param>
/// <returns>Ein Array von Argumenten, die zusammen gesetzt <paramref name="cmdLine"/> ergeben.</returns>
public static string[] ParseCmdLineArgs(string cmdLine)
{
    List<string> result = new List<string>();
    StringBuilder sb = new StringBuilder();
    bool quot = false;
    for (int i = 0; i < cmdLine.Length; ++i)
    {
        switch (cmdLine[i])
        {
            case '"':
                quot = !quot;
                goto default;
            case ' ':
                if (quot)
                    goto default;
                else
                {
                    result.Add(sb.ToString());
                    sb.Clear();
                }
                break;
            default:
                sb.Append(cmdLine[i]);
                break;
        }
    }
    result.Add(sb.ToString());
    return result.ToArray();
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!