我如何在powershell的一个批处理脚本中调用另一个批处理脚本。在bash中我使用CALL关键字来完成这个操作。在powershell中有没有一个等价的术语?
我的问题基本上是使用一个批处理文件启动一个开发环境,然后使用第二个批处理文件在该环境中运行一些命令。
我试着用一些
& Path\to\my\batchfile.bat -/c'command with spaces'
我希望它能用批处理文件打开开发环境并运行提供的命令,但它只是继续运行批处理文件,而不运行其中的命令。
我如何在powershell的一个批处理脚本中调用另一个批处理脚本。在bash中我使用CALL关键字来完成这个操作。在powershell中有没有一个等价的术语?
我的问题基本上是使用一个批处理文件启动一个开发环境,然后使用第二个批处理文件在该环境中运行一些命令。
我试着用一些
& Path\to\my\batchfile.bat -/c'command with spaces'
我希望它能用批处理文件打开开发环境并运行提供的命令,但它只是继续运行批处理文件,而不运行其中的命令。
1条答案
按热度按时间hrysbysz1#
我 * 假设 * 您的用例如下所示:
B.bat
,A.bat
必须运行 * first *,以设置B.bat
所依赖的环境。注:
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 /?
。