Передача параметров командной строки в C#

Селектором :has() является CSS4, и он почти не поддерживает браузер (январь 2019 г.). Вам нужно будет использовать Javascript, пока не появится поддержка.

См. . Могу ли я использовать -: has ()

18
задан J0e3gan 14 October 2014 в 03:37
поделиться

5 ответов

Я просто осуществил проверку и проверил проблему. Это удивило меня, но это - последнее \в первом аргументе.

"C:\Program Files\Application name\" <== remove the last '\'

Этому нужно больше объяснения, у кого-либо есть идея? Я склонен назвать это ошибкой.

<час>

Часть 2, я запустил еще несколько тестов, и

"X:\\aa aa\\" "X:\\aa aa\" next

становится

X:\\aa aa\
X:\\aa aa" next

, Немного действия Google дает некоторое понимание от блог Jon Galloway , основные правила:

  • обратная косая черта является символом ESC
  • всегда кавычки Escape
  • только обратные косые черты Escape, когда они предшествуют кавычке.
27
ответ дан 30 November 2019 в 07:34
поделиться

Для добавления ответа Ian Kemp

, Если Вас блок называют "myProg.exe" и Вы передаете в строке "C:\Documents and Settings\All Users\Start Menu\Programs\App name" ссылку так

C:\>myprog.exe "C:\Documents and Settings\All Users\Start Menu\Programs\App name"

, строковый "C:\Documents and Settings\All Users\Start Menu\Programs\App name"

будет в args [0].

5
ответ дан 30 November 2019 в 07:34
поделиться

Для добавления к тому, что все остальные уже сказали Это могла бы быть проблема выхода. Необходимо выйти обратных косых черт другой обратной косой чертой.

Должно быть что-то как:

C:\>myprog.exe "C:\\Documents and Settings\\All Users\\Start Menu\\Programs\\App name"

1
ответ дан 30 November 2019 в 07:34
поделиться

Какова точно проблема? Так или иначе вот некоторые общие рекомендации:

Удостоверяются, что Ваш Основной метод (в Program.cs) определяется как:

void Main(string[] args)

Тогда args является массивом, содержащим параметры командной строки.

0
ответ дан 30 November 2019 в 07:34
поделиться

Недавно я заметил ту же досадную проблему и решил написать синтаксический анализатор для анализа массива аргументов командной строки.

Примечание: проблема в том, что аргументы командной строки .NET, переданные в статическую функцию void Main (string [] args), экранируют \ "и \\. Это сделано намеренно, так как вы действительно можете захотеть передать аргумент, имеющий цитата или обратная косая черта. Один пример:

скажем, что вы хотите передать в качестве единственного аргумента следующее:

-msg: Эй, «Где вы?»

например.

sampleapp -msg : "Эй, \" Где вы в? \ ""

Можно было бы отправить его с поведением по умолчанию.

Если вы не видите причин, по которым кому-либо нужно избегать кавычек или обратную косую черту для вашей программы, вы можете использовать свой собственный синтаксический анализатор для синтаксического анализа командной строки, как показано ниже.

IE. [программа] .exe "C: \ test \" arg1 arg2

будет иметь a args [0] = c: \ test "arg1 arg2

Вы ожидаете, что args [0] = c: \ test \, а затем args [1] = arg1 и args [2] = arg2.

Приведенная ниже функция анализирует аргументы в список с таким упрощенным поведением.

Обратите внимание, что arg [0] - это имя программы с использованием приведенного ниже кода. (Вы вызываете List.ToArray () для преобразования результирующего списка в массив строк.)

protected enum enumParseState : int { StartToken, InQuote, InToken };
public static List<String> ManuallyParseCommandLine()
{
    String CommandLineArgs = Environment.CommandLine.ToString();

    Console.WriteLine("Command entered: " + CommandLineArgs);

    List<String> listArgs = new List<String>();

    Regex rWhiteSpace = new Regex("[\\s]");
    StringBuilder token = new StringBuilder();
    enumParseState eps = enumParseState.StartToken;

    for (int i = 0; i < CommandLineArgs.Length; i++)
    {
        char c = CommandLineArgs[i];
    //    Console.WriteLine(c.ToString()  + ", " + eps);
        //Looking for beginning of next token
        if (eps == enumParseState.StartToken)
        {
            if (rWhiteSpace.IsMatch(c.ToString()))
            {
                //Skip whitespace
            }
            else
            {
                token.Append(c);
                eps = enumParseState.InToken;
            }


        }
        else if (eps == enumParseState.InToken)
        {
            if (rWhiteSpace.IsMatch(c.ToString()))
            {
                Console.WriteLine("Token: [" + token.ToString() + "]");
                listArgs.Add(token.ToString().Trim());
                eps = enumParseState.StartToken;

                //Start new token.
                token.Remove(0, token.Length);
            }
            else if (c == '"')
            {
               // token.Append(c);
                eps = enumParseState.InQuote;
            }
            else
            {
                token.Append(c);
                eps = enumParseState.InToken;
            }

        }
            //When in a quote, white space is included in the token
        else if (eps == enumParseState.InQuote)
        {
            if (c == '"')
            {
               // token.Append(c);
                eps = enumParseState.InToken;
            }
            else
            {
                token.Append(c);
                eps = enumParseState.InQuote;
            }

        }


    }
    if (token.ToString() != "")
    {
        listArgs.Add(token.ToString());
        Console.WriteLine("Final Token: " + token.ToString());
    }
    return listArgs;
}
1
ответ дан 30 November 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: