2014-06-16 243 views
3

我有两个批处理文件。 第一个是通过C#代码开始:从C批处理文件运行批处理文件#

System.Diagnostics.Process.Start(System.Environment.CurrentDirectory + "\\Files\\myBat.bat", parameters + " > output.txt"); 

第二球棒的第一个内开始:

%MY_PATH%\secondBat.bat 

首先一个运行作为假想的,但第二执行(第一蝙蝠的内部)是忽略。 这一切都有效,直到这一点。

如果通过cmd.exe手动启动,它会工作 只有通过C#启动它才会工作。

感谢您的帮助

编辑:这是输出:

C:\TheProg\XXXX\bin\Debug>C:\TheProg\XXXX\bin\Debug\secondBat.bat 

它只是doesn't执行

+0

如果使用“cmd/C”运行,效果会如何? –

+0

检查这个如何启动批处理文件的例子 - 似乎更加冗长,可能“只是工作”,尽管我不能提供更多的建议! http://stackoverflow.com/a/5519517/1370442 – bUKaneer

+1

不幸的是,这是我不寻找的标准方案。它与我的代码具有完全相同的效果。 @Artem Razin: 是的 –

回答

0

I'我试图重现你的问题。 我创建的测试.bat文件中C:\simplebats

bat1.bat: 

@echo off 
echo "bat1 started" 
C:\simplebats\bat2.bat 

bat2.bat: 

echo "bat2 started" 

我跑BAT1从Visual Studio你所做的一切:

System.Diagnostics.Process.Start("C:\\simplebats\\bat1.bat", " > output.txt"); 

后我运行一个output.txt文件在我Debug文件夹中创建(不simplebats)和它的预期两行:

"bat1 started" 
"bat2 started" 

你真的确认第二.ba t文件没有在你的情况下被解雇?也许你看不到它被解雇,因为输出文件是在你的Debug文件夹中创建的?这是我唯一想到的。

+2

这是不同的,但你的第一句话给了我“点击” 这实际上是一个简单的路径寻找问题。 文档中的标准文件夹名称为“Visual Studio 2010”,其中包含SPACES inbetween(经典)。 所以只需将文件夹移动到C:\ Test就是解决方案。我现在有点尴尬...... 由于某种原因,我还不能发布答案... –

0

尝试使用cmd.exe的启动批处理文件,并提供包括路径批处理文件的参数,作为参数System.Diagnostics.Process.Start

System.Diagnostics.Process.Start("cmd.exe" , System.Environment.CurrentDirectory + "\\Files\\myBat.bat" + parameters + " > output.txt"); 
+1

你好,我已经试过了。它似乎忽略了cmd.exe的参数。它只是打开cmd,然后cmd什么都不做。 –

+0

尝试添加防止命令提示符关闭的'/ k'参数。这可能包含一个错误消息,现在可以看到 – AcidJunkie

+1

AcidJunkie,这是不必要的,因为,正如我所说,窗口已经保持这种方式。没有错误信息,只是cmd提示等待输入 –