这是我的代码。
set-location [PATH]
$A = Start-Process -FilePath .\refresh.bat -Wait
set-location C:\
当在powerhell中执行时,系统会打开一个命令提示窗口 并顺利执行bat文件。问题是窗口关闭,如果成功的话,我无法看到是否有错误。
我想让CMD窗口一直打开。
我也试过在bat文件的最后。
:END
cmd /k
但没有成功
首先。除非你特别需要在一个叫 新窗口,不要使用 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
.
谢谢你mklement0用你的帖子给了我我想要的解决方案。我是这样解决的。
set-location [PATH]
$A = Start-Process -FilePath .\refresh.bat -Wait -NoNewWindow
set-location C:\
-NoNewWindow 允许我在同一个powershell窗口中运行我的批处理,得到bat文件的反馈。这样,如果有错误的话,我就有错误,如果没有错误的话,我就有成功的状态。
谢谢你