怎样在C#中调用*.bat批处理文件?

时间:2022-09-30 09:28:42
例:我要调用批处理文件w.bat,所写代码如下:
System.Diagnostics.Process ps = new System.Diagnostics.Process ();
ps.StartInfo.FileName = "d:\tmp\w.bat";
ps.Start();
ps.Dispose ();
运行后返回错误:没有与此对象关联的进程。
后来发现可执行文件的后缀名只能为exe,把bat当成普通的文件,如txt文件,去找关联程序来打开它。
请问:应该如何调用批处理文件。

6 个解决方案

#1


行呀,我测试没问题呀,我的代码和你的有点差别
try
{
Process pro=new Process();
pro.StartInfo.UseShellExecute=true;
pro.StartInfo.FileName=@"c:\1.bat";
pro.StartInfo.CreateNoWindow=true;
pro.Start();
}
catch(Exception ex)
{MessageBox.Show(ex.Message);}

#2


我加上下面两句,并且修改了路径(文件在该目录下存在)还是不行:
pro.StartInfo.UseShellExecute=true;
pro.StartInfo.FileName=@"d:\w.bat";
pro.StartInfo.CreateNoWindow=true;
运行后返回错误:在可以确定所请求的信息之前,进程必须退出
系统环境:win2000 Advanced server、vs2003
w.bat 的内容:
copy readme.txt d:\tmp

#3


我真的给你气晕,一个文件COPY功能,居然搞到这么复杂。直接用File.Copy就行了
你用Process运行的命令,要事先在DOS窗口试过,有没有返回要确定什么。有的话,就别用这方式了,新手真的是什么都想得出来了,放着可靠的方法不用,倒是跑回去DOS年代了

#4


呵呵,我是新手?某方面可能是吧?不过总的来说应该不是吧,我用c#做了一个ORM产品,做了一个支持子系统级别复用的架构,应该不是吧?不过还是谢谢你回答我的问题。
w.bat的内容其实如下:
cd e:\pdev\spl\etc
csc /reference:..\dll\cs_public.dll,..\dll\public.dll /target:library /out:..\tmp\sjzd.dll /utf8output /nologo ..\tmp\sjzd.cs > ..\tmp\sjzd_error.txt
该批处理已经在dos窗口试过了,可以。
我举copy的例子只是想简化问题。

#5


对头,我原来测试用的BAT也是这格式,永远通不过
dir >1.txt
我很是奇怪,好像>在Process里不给支持一样.DOS窗口下的输出很是麻烦.试试从返回值角度出发一下.我没作过测试,不好说,自己试试

#6


我现在连copy readme.txt d:\tmp 也过不去

#1


行呀,我测试没问题呀,我的代码和你的有点差别
try
{
Process pro=new Process();
pro.StartInfo.UseShellExecute=true;
pro.StartInfo.FileName=@"c:\1.bat";
pro.StartInfo.CreateNoWindow=true;
pro.Start();
}
catch(Exception ex)
{MessageBox.Show(ex.Message);}

#2


我加上下面两句,并且修改了路径(文件在该目录下存在)还是不行:
pro.StartInfo.UseShellExecute=true;
pro.StartInfo.FileName=@"d:\w.bat";
pro.StartInfo.CreateNoWindow=true;
运行后返回错误:在可以确定所请求的信息之前,进程必须退出
系统环境:win2000 Advanced server、vs2003
w.bat 的内容:
copy readme.txt d:\tmp

#3


我真的给你气晕,一个文件COPY功能,居然搞到这么复杂。直接用File.Copy就行了
你用Process运行的命令,要事先在DOS窗口试过,有没有返回要确定什么。有的话,就别用这方式了,新手真的是什么都想得出来了,放着可靠的方法不用,倒是跑回去DOS年代了

#4


呵呵,我是新手?某方面可能是吧?不过总的来说应该不是吧,我用c#做了一个ORM产品,做了一个支持子系统级别复用的架构,应该不是吧?不过还是谢谢你回答我的问题。
w.bat的内容其实如下:
cd e:\pdev\spl\etc
csc /reference:..\dll\cs_public.dll,..\dll\public.dll /target:library /out:..\tmp\sjzd.dll /utf8output /nologo ..\tmp\sjzd.cs > ..\tmp\sjzd_error.txt
该批处理已经在dos窗口试过了,可以。
我举copy的例子只是想简化问题。

#5


对头,我原来测试用的BAT也是这格式,永远通不过
dir >1.txt
我很是奇怪,好像>在Process里不给支持一样.DOS窗口下的输出很是麻烦.试试从返回值角度出发一下.我没作过测试,不好说,自己试试

#6


我现在连copy readme.txt d:\tmp 也过不去