gpt4 book ai didi

windows - 在 Batch 中终止进程并报告成功

转载 作者:可可西里 更新时间:2023-11-01 13:28:41 25 4
gpt4 key购买 nike

我有以下批处理文件,它终止了 iTunes 程序,因此,如果我连接 iPod,它不会同步它。 (我知道您可以在 iTunes 中进行设置。)

@echo off
:kill
cls
taskkill /F /IM itunes.exe >nul
if %errorlevel%==1 {
echo iTunes not found.
} else {
echo iTunes is killed.
}
goto kill

但是,>nul 不响应命令;所以它只给出默认的命令文本。所以,是的,我想做什么:

如果没有找到 iTunes,按照命令给出的,它应该显示

iTunes not found

如果找到并终止,

iTunes is killed

帮助?错误级别不起作用,这似乎是 nul 不起作用的错误。

最佳答案

至少对我有用:

> taskkill /f /im powershell.exe && echo worked || echo not workedSUCCESS: The process "powershell.exe" with PID 3228 has been terminated.worked> taskkill /f /im powershell.exe && echo worked || echo not workedERROR: The process "powershell.exe" not found.not worked

So taskkill is returning a proper exit code. The redirect of its output has nothing to do with this. But the error level for failure is 128. You really should use the proper idiom for checking for errors.

Also it seems that taskkill is printing to stderr so you see its output still, when just redirecting stdout. You may consider rewriting above code to:

taskkill /F /IM itunes.exe >nul 2>&1
if errorlevel 1 (echo iTunes not found.) else (echo iTunes is killed.)

2>&1 将标准错误输出重定向到广阔的虚无中。 if errorlevel 1 检查 errorlevel 至少为 1 这应该在此时起作用:

ERRORLEVEL number Specifies a true condition if the last program run returned an exit code equal to or greater than the number specified. —help if

通常用 if %errorlevel%== 检查 errorlevel 是一个非常糟糕的主意,除非你要与 0 进行比较。退出代码的语义是 anything 非零表示失败。您在这里的假设只是 taskkill 会在失败时返回 1

请问您为什么要无限循环地执行此操作? taskkill 已经杀死 所有 itunes.exe 实例。而且您在没有任何延迟的紧密循环中运行,因此您的批处理文件在运行时可能会消耗一个 CPU 内核。

预计到达时间:忽略了您的编辑:到底为什么要花括号?批处理文件中的 block 由圆括号分隔。

关于windows - 在 Batch 中终止进程并报告成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1896262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com