假设我有以下名为openPS.bat
的批处理文件:
@echo off
SET psFile="%1"
Powershell.exe -ExecutionPolicy ByPass -File %psFile% %2 %3 %4 %5
if %errorlevel% NEQ 0 GOTO :error
GOTO :end
:error
echo Exit Code: %ERRORLEVEL%
echo Failed!
EXIT /B %ErrorLevel%
:end
echo Exit Code: %ERRORLEVEL%
echo Success!
此批处理文件用于在CMD控制台中运行Powershell脚本:
C:> openPS.bat script.ps1
script.ps1由包装程序运行多次,因此每次成功运行时,它都会输出exit code 0
我可以通过Powershell以某种方式忽略openPS.bat中的这一行吗?
EXIT /B %ErrorLevel%
:end
echo Exit Code: %ERRORLEVEL%
echo Success!
我知道我可以REM
,但是在script.ps1的所有循环完成后,我需要输出一条成功消息。因此它必须保留,我找不到抑制所有这些退出代码0的方法。如果我在Powershell脚本中使用out-null
,则会丢失所有其他输出,因此out-null
是不可选项。
答案 0 :(得分:1)
而不是检查并显示“成功!”对于每次迭代,请使用包装器脚本指示完成。屏幕将仅显示失败和完成消息。
您还可以在包装脚本中使用变量来跟踪返回值,一个简单的和将起作用,并在所有迭代的执行完成后对其进行0
测试。然后显示成功或失败。
@echo off
SET psFile="%1"
Powershell.exe -ExecutionPolicy ByPass -File %psFile% %2 %3 %4 %5
if %errorlevel% NEQ 0 GOTO :error
GOTO :end
:error
echo Exit Code: %errorlevel%
echo Failed!
:end
EXIT /B %errorlevel%