高手請進,c#調用含有參數的cmd命令,不能寫入文件???(高分求救)


做項目時候,想在cmd 用subversion 的命令行 做不同版本的比較並寫入文件。
具體命令如下: 
myprocess.StandInput.Writeline(svn diff -r 9:10 >> c:\dd.txt);
想用c#調用cmd 命令,但是含有參數,結果命令老是不能執行.

18 个解决方案

#1


過程應該是這樣
不知道你初始化OK了沒
Process process = new Process();
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.FileName = "cmd.exe";//開啟CMD
process.Start();//執行
process.StandardInput.WriteLine(cmd命令字符串);
process.StandardInput.WriteLine("\r\nexit");//這是退出
process.Close();
process.Dispose();
希望能幫到您

#2


初始化應該是ok的了!
因為我有執行其他命令,都是成功了的。
出錯是執行命令的時候帶了個參數,
因此在c#里面調用的時候,就執行不了。
郁悶!

#3


標准輸出重定向應該使用  System.Console.SetOut() 方法

#4


原聞其詳。
但是我現在就想知道,為什么c#里面調用帶參數的命令就執行不了,
有什么辦法可以解決嗎?
修改輸出重定向有用嗎?

#5


我調用 了ping的是好使的可能是命令不支持
> x.txt不好使的話可以試一下
2>  x.txt也許可以解決問題

#6


好像ping 的命令可以。
或許真的是命令不支持吧。
但是
svn diff -r 1:2 >c:\1.txt ?
真的無解了嗎?

#7


高手在哪里啊?
有沒有使用過subversion的高手教教我啊!

#8


自己頂起!

#9


幫頂~~!

#10


CSDN上 ,難道都這么吝嗇??還是真的不會呀?大哥,我是第一次發帖阿,
不要太讓我失望了阿!!!

#11


把你的
svn diff -r 1:2 > c:\1.txt ? 

等命令放到批處理文件里面,再由C#實現代碼調用該批處理文件。

#12


up

#13


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace svnmirror
{
    public partial class Form1 : Form
    {
        public int index = 0;
        public string mirrorPath = "";
        public string mirrorWorking = "";
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //創建一個server的本機鏡像
            //這里首先要去讀取一個設定檔案查看已經創建的版本庫的情況。            
           // ExecCmd.process_cmd("cd /d D:\\Program Files\\VisualSVN Server\bin");
            //ExecCmd.process_cmd("md d:\\mymirror_1");//新增一個根目錄
           // ExecCmd.process_cmd("svnadmin create d:\\mymirror_1");//創建一個版本目錄。
              ExecCmd.process_bat("cc");
           // ExecCmd.process_bat("xx.bat");
            //MessageBox.Show("創建成功!");
            timer1.Enabled = true;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //
            StreamWriter sw = new StreamWriter(@"d:\log.txt",true);
            ExecCmd.process_bat1("cc");
            sw.WriteLine("this is the "+index.ToString ()+" time executing !");
            sw.Close();
            index++;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //ExecCmd.process_cmd(" ");
            folderBrowserDialog1.ShowDialog();
            string root = folderBrowserDialog1.SelectedPath;
            //digui mydigui = new digui();
            //mydigui.finddirectory(root);
            digui.finddirectory(root);
            ExecCmd.process_bat1("d:\\svndirectory.bat");
            MessageBox.Show("已經完成所有的_svn文件的刪除!");
            //
            //現在要做的事情是,得到最新的的鏡像版本上的log(比較最近的兩個版本),然后從把文件覆蓋
            compto();
            //然后commit到本地的server。
            MessageBox.Show("更新成功!!");
        }
        protected void compto()
        {
            //選擇鏡像的版本目錄
            int verison = 0;
            folderBrowserDialog1.ShowDialog();
            string root = folderBrowserDialog1.SelectedPath;
            folderBrowserDialog1.ShowDialog();
            string rootworking = folderBrowserDialog1.SelectedPath;
            StreamWriter sw = new StreamWriter(@"c:\svnlog.bat");
            string myroot = string.Format("cd /d  {0}",root);
            sw.WriteLine(myroot);
            sw.WriteLine("svn info >>c:\\mylog.txt");
            sw.Close();
            ExecCmd.process_bat2("c:\\svnlog.bat");
            StreamReader sr = new StreamReader(@"c:\mylog.txt");
            while (sr.Peek() > 0)
            {
                string line = sr.ReadLine();
                if (line.Contains("Revision:"))
                {
                    string[] cc = line.Split(' ');
                    verison = Convert.ToInt32(cc[1]);
                    break;
                }
                else
                {
                    continue;
                }
            }
            sr.Close();
            sw = new StreamWriter(@"c:\svnlog.bat",false);
            string myroot1 = string.Format("cd /d  {0}", root);
            sw.WriteLine(myroot1);
            string diffstr = string.Format("svn diff -r {0}:{1} >>c:\\mylog.txt",verison ,verison-1);
            sw.WriteLine(diffstr);
            sw.Close();
            ExecCmd.process_bat2("c:\\svnlog.bat");
            sr = new StreamReader(@"c:\mylog.txt");
            while (sr.Peek() > 0)
            {
                string line = sr.ReadLine();
                if (line.Contains("Index"))
                {
                    string[] cc = line.Split(':');
                    //
                    sw = new StreamWriter(@"c:\svnlog.bat", false);
                    //把文件copy過去,覆蓋,但是還要明確一些delete和一些add的東西
                    cc[1] = cc[1].Replace('/','\\');
                    string myroot2 = string.Format("copy {0}\\{1}  {2}\\{3}", root,cc[1],rootworking,cc[1]);
                    sw.WriteLine(myroot2);
                    sw.Close();
                }
                else
                {
                    continue;
                }
            }
            sr.Close();
            ExecCmd.process_bat2("c:\\svnlog.bat");
            string myroute = string.Format("cd /d {0}",rootworking);
            ExecCmd.process_cmd2(myroute,"svn update");
        }

        private void comboBox1_Click(object sender, EventArgs e)
        {
            //選擇鏡像的存放目錄
            folderBrowserDialog1.ShowNewFolderButton = true;
            folderBrowserDialog1.ShowDialog();            
            mirrorPath = folderBrowserDialog1.SelectedPath;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //使鏡像和server同步
            //首先要做的是修改要獲得的目錄
            ExecCmd.process_bat("cc");
            MessageBox.Show("同步完成!");
        }

        private void comboBox2_Click(object sender, EventArgs e)
        {
            folderBrowserDialog1.ShowNewFolderButton = true;
            folderBrowserDialog1.ShowDialog();
            mirrorWorking = folderBrowserDialog1.SelectedPath;
        }

        private void button6_Click(object sender, EventArgs e)
        {
            //使鏡像和server同步
            //首先要做的是修改要獲得的目錄
            ExecCmd.process_bat("cc");
            MessageBox.Show("同步完成!");
        }

        private void button5_Click(object sender, EventArgs e)
        {
            tabControl1.SelectedIndex = 1;
        }

        private void comboBox3_Click(object sender, EventArgs e)
        {
            folderBrowserDialog1.ShowNewFolderButton = true;
            folderBrowserDialog1.ShowDialog();
            mirrorPath = folderBrowserDialog1.SelectedPath;
        }

        private void button7_Click(object sender, EventArgs e)
        {
            tabControl1.SelectedIndex = 2;
        }

        private void comboBox4_Click(object sender, EventArgs e)
        {
            folderBrowserDialog1.ShowNewFolderButton = true;
            folderBrowserDialog1.ShowDialog();
            mirrorWorking = folderBrowserDialog1.SelectedPath;
        }

        private void comboBox5_Click(object sender, EventArgs e)
        {
            folderBrowserDialog1.ShowNewFolderButton = true;
            folderBrowserDialog1.ShowDialog();
            mirrorPath = folderBrowserDialog1.SelectedPath;
        }


    }
}

#14


        private void button9_Click(object sender, EventArgs e)
        {
            //從鏡像獲得本地工作目錄
            //一、從鏡像獲得本地在server的working
            //二、建立一個臨時的文件夾存放這個working
            //三、刪除臨時文件夾里面所有的_svn文件夾或者.svn文件夾
            //四、把這個文件夾里面的內容copy到實際的工作目錄
            //五、把這個目錄上傳到本地的server(此時需要本地server上存放此項目的一個目錄)
            //六、再從server上checkout下來,覆蓋這個文件
            //-------這是管理員做的事情
            //---------------------------------------------------------------
            //從使用者來看,可以先輸入一個本的的server,checkout后在操作
            StreamWriter sw = new StreamWriter(@"c:\createmirror.bat", false);
            sw.WriteLine("echo off");
            sw.WriteLine("cd d/  "+textBox3.Text.ToString ());
            sw.WriteLine("svn checkout "+textBox3.Text .ToString ()+"  "+textBox5.Text .ToString ());
            sw.WriteLine("rd  c:\\svnmirrorfortemp  /s/q");
            sw.WriteLine("md c:\\svnmirrorfortemp");
            sw.WriteLine("svn checkout +file:///c:/svnmirrorfortemp"+"  "+textBox4.Text .ToString ());
        }

        private void button10_Click(object sender, EventArgs e)
        {
            //創建鏡像
            StreamWriter sw = new StreamWriter(@"c:\createmirror.bat",false);
            sw.WriteLine("echo off");
            sw.WriteLine("rd "+mirrorPath+"  /s/q");
            sw.WriteLine("md"+mirrorPath);
            sw.WriteLine("svnadmin create "+ mirrorPath );
            sw.WriteLine("copy \\\\172.30.149.69\\down\\meswork\\pre-revprop-change.bat  "+mirrorPath+"\\hooks\\");
            sw.WriteLine("svnsync init file:///"+mirrorPath +"  "+textBox1.Text);
            sw.WriteLine("svnsync sync file:///"+mirrorPath);
            sw.Close();
            ExecCmd.process_bat2(@"c:\createmirror.bat");
            MessageBox.Show("創建成功!!");
            textBox4.Text = mirrorPath;
            tabControl1.SelectedIndex = 2;
        }

        private void textBox3_Click(object sender, EventArgs e)
        {
            folderBrowserDialog1.ShowNewFolderButton = true;
            folderBrowserDialog1.ShowDialog();
            mirrorWorking = folderBrowserDialog1.SelectedPath;
        }

        private void textBox4_Click(object sender, EventArgs e)
        {
            folderBrowserDialog1.ShowNewFolderButton = true;
            folderBrowserDialog1.ShowDialog();
            mirrorPath= folderBrowserDialog1.SelectedPath;
            textBox4.Text = mirrorPath;
        }

        private void button8_Click(object sender, EventArgs e)
        {
            tabControl1.SelectedIndex = 1;
        }

#15


using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Threading;

namespace svnmirror
{
    class digui
    {
        //public int index = 0;
        public  static void finddirectory(string root)
        {
            string fathernode = root;
            string str1 = string.Format("cd /d  {0}",root);             
            string mydirs = string .Format ("d:\\dir_{0}.txt",DateTime.Now.Millisecond.ToString ());
           // index++;
            string myreader=string .Format ("dir /a  >>{0}",mydirs);
            StreamWriter sw2 = new StreamWriter(@"c:\mybat.bat",false);
            sw2.WriteLine(str1);
            sw2.WriteLine(myreader);
            sw2.Close();
            ExecCmd.process_bat2(@"c:\mybat.bat");
            Thread.Sleep(200);
            try
            {
                StreamReader sr = new StreamReader(mydirs);
                while (sr.Peek() > 0)
                {
                    string line = sr.ReadLine();
                    if (line.Contains("_svn") && line.Contains("DIR"))
                    {
                        StreamWriter sw = new StreamWriter(@"d:\svndirectory.bat", true);
                        sw.WriteLine("rd "+fathernode + "\\_svn"+"  /s/q");
                        sw.Close();
                    }
                    else if (line.Contains("DIR") && !line.Contains("."))
                    {
                        string[] wholeroute = line.Split(' ');
                        root = fathernode + "\\" + wholeroute[wholeroute.Length - 1];
                        finddirectory(root);
                    }
                }
            }
            catch (Exception ee)
            {
                //
            }
        }
    }
}

#16


幫頂,頭疼.

#17


該回復於2008-04-12 10:50:47被版主刪除

#18


process.StartInfo.Argument="command";也可以

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: