我需要使用一些参数启动命令窗口并在其中运行更多命令。
例如,启动test.cmd并运行mkdir。
我可以使用processstartinfo启动test.cmd,但我不确定如何运行更多命令。我可以将更多参数传递给test.cmd进程吗?
我该怎么做?
无法添加评论以回答......所以写在这里。
Andrea,这就是我想要的。但是上面的代码对我来说不起作用。
我正在启动一个test.cmd,这是一个新的命令环境(比如razzle构建环境),我需要运行更多的命令。
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");
答案 0 :(得分:13)
您可以使用此过程向cmd.exe发送更多命令 标准输入。你必须以这种方式重定向它:
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();
请记住将“exit”写为最后一个命令,否则cmd进程无法正确终止...
答案 1 :(得分:1)
/c
的{{1}}参数。
cmd
(ProcessStartInfo start = new ProcessStartInfo("cmd.exe", "/c pause");
Process.Start(start);
只是你可以运行的一个例子)
但是对于创建目录,您可以直接从c#中执行该操作和大多数其他文件操作
pause
只有当您有一些不想在c#中复制的大型文件时,从c#启动cmd才有用。
答案 2 :(得分:1)
也许this帖子很有帮助。这是你的意思吗?
答案 3 :(得分:0)
你想要达到什么目的?你真的需要打开命令窗口,还是只需要创建一个目录,例如?
mkdir
是一个Windows可执行文件 - 您可以像启动cmd
一样启动此程序 - 不需要首先启动命令窗口进程。
您还可以创建一个包含要运行的所有命令的批处理文件,然后使用您已经使用的Process和ProcessStartInfo类来启动它。
答案 4 :(得分:0)
这怎么不起作用?
var startInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
RedirectStandardInput = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = false
};
var process = new Process { StartInfo = startInfo };
process.Start();
process.StandardInput.WriteLine(@" dir");
process.WaitForExit();