【问题标题】:How would I run a batch program from another batch program within its own environment?我将如何在自己的环境中从另一个批处理程序运行批处理程序?
【发布时间】:2024-01-22 02:58:02
【问题描述】:

我需要运行位于另一个文件夹中的批处理文件,该文件必须从另一个批处理文件中调用。

每当我从第一个调用这个批处理文件时,我们分别称它们为 Batch_A 和 Batch_B,第二个尝试从第一个批处理文件的目录运行。

Batch_A 需要callstart Batch_B,但是 Batch_B 需要像我自己手动双击一样运行。

这是我目前在第一批结束时所拥有的

start "A thing" "%output%\thing.bat" /b

【问题讨论】:

  • 如果要更改工作目录,则必须在启动参数中包含 /D pathToDir。
  • 谢谢!但是我的工作目录是动态的,我需要第二个批处理文件从其当前位置开始。
  • 对。所以你调用“start "wintitle" %dynamicDirPath% executable.bat"。
  • 我不明白。 :( 我的意思是,这基本上就是我一直在尝试的。注意我的例子:start %output%\thing.bat - 在我的第一个批处理文件的末尾被调用。

标签: windows batch-file cmd command-prompt batch-processing


【解决方案1】:

您是否研究过 push 或 pop。

在调用第二个批处理文件之前,输入“push”命令:

pushd %动态目录%
调用 batchfileb.bat
弹出

【讨论】:

  • 哦,好的。这行得通。我使用pushd 命令将工作目录更改为新目录,第二个批处理文件运行良好。谢谢!
【解决方案2】:

如果 Batch_B 被设计/编写为始终从它所在的目录运行 你也可以考虑修改 Batch_B.bat

setlocal
cd /D %0\..

REM your original content

endlocal

在 %0 中存储了批处理文件的路径。

诀窍是假设 %0 是一个目录,然后将其更改为低一级 基于该目录。 使用 /D 也可以正确更改驱动器号。

cd 命令不关心 %0 是否真的是一个目录。 事实上 %d 甚至不必存在(%0\dummy\..\.. 也可以)。

setlocal 命令用于恢复工作目录 当 Batch_B.bat 完成时。

我注意到 endlocal 命令并不是真正需要的 在这种情况下,因为它是在 Batch_B 完成时隐式应用的。

【讨论】:

    最近更新 更多