2
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命令?

4

3 回答 3

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 次)

于 2012-05-04T09:19:39.430 回答
1

发送到进程的参数在每个循环中都是相同的,因此 .bat 可能每次都创建相同的文件。

My guess (and it's just a guess) is that you mean:

mp.StartInfo.Arguments = sFileName+i.ToString()+ " " + smyName;
于 2012-05-04T09:20:02.700 回答
1

I Guess, because you haven't shared your .bat code that the .bat is not creating the output correctly and overwriting the same 4 files.

于 2012-05-04T09:20:16.097 回答