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ファイルが必要です。しかし、私が得た.outファイルは4つだけです。

これは、ループが 1 回だけ実行されたことを示しています。それで、何がうまくいかなかったのですか?

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はおそらく毎回同じファイルを作成しています。

私の推測(そしてそれは単なる推測です)はあなたが意味するということです:

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

.batコードを共有していないので、.batが出力を正しく作成しておらず、同じ4つのファイルを上書きしていると思います。

于 2012-05-04T09:20:16.097 に答える