mp.StartInfo.FileName = "E:\\Naag\\execute.bat";
mp.StartInfo.UseShellExecute = false;
mp.StartInfo.CreateNoWindow = true;
mp.StartInfo.RedirectStandardInput = true;
mp.StartInfo.RedirectStandardOutput = true;
for (i = StartSerialNo; i<EndSerialNo;i++)
{
iCnt++;
mp.StartInfo.Arguments = sFileName+StartSerialNo.ToString()+ " " + smyName;
mp.Start();
mp.WaitForExit();
}
execute.bat的参数是filename4567 myname。现在Execute.bat将创建4个.out文件。
因为我想循环它10次我应该有40个.out文件。但我只有4个.out文件。
这表明循环只进行了一次。出了什么问题?
如何在C#中循环dos命令?
答案 0 :(得分:1)
您的循环始终使用相同的文件名,这意味着它只是覆盖文件,您需要改变它。而不是使用
sFileName+StartSerialNo.ToString()+ " " + smyName;
作为您需要使用循环计数器i
:
sFileName + i + " " + smyName;
导致:
mp.StartInfo.FileName = "E:\\Naag\\execute.bat";
mp.StartInfo.UseShellExecute = false;
mp.StartInfo.CreateNoWindow = true;
mp.StartInfo.RedirectStandardInput = true;
mp.StartInfo.RedirectStandardOutput = true;
for (i = StartSerialNo; i<EndSerialNo;i++)
{
iCnt++;
mp.StartInfo.Arguments = sFileName + i + " " + smyName;
mp.Start();
mp.WaitForExit();
}
在你创建文件的行的循环中放置一个断点会向你展示这个(并且循环实际上被执行了10次)
答案 1 :(得分:1)
发送到进程的参数在每个循环中都是相同的,因此.bat可能每次都创建相同的文件。
我的猜测(这只是一个猜测)是你的意思:
mp.StartInfo.Arguments = sFileName+i.ToString()+ " " + smyName;
答案 2 :(得分:1)
我猜,因为你没有共享.bat代码,因为.bat没有正确创建输出并覆盖相同的4个文件。