Подтвердить что ты не робот

Прочитать переключатель командной строки

Я пытаюсь прочитать пользовательские аргументы в приложении С#. Я знаю, как читать их на основе позиции с помощью

string[] args = Environment.GetCommandLineArgs();

но я бы хотел прочитать их с помощью таких клавиш, как

app.exe /f /d:foo

Я действительно пытаюсь найти любую информацию об этом...

4b9b3361

Ответ 1

Почему бы вам просто не разобрать массив переданных аргументов и действовать на их основе, как этот

foreach (string arg in args)
{
    switch (arg.Substring(0, 2).ToUpper())
    {
        case "/F":
            // process argument...
            break;
        case "/Z":
            // process arg...
            break;
        case "/D":
            paramD = arg.Substring(3);
            break;
        default:
            // do other stuff...
            break;
    }
}

Ответ 2

void Main(string[] args )
{
    foreach( var arg in args )
    {
        // process each arg if needed, i.e., 
        // remove '-', '/', uppercase, whatever
        switch(arg)
        {
            case "blah":
            // ...
        }
    }
}

Библиотеки существуют для этой цели, что делает весь процесс намного проще, но если это одно приложение, это может не стоить того. Зависит от того, насколько сложны ваши аргументы командной строки.

Ответ 3

Что,

// first is exe of executing program
string[] args = Environment.CommandLine.Split('/').Skip(1).ToArray();
foreach (string arg in args)
{
    string value = arg.Trim();
    switch (value)
    {
        case "f":
            //...
            continue;
    }
    if (value.StartsWith("d:"))
    {
        value = value.Substring(2);
        // ...
        continue;
    }
}

Ответ 4

Я видел пару ответов, которые проходят через коллекцию строк args - проблема в том, что вам нужен следующий элемент после нажатия переключателя, который вы ищете. Я использовал индекс массива коллекции, чтобы получить следующий элемент.

В моем примере я ищу сервер и порт /S и/P. Надеюсь, это поможет кому-то:

        var server = string.Empty;
        var port = string.Empty;

        for(var x = 0; x < args.Count(); x++)
        {
            switch (args[x].Trim().ToUpper())
            {
                case "/S":
                    server = args[x + 1];
                    break;
                case "/P":
                    port = args[x + 1];
                    break;                                        
            }
        }

Ответ 5

Ну, в основном ты уже сделал. Обработайте массив string[], который вы получаете из рамки, и вы сделали. Нет встроенного способа достижения того, о чем вы просите.

Как и решение сторонних сторон, вы можете посмотреть

С#/.NET Аргументы аргументов командной строки

Ответ 6

Я являюсь автором библиотеки .NET командной строки с открытым исходным кодом, которая может удовлетворить ваши потребности: CLI CL #.

Вы также можете прочитать этот вопрос для других предложений.

Ответ 7

Я считаю, что вам придется сворачивать свою собственную реализацию. После написания модульных тестов для оценки нового метода я мог бы начать думать по строкам...

foreach (string arg in args)
{
    flagF = flagF || arg == "/f"; // assuming F is boolean
    flagD = flagD ?? (arg.Substring(0,3) =="/d:" ? arg.Substring(3) : null);
}