在c#中将字符串作为批处理文件运行

时间:2014-12-09 16:38:58

标签: c# windows batch-file

我正在编写一个创建批处理文件的应用程序,然后运行:

我知道我可以创建批处理文件并run it  没问题。

我想做的是: 一旦我创建了生成文件的字符串,是否有任何方法可以将字符串作为批处理文件执行?

之类的东西
string BatchFile = "echo \"bla bla\" \n iperf -c 123  ... ... .. "
Diagnostics.Process.Start(BatchFile);

3 个答案:

答案 0 :(得分:3)

您可以使用 / c 作为可执行文件运行 CMD.EXE ,并将其余部分作为参数运行:

Process.Start("cmd.exe", "/c echo \"bla bla\" \n iperf -c 123  ... ... .. ");

答案 1 :(得分:2)

对我来说,我正在使用此代码:

Process process;
        private void button1_Click(object sender, EventArgs e)
        {
            process = new Process();
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.FileName = "cmd";
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardInput = true;
            process.Start();
            BackgroundWorker worker = new BackgroundWorker();
            worker.DoWork += new DoWorkEventHandler(worker_DoWork);
            worker.RunWorkerAsync();

            process.StandardInput.WriteLine("cd d:/tempo" );
            process.StandardInput.WriteLine("dir");



        }
        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            string line;
            while (!process.StandardOutput.EndOfStream)
            {
                line = process.StandardOutput.ReadLine();
                if (!string.IsNullOrEmpty(line))
                {
                    SetText(line);
                }
            }
        }

        delegate void SetTextCallback(string text);
        private void SetText(string text)
        {
            if (this.textBox1.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetText);
                this.Invoke(d, new object[] { text });
            }
            else
            {
                this.textBox1.Text += text + Environment.NewLine;
            }
        }
        private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            process.StandardInput.WriteLine("exit");
            process.Close();

        }

答案 2 :(得分:1)

您可以将批处理“文件”创建为长字符串,其中的行以\n结尾,与示例中显示的完全相同,然后执行该字符串(我称之为“NotBatch-text”)执行cmd.exe并将此类字符串重定向到其Stdin标准句柄。这样,您的“NotBatch-text”可能会使用大量批处理功能,例如扩展嵌套在任何级别的%变量%,IFFOR命令等等。你也可以使用延迟!变量!如果使用/V:ON开关执行cmd.exe,则进行扩展。实际上,NotBatch文本中唯一不起作用的是:参数和SHIFT命令以及GOTO / CALL :label命令;有关this post的进一步详情。

如果您想执行更高级的“NotBatch-text”字符串,您甚至可以借助第三方程序模拟 GOTOCALL :label命令,如this post所述。