Powershell ps1脚本运行bat文件,但执行后CMD屏幕关闭。

问题描述 投票:0回答:1

这是我的代码。

set-location [PATH]
$A = Start-Process -FilePath .\refresh.bat -Wait

set-location C:\

当在powerhell中执行时,系统会打开一个命令提示窗口 并顺利执行bat文件。问题是窗口关闭,如果成功的话,我无法看到是否有错误。

我想让CMD窗口一直打开。

我也试过在bat文件的最后。

:END
cmd /k

但没有成功

powershell batch-file cmd
1个回答
3
投票

首先。除非你特别需要在一个叫 新窗口,不要使用 Start-Process - 使用 直接调用 而是隐含的是 同步 并允许您 撷取:

# Invoke the batch file synchronously (wait for it to exit)
# and capture its (standard) output in variable $A
# To print the batch file's output to the console instead, just use:
#    .\refresh.bat
$A = .\refresh.bat

本回答 更多信息。

还注意到 Start-Process 从来不允许你捕捉被调用程序的 产出 (你只能把它重定向到 档案-RedirectStandardOutput-RedirectStandardOutput);您的具体命令捕捉到了 毫无[1]$A;增加 -PassThru 确实返回了一些东西,但不是程序的输出,而是一个过程信息对象(System.Diagnostics.Process).

如果你 需要在新窗口中运行批处理文件 并想 开窗:

Start-Process -Wait -FilePath cmd -ArgumentList '/k .\refresh.bat'

依靠位置参数绑定,上述内容可以简化为:。 Start-Process -Wait cmd '/k .\refresh.bat'


[1] 严格地说: $A 被分配的是 [System.Management.Automation.Internal.AutomationNull]::Value singleton,在大多数情况下,它的行为就像 $null.


0
投票

试试 PAUSE 来保持命令提示符窗口。

:End
PAUSE

我建议你看一下 推送定位流行定位 为你的PowerShell脚本,如果你想返回到以前的目录。不是任何修复的一部分,只是在使用过的cmdlets下。))


0
投票

谢谢你mklement0用你的帖子给了我我想要的解决方案。我是这样解决的。

set-location [PATH]
$A = Start-Process -FilePath .\refresh.bat -Wait -NoNewWindow
set-location C:\

-NoNewWindow 允许我在同一个powershell窗口中运行我的批处理,得到bat文件的反馈。这样,如果有错误的话,我就有错误,如果没有错误的话,我就有成功的状态。

谢谢你

© www.soinside.com 2019 - 2024. All rights reserved.