Можете ли вы отличить необработанные числа от чисел в кавычках для аргументов командной строки, не выходя из кавычек в C#?

Для консольного приложения C#, если я укажу следующее, мои параметры будут интерпретированы как одно и то же значение:

myapp.exe "0" 0

И просто быть 0 с длиной 1 при проверке.

Мне было интересно, есть ли способ определить число в кавычках по сравнению с необработанным числом в командной строке для консольных приложений С# без принудительного экранирования кавычек для пользовательского ввода.

Я знаю, что ты можешь это сделать,

myapp.exe \"0\" 0

И возвращайте "0" 0 при проверке аргументов командной строки с помощью Environment.GetCommandLineArgs(), как в примере ниже.

using System;
using System.Collections.Generic;
using System.Linq;

namespace cl_app
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> arg_list = Environment.GetCommandLineArgs().ToList();
            foreach(var arg in arg_list)
            {
                Console.WriteLine(arg);
            }
        }
    }
}

Возможно ли это сделать без экранирования кавычек? Если нет, то является ли это общим ограничением командной строки Windows?


person kayleeFrye_onDeck    schedule 22.02.2018    source источник
comment
Вы имеете в виду, что я не должен кататься с одним вызовом API? Без проблем :)   -  person kayleeFrye_onDeck    schedule 23.02.2018


Ответы (2)


Вы можете использовать Environment.CommandLine чтобы получить командную строку в виде необработанной строки, затем идите оттуда.

person Blindy    schedule 22.02.2018

Заключение строк в кавычки с учетом пробелов — это стандартный синтаксис командной строки Windows, а не ограничение, а просто синтаксис. Кроме того, экранирование кавычек с помощью \ также является стандартным. Вот почему .NET старается быть полезным и анализирует аргументы, используя эти правила в Environment.GetCommandLineArgs()static void Main(string[] args)).

Если вы хотите переопределить это поведение по умолчанию, вам нужно будет самостоятельно проанализировать необработанную командную строку. Вы можете получить это из Environment.CommandLine< /а>. Это возвращает фактический вызов командной строки, поэтому включает имя программы, например. ConsoleApplication1.exe "0" 0.

person Rhumborl    schedule 22.02.2018
comment
Я бы не сказал, что синтаксис, это скорее условность. Синтаксис подразумевает, что ему обязательно нужно следовать, но ничто не мешает вам сказать, например, app.exe ". Обратите внимание, что мой предыдущий пример не разрешен в Linux, где интерпретатор команд вмешивается и изменяет вашу командную строку, прежде чем вы даже получите возможность взглянуть на нее (например, подстановка). - person Blindy; 23.02.2018