Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中执行批处理文件命令_C#_Batch File - Fatal编程技术网

C# 在C中执行批处理文件命令

C# 在C中执行批处理文件命令,c#,batch-file,C#,Batch File,我的C应用程序中有以下代码,它使用命令提示符以静默方式加载批处理文件并执行,然后将结果返回到字符串: System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = @"C:\files\send.bat"; proc.StartInfo.RedirectStandardError = false; proc.StartInfo.RedirectStandardOutput

我的C应用程序中有以下代码,它使用命令提示符以静默方式加载批处理文件并执行,然后将结果返回到字符串:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = @"C:\files\send.bat";
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
string strGetInfo = proc.StandardOutput.ReadToEnd();
strCMDOut = strGetInfo.Substring(strGetInfo.Length - 5, 3);
proc.WaitForExit();
我试图避免我的应用程序转到另一个文件来执行批处理文件,而是希望将其嵌入到我的应用程序中。因此,我将上述代码更改为:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "@ECHO ON java com.this.test567 send";
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;
proc.StartInfo = startInfo;
proc.Start();
string strGetInfo = proc.StandardOutput.ReadToEnd();
strCMDOut = strGetInfo.Substring(strGetInfo.Length - 5, 3);

当代码执行时,我可以看到命令提示符窗口在关闭之前的一小段时间,并且执行不正常。如何解决此问题?

您还应该重定向标准错误,并在进程结束后检查该错误,而不是直接使用cmd.exe

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = @"java.exe";
proc.StartInfo.Arguments = "com.this.test567";

proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
string strGetInfo = proc.StandardOutput.ReadToEnd();
if(string.IsNullOrEmpty(strGetInfo))
    strGetInfo = proc.StandardError.ReadToEnd();
proc.WaitForExit();

请注意,通过直接调用cmd,可以有效地使用Arguments属性中的任何内容生成批处理脚本。与.bat文件一样,命令窗口在完成后立即关闭。若要解决此问题,请在末尾添加“暂停”命令

startInfo.Arguments = "@ECHO ON java com.this.test567 send\npause";
/k开着一扇窗户

所以你会进入cmd

cmd /k @ECHO ON&java com.this.test567&send

我忘记了批处理命令是什么,等待用户输入,但我会等待用户输入,并在命令提示窗口关闭之前查看其内容,它可能会为您提供失败原因的线索。您的startInfo.Arguments有多个命令echo和java是两个独立的命令。不允许我有多个命令吗?我该如何分解它?@SearchForKnowledge很高兴我能帮忙。谢谢你的回复。
"/k @ECHO ON&java com.this.test567&send"
cmd /k @ECHO ON&java com.this.test567&send