Search code examples
c#command-line

Start command windows and run commands inside


I need to start the command window with some arguments and run more commands inside.

For example, launch a test.cmd and run mkdir.

I can launch the test.cmd with processstartinfo , but i am not sure how to run further commands. Can I pass further arguments to the test.cmd process?

How do I go about this?

Unable to add comments to answer... SO writing here.

Andrea, This is what I was looking for. However the above code doesnt work for me.

I am launching a test.cmd which is new command environment (like razzle build environment) and I need to run further commands.

psi.FileName = @"c:\test.cmd";
psi.Arguments = @"arg0 arg1 arg2";

psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.CreateNoWindow = true;
psi.UseShellExecute = false;

Process p = new Process();
p.StartInfo = psi;
p.Start();
p.StandardInput.WriteLine(@"dir>c:\results.txt");
p.StandardInput.WriteLine(@"dir>c:\results2.txt"); 

Solution

  • You can send further commands to cmd.exe using the process standard input. You have to redirect it, in this way:

    var startInfo = new ProcessStartInfo
                        {
                            FileName = "cmd.exe",
                            RedirectStandardInput = true,
                            RedirectStandardOutput = true,
                            UseShellExecute = false,
                            CreateNoWindow = true
                        };
    
    var process = new Process {StartInfo = startInfo};
    
    process.Start();
    process.StandardInput.WriteLine(@"dir>c:\results.txt");
    process.StandardInput.WriteLine(@"dir>c:\results2.txt");
    process.StandardInput.WriteLine("exit");
    
    process.WaitForExit();
    

    Remember to write "exit" as your last command, otherwise the cmd process doesn't terminate correctly...