Windows 检查错误,但不要';不要给他们看

Windows 检查错误,但不要';不要给他们看,windows,cmd,command-prompt,Windows,Cmd,Command Prompt,我有一个杀死一些进程的小脚本。它工作正常,除非找不到进程,否则会显示错误消息。添加2>nul不会解决问题,因为错误已被丢弃 如何防止错误显示,并显示一些有意义的消息 for %%i in (%procs%) do ( TASKKILL /F /IM %%i > nul if "%ERRORLEVEL%"=="0" ( echo %%i was stopped successfully echo. ) else ( ec

我有一个杀死一些进程的小脚本。它工作正常,除非找不到进程,否则会显示错误消息。添加
2>nul
不会解决问题,因为错误已被丢弃

如何防止错误显示,并显示一些有意义的消息

for %%i in (%procs%) do (
    TASKKILL /F /IM %%i > nul
    if "%ERRORLEVEL%"=="0" (
        echo %%i was stopped successfully
        echo.
    ) else (
        echo %%i was not started
    )
)

更改用于
errorlevel
检查的语法(表达式
if errorlevel n
表示errorlevel等于或大于n)

对于%%i in(%procs%)do(
>nul 2>&1 TASKKILL/F/IM“%%~i”
如果不是错误级别1(
我被成功地阻止了
)否则(
我没有被启动
)
)
使用条件执行运算符(
&&
=在上一个命令成功时执行,
|
=在上一个命令失败时执行)

对于%%i in(%procs%)do(
>nul 2>&1 TASKKILL/F/IM“%%~i”和(
我被成功地阻止了
) || (
我没有被启动
)
)
使用延迟扩展(如果没有延迟扩展,当解析完整块时,
errorlevel
read操作替换为变量内的值,则无法检索更改的值)

setlocal enabledelayedexpansion
对于(%procs%)中的%%i,请执行以下操作(
>nul 2>&1 TASKKILL/F/IM“%%~i”
如果!errorlevel!==0(
我被成功地阻止了
)否则(
我没有被启动
)
)
但请记住,所有这些示例都是简化的。例如,
taskkill
如果进程无法终止,也可能失败。

读取

延迟展开将导致变量在执行时展开 时间而不是在解析时,此选项在
SETLOCAL
命令。当延迟扩展生效时,变量可以 可以使用
引用!变量名称(除了正常的
%variable\u name%

请注意,
TASKKILL
命令可能会由于更多原因而失败,这不仅是因为进程没有运行,例如,如果您试图从一个不相关的
cmd
提示符杀死一个提升的进程

Setlocal EnableDelayedExpansion
for %%i in (%procs%) do (
    TASKKILL /F /IM %%i 1>nul 2>&1
    if "!ERRORLEVEL!"=="0" (
        echo %%i was stopped successfully
        echo.
    ) else (
        echo %%i was not started
    )
)
for %%i in (%procs%) do (
    TASKKILL /F /IM %%i 1>nul 2>&1
    if ERRORLEVEL 1 (
        echo %%i was not started
    ) else (
        echo %%i was stopped successfully
        echo.
    )
)