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.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.


/// 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!