如何使用powershell从批处理脚本中运行批处理脚本?

hjzp0vay  于 2023-02-16  发布在  Shell
关注(0)|答案(1)|浏览(226)

我如何在powershell的一个批处理脚本中调用另一个批处理脚本。在bash中我使用CALL关键字来完成这个操作。在powershell中有没有一个等价的术语?
我的问题基本上是使用一个批处理文件启动一个开发环境,然后使用第二个批处理文件在该环境中运行一些命令。
我试着用一些

& Path\to\my\batchfile.bat -/c'command with spaces'

我希望它能用批处理文件打开开发环境并运行提供的命令,但它只是继续运行批处理文件,而不运行其中的命令。

hrysbysz

hrysbysz1#

我 * 假设 * 您的用例如下所示:

  • 你想运行批处理文件B.bat
  • 但是批处理文件A.bat必须运行 * first *,以设置B.bat所依赖的环境。
# "foo" and "bar" are sample arguments for B.bat
cmd /c 'c:\path\to\A.bat && c:\path\to\B.bat foo bar'

注:

  • call批处理文件命令在这种情况下是 * 不 * 需要的;call仅在批处理文件 * 内部 * 需要,以便以将控制返回给调用批处理文件的方式调用 * 另一 * 批处理文件。
  • 只要A.bat不使用setlocal * 设置它的变量 *,B.bat也会看到那些(环境)变量。[1]

如果A.bat * 确实 * 使用setlocal-这将变量定义的范围限制为该批处理文件[1]-并且 * 您无法修改A.bat * 以删除此约束,则 * 没有 * 解决方案可以解决您的问题-无论您是从cmd.exe还是PowerShell调用。(也就是说,* 除非 * A.bat恰好被设计为接受命令行来执行 * 作为参数 。)
[1]与PowerShell不同的是,在cmd.exe中,
所有 * 变量都是 * 环境 * 变量。但是,可选的setlocal命令允许你将此类变量的范围限定为给定的批处理文件(并且,当与endlocal调用配对时,甚至限定为批处理文件的 * 部分 *)。有关帮助,请从cmd.exe运行setlocal /?endlocal /?

相关问题