2012-02-17 175 views
1

我正面临一个奇怪的问题,我有一个.bat文件,其中包含重命名文件的代码,当我手动打开.bat文件时,它会对它进行重命名一个文件,但是当我尝试从C#中编程打开它时,它不执行任何操作,它只是打开文件并且不编译它写入的内容。我输入代码:从C#运行.bat文件#

Process.Start(@"file.bat"); 

我也知道,如果你输入的路径进入cmd并按下回车就会打开该文件,编译它,所以我写的是:

ProcessStartInfo psi3 = new ProcessStartInfo("cmd", "/c " + '"'+"D:\\my Work\\My Soft\\CA Delete\\CA Delete\\bin\\Debug\\file.bat"+'"'); 
Process p3 = Process.Start(psi3); 
p3.WaitForExit() 

但仍然是相同的问题:该文件正在被打开,但从来没有写入它的内容。

编辑:我想通为什么]

我把窗户CMD的快照应该运行.bat文件和我得到错误:

ERROR : THE FILE SPECIFIED COULD NOT BE FOUND 

但如何?当我手动运行.bat文件时,它工作得很好!

+2

尝试设置' 'ProcessStartInfo'的WorkingDirectory'。 – 2012-02-17 03:41:17

+0

我不明白 – BOSS 2012-02-17 03:42:51

+0

为什么不读取批处理文件并分别处理每一行?作为一个可管理的替代品,.NET有能力完成大部分文件操作任务;您可能能够使用许多可用的.NET脚本选项之一。另一种选择是嵌入能够从.NET运行的Powershell。 – 2012-02-17 03:43:10

回答

0

你可以试试这个。 ProcessStartInfo

psi3.RedirectStandardError= true; 
psi3 .RedirectStandardOutput= true; 
psi3.UseShellExecute= false; 
+1

这是如何解决问题的? – 2012-02-17 03:44:32

+0

仍然一样:( – BOSS 2012-02-17 03:45:54

+0

我编辑了这个问题,请检查它 – BOSS 2012-02-17 03:53:48

0

您可能需要额外的管理previleges要执行什么打算在批处理文件。如果是这样,使用的Process.Start()的替代版本:

Start(string fileName, string arguments, string userName, SecureString password, string domain); 
0

让批处理文件本的第一行:

PUSHD%〜DP1

这将设置批处理文件工作目录。

马丁

0

这应该为你工作:

String myBatchFileName = "name_of_file.bat"; 
System.Diagnostics.Process.Start(myBatchFileName); 
  • 注意变量myBatchFileName是.bat文件的实际名称.....