C# 控制台应用程序是否可以知道它已从批处理文件中调用?

C# 控制台应用程序是否可以知道它已从批处理文件中调用?,c#,batch-file,console,C#,Batch File,Console,有没有办法让控制台应用程序知道它是否是从批处理文件调用的,而不是直接在命令提示符下调用的 询问的原因是想找到一种方法来决定是否启动Console.ReadLine循环或类似循环以等待进一步的输入,或者是否立即退出 或者,是否有一种方法可以让批处理文件继续向控制台应用程序发送输入,该应用程序正在等待通过ReadLine进一步输入 是的,我知道-这是两个问题。如果有人评论第二个问题有答案,我将分别询问。批处理文件可以设置环境变量,您可以在控制台应用程序中检查: var env = System.En

有没有办法让控制台应用程序知道它是否是从批处理文件调用的,而不是直接在命令提示符下调用的

询问的原因是想找到一种方法来决定是否启动Console.ReadLine循环或类似循环以等待进一步的输入,或者是否立即退出

或者,是否有一种方法可以让批处理文件继续向控制台应用程序发送输入,该应用程序正在等待通过ReadLine进一步输入


是的,我知道-这是两个问题。如果有人评论第二个问题有答案,我将分别询问。

批处理文件可以设置环境变量,您可以在控制台应用程序中检查:

var env = System.Environment.GetEnvironmentVariable("waitOnDone");
if (String.IsNullOrEmpty(env) ||  env != "0")
{
    // do something
}
在批处理文件中:

set waitOnDone=0
yourExeFile -arguments
在控制台应用程序中:

var env = System.Environment.GetEnvironmentVariable("waitOnDone");
if (String.IsNullOrEmpty(env) ||  env != "0")
{
    // do something
}

为什么不将a传递到控制台应用程序,以确定是立即退出还是等待。

如果存在重定向(来自批处理文件),您的问题可能是仅从stdin读取

这也可以通过检测是否存在输入流来解决(使用dotnet)

解决方案来自:

它可以这样使用

if (ConsoleEx.InputRedirected)
{
  string strStdin = Console.In.ReadToEnd();
}

如果批处理文件知道输入,那么将输入保存到一个文件中,并像

prog.exe <argument.txt

prog.exe很好的建议-我想到了这一点,如果没有其他选择,我会这么做。批处理文件是否已经知道输入,或者用户需要以交互方式输入?批处理文件已经知道此时需要所需的输入属性,如果不提供指向作者个人资料的链接和指向答案的链接,您就不能复制答案。我尝试过这个方法,但似乎无法生成一个场景,其中ConsoleEx.InputRedirected是真的?批处理文件包含MyApp.exe-argtest@Hans帕桑特:你说得对,但是我从我的资料中复制了这个,我找不到原始的SO链接anymore@Hans:好的,我找到了,它是你的:-)两秒钟搜索:接受,因为它恰好是我决定使用的解决方案。其他答案也是有效的。谢谢