至少对我有用:
> taskkill /f /im powershell.exe && echo 工作 || 回声不起作用
成功:PID 3228 的进程“powershell.exe”已终止。
工作过
> taskkill /f /im powershell.exe && echo 工作 || 回声不起作用
错误:找不到进程“powershell.exe”。
没用
返回正确的退出代码taskkill
也是如此。其输出的重定向与此无关。但是失败的错误级别是 128。您确实应该使用正确的习惯用法来检查错误。
此外,它似乎taskkill
正在打印,stderr
所以你仍然可以看到它的输出,当只是重定向stdout
. 您可以考虑将上述代码重写为:
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如果最后一个程序运行返回的退出代码等于或大于指定的数字,则指定一个真条件。—<code>帮助如果
通常检查errorlevel
是if %errorlevel%==
一个非常糟糕的主意,除非您与 0 进行比较。退出代码的语义是anything
非零信号失败。您在这里的假设只是失败taskkill
会返回1
。
Ans 请问我为什么要在无限循环中这样做?已经taskkill
杀死了. itunes.exe
而且您正在一个紧密的循环中运行,没有任何延迟,因此您的批处理文件在运行时可能会消耗一个 CPU 内核。
ETA:忽略了你的编辑:为什么要花括号?批处理文件中的块由圆括号分隔。