I have an c# code to execute the batch file. I want to show the information in the bat file in the command prompt. Here is my new edited c# code:
namespace CheckTime
{
class Program
{
static void Main(string[] args)
{
Program Obj = new Program();
int greetingId;
int hourNow = System.DateTime.Now.Hour;
if (hourNow < 12)
greetingId = 0;
else if (hourNow < 18)
greetingId = 1;
else
greetingId = 2;
System.Environment.ExitCode = greetingId;
Obj.StartBatchFile(greetingId);
}
void StartBatchFile(int Gretting)
{
var p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = string.Format(@"/C D:\Nimit Joshi\Visual Studio 2013\CheckTime\CheckTime\Demo1.bat {0}", Gretting);
p.OutputDataReceived += ConsumeData;
try
{
p.Start();
p.WaitForExit();
}
finally
{
p.OutputDataReceived -= ConsumeData;
}
}
private void ConsumeData(object sender, DataReceivedEventArgs e)
{
Console.WriteLine(e.Data);
}
}
}
Following is my Demo1.bat file:
@echo off
:: Use %1 to get the first command line parameter
goto Greeting%1%
:Greeting
echo You have no entered a greeting.
goto end
:Greeting0
echo Good Morning
goto end
:Greeting1
echo Good Afternoon
goto end
:Greeting2
echo Good Evening
goto end
:end
It is always showing You have no entered a greeting
Use the
Process.OutputStream
or listen to theProcess.OutputDataReceived
event.Example:
The batch file should be rewritten to not cause an infinite loop.
C#
You
return
(i.e. exit your program) before you callanotherMethod()
.And that's good, otherwise you'd have an infinite loop of the
.exe
staring the.bat
.