繁体   English   中英

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

[英]How do I run a batch script from within a batch script using powershell?

如何从 powershell 中的批处理脚本中调用另一个批处理脚本。在 bash 中,我曾经使用 CALL 关键字完成此操作。 powershell 中是否有对应的术语?

我的问题基本上是使用批处理文件启动开发环境,然后使用第二个批处理文件在该环境中运行一些命令。

我尝试使用类似的东西

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

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

假设您的用例如下:

  • 你想运行批处理文件B.bat
  • 但必须运行批处理文件A.bat ,设置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 batch-file 命令; call只需要一个批处理文件中以将控制权返回给调用批处理文件的方式调用另一个批处理文件。

  • 只要A.bat不使用setlocal的情况下设置其变量, B.bat也会看到那些(环境)变量。 [1]


如果A.bat确实使用setlocal - 它将 scope 的变量定义限制为该批处理文件[1] - 并且您无法修改A.bat以删除此约束,则您的问题没有解决方案 - 无论您是否从cmd.exe或 PowerShell 调用。(也就是说,除非A.bat恰好设计为接受命令行作为参数执行。)


[1] 与PowerShell不同, cmd.exe所有变量都是环境变量。 但是,可选的setlocal命令允许您将 scope 这样的变量添加到给定的批处理文件中(并且,当与endlocal调用配对时,甚至可以添加到批处理文件的一部分)。 如需帮助,请运行setlocal /? endlocal /? 来自cmd.exe

暂无
暂无

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

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