尝试使用Process.Start
运行所有内容时,从另一个批处理文件调用批处理文件时出现问题。基本上我从c#程序中调用批处理文件的执行,如下所示:
call include.bat
//execute the rest of the batch file here
include.bat文件设置路径,可以被许多其他批处理文件使用。当我运行Process.Start
时,有时这会有效,有时我会得到ERROR: cannot find include.bat
。首先,任何想法为什么会发生这种情况?关于如何从批处理文件中解决这个问题的想法?
答案 0 :(得分:6)
要切换到批处理文件所在的目录,请使用:
cd %~dp0
我几乎在所有批处理脚本中都这样做。这样,相对路径应始终有效。
答案 1 :(得分:2)
在脚本之前,请尝试CD /D %~dp0
答案 2 :(得分:1)
我要尝试的第一件事是在include.bat的call语句中使用完整路径信息。如果修复它,您可能只是没有从正确的位置运行批处理文件。我确信在C#中有一个“工作目录”功能,我只是不确定它是什么。
答案 3 :(得分:1)
您是否在传递给Process.Start的ProcessStartInfo上设置了ProcessStartInfo.WorkingDirectory(http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx)?
由于有时无法找到include.bat,因此工作目录可能有误(不是include.bat所在的文件夹)。
答案 4 :(得分:1)
我知道这是一个老问题,但我认为值得注意的是,接受的答案(即更改工作目录)推广的方法可能并不总是合适的。
更好的通用方法是通过完整路径引用依赖关系:
call "%~dp0include.bat"
(由于%~dp0已经以反斜杠结尾,因此我们不需要添加另一个。)
以下是不更改工作目录的一些好处:
这些好处对于别名类型的批处理文件尤其重要,即使它们对于激发此问题的特定情况并不重要。