可能性としては、バッチファイルからのリダイレクトがある場合は、stdinからのみ読み込むことです。
これは、入力ストリームがあるかどうかを検出することによって(ドットネットを使用して)解決することもできます。 @Hans Passantから
ソリューション、SO: how to detect if console in stdin has been redirected
using System.Runtime.InteropServices;
public static class ConsoleEx
{
public static bool OutputRedirected
{
get { return FileType.Char != GetFileType(GetStdHandle(StdHandle.Stdout)); }
}
public static bool InputRedirected
{
get { return FileType.Char != GetFileType(GetStdHandle(StdHandle.Stdin)); }
}
public static bool ErrorRedirected
{
get { return FileType.Char != GetFileType(GetStdHandle(StdHandle.Stderr)); }
}
// P/Invoke:
private enum FileType { Unknown, Disk, Char, Pipe };
private enum StdHandle { Stdin = -10, Stdout = -11, Stderr = -12 };
[DllImport("kernel32.dll")]
private static extern FileType GetFileType(IntPtr hdl);
[DllImport("kernel32.dll")]
private static extern IntPtr GetStdHandle(StdHandle std);
}
とバッチファイルは、ファイルに入力を保存して、あなたのプログラムにそれを送り、入力を知っている場合、それはこの
if (ConsoleEx.InputRedirected)
{
string strStdin = Console.In.ReadToEnd();
}
出典
2011-10-19 09:57:55
jeb
バッチファイルは入力を既に知っていますか、またはユーザーが対話形式で入力する必要がありますか? – ferosekhanj
バッチファイルは既に必要な入力を知っています – rohancragg