繁体   English   中英

在批处理文件中包含批处理文件

[英]Include a batch file in a batch file

尝试使用Process.Start运行所有内容时,从另一个批处理文件调用批处理文件时出现问题。 基本上我调用从我的c#程序执行批处理文件,如下所示:


call include.bat  

//execute the rest of the batch file here  

include.bat文件设置路径,可以由许多其他批处理文件使用。 当我运行Process.Start有时这会工作,有时我会得到ERROR: cannot find include.bat 首先,任何想法为什么会发生这种情况? 关于如何从批处理文件中解决这个问题的想法?

要切换到批处理文件所在的目录,请使用以下命令:

cd %~dp0

我几乎在所有批处理脚本中都这样做。 这样,相对路径应始终有效。

在脚本之前,尝试CD /D %~dp0

我知道这是一个老问题,但我认为值得注意的是,接受的答案(即更改工作目录)所推广的方法可能并不总是合适的。

更好的通用方法是通过完整路径引用依赖关系:

call "%~dp0include.bat"

(由于%~dp0已经以反斜杠结尾,因此我们不需要添加另一个。)

以下是更改工作目录的一些好处:

  1. 批处理文件的其余部分仍然可以使用原始工作目录。
  2. 即使没有“SETLOCAL”,也会保留命令提示符中的原始工作目录。
  3. 如果第一个批处理文件是通过UNC路径运行的(例如“\\\\ server \\ share \\ file.bat”),则完整路径调用将成功,而更改目录(即使使用“cd / d”)将失败 (使用pushd / popd可以处理这一点,但是它们有一系列问题。)

这些好处对于别名类型批处理文件尤为重要,即使它们对于激发此问题的特定情况并不重要。

我要尝试的第一件事是在include.bat的调用语句中使用完整路径信息。 如果修复它,您可能只是没有从正确的位置运行批处理文件。 我确信在C#中有一个“工作目录”功能,我只是不确定它是什么。

您是否在传递给Process.Start的ProcessStartInfo上设置了ProcessStartInfo.WorkingDirectory( http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx )?

由于有时无法找到include.bat,因此工作目录可能不正确(不是include.bat所在的文件夹)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM