Как избежать того, чтобы знак вывода перенаправления»>»использовался в качестве аргументов командной строки(возможно, в ярлыке)

#c# #windows #command-line #command-line-arguments #shortcut

Вопрос:

Я не могу перенаправить стандартный вывод в файл, вызвав ярлык в Windows.

он работает напрямую "exe.exe 1 2 1 4 5 6 7 >> log.txt" ,файл журнала успешно сгенерирован.

Я предполагаю, что знак «>>>» принимается в качестве аргумента при использовании shortcut.lnk, поэтому он не генерирует log.txt

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

вот мой код:

 static void Main(string[] args)
        {
            string acc = "";
            string pass = "";
            string EmailEnabled = "";
            string smtpServer = "";
            string sender = "";
            string smtpAuth = "";
            string receiver = "";
            if (args.Length == 7)
            {
                acc = args[0];
                pass = args[1];
                EmailEnabled = args[2];
                smtpServer = args[3];
                sender = args[4];
                smtpAuth = args[5];
                receiver = args[6];
            }
            else if (args[2] == "0")
            {
                acc = args[0];
                pass = args[1];
                EmailEnabled = args[2];
            }
            else
            {
                Console.WriteLine("command line arguments are wrong");
                return;
            }
}

 

Скриншоты:

таким образом,»>»принимается в качестве аргумента

другими словами,функция»>» является нормальной в качестве знака перенаправления

Комментарии:

1. в чем конкретно твоя проблема?

2. кстати, вам нужно другое, если блок потенциально вызовет исключение indexoutofrange при передаче одного аргумента или без него

3. ответ на qwr: В ярлыке . файл lnk ,знак «>»принимается в качестве аргументов,а не в качестве знака перенаправления

4. Я понимаю. вы имеете в виду, что пытаетесь вызвать исполняемый файл с помощью ярлыка с аргументами, верно?

5. Запустите новый экземпляр CMD.exe и передайте ему строку, содержащую >>> в качестве аргумента, используя /C

Ответ №1:

Я считаю, что вопрос связан с Windows больше, чем с C#, поэтому для перенаправления ярлыка

Комментарий @Flydog57

 cmd /c "file_shortcut.lnk" bla bla bla  >out.txt
 

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

    using (var writer = args.Length>7? new StreamWriter(args[7]) : new StreamWriter(Console.OpenStandardOutput()))
        { 
                Console.SetOut(writer); 
               //all codes inside
        }