如何避免重定向输出符号“>”被当作命令行参数(可能在快捷方式中)

Posted

技术标签:

【中文标题】如何避免重定向输出符号“>”被当作命令行参数(可能在快捷方式中)【英文标题】:How to avoid the redirect output sign">"being taken as command line arguments(in a shortcut maybe) 【发布时间】:2021-09-19 01:45:30 【问题描述】:

我无法通过调用 Windows 上的快捷方式将标准输出重定向到文件。

直接"exe.exe 1 2 1 4 5 6 7 >> log.txt"工作,日志文件生成成功。

我假设在使用快捷方式.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;
            


截图:

in this way,the">"is taken as an argument

in another way,the">" funtions normal as redirect sign

【问题讨论】:

你的问题到底是什么? 顺便说一句,当一个或没有参数传递时,如果块可能会抛出 indexoutofrange 异常 回复qwr:在快捷方式.lnk文件中,">"符号被当作参数,而不是重定向符号 我明白了。你的意思是你试图通过带有参数的快捷方式调用你的可执行文件对吗? 启动一个新的 CMD.exe 实例并使用 /C 将包含 >> 作为参数的字符串传递给它 【参考方案1】:

我相信这个问题与 Windows 的关系比 C# 更重要 所以要重定向快捷方式

@Flydog57 的评论

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

即将使用 C#: 您可以制作第 8 个参数输出文件并重定向标准输出 按照此: console.setout 大概是这样的:

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

【讨论】:

以上是关于如何避免重定向输出符号“>”被当作命令行参数(可能在快捷方式中)的主要内容,如果未能解决你的问题,请参考以下文章

linux后台运行&符号nohup命令输出重定向等使用方法

IO重定向和管道用法

重定向

linux常用命令

标准IO和重定向

重定向管道——Linux基本命令