我有以下批处理文件,它会终止 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
如果被发现并终止,
iTunes 被杀了
帮助?错误级别不起作用,这似乎是nul
不工作。
至少对我有用:
> taskkill /f /im powershell.exe && echo worked || echo not worked
SUCCESS: The process "powershell.exe" with PID 3228 has been terminated.
worked
> taskkill /f /im powershell.exe && echo worked || echo not worked
ERROR: The process "powershell.exe" not found.
not worked
So taskkill
is返回正确的退出代码。其输出的重定向与此无关。但失败的错误级别是 128。您确实应该使用正确的习惯用法来检查错误。
也似乎是taskkill
正在打印到stderr
所以当你重定向时你仍然可以看到它的输出stdout
。您可以考虑将上面的代码重写为:
taskkill /F /IM itunes.exe >nul 2>&1
if errorlevel 1 (echo iTunes not found.) else (echo iTunes is killed.)
The 2>&1
将标准错误输出重定向到巨大的虚无中。if errorlevel 1
检查errorlevel
being 至少 1此时应该起作用:
错误级别编号如果最后一个程序运行返回的退出代码等于或大于指定的数字,则指定 true 条件。 —help if
一般检查errorlevel
with if %errorlevel%==
是一个非常糟糕的主意,除非你与 0 进行比较。退出代码的语义是anything
非零信号故障。你的假设就是这样taskkill
会回来1
失败时。
我可以问你为什么要无限循环地这样做吗?taskkill
已经杀了all的实例itunes.exe
。而且您正在紧密循环中运行,没有任何延迟,因此您的批处理文件在运行时可能会消耗一个 CPU 核心。
ETA:忽略了您的编辑:到底为什么要花括号?批处理文件中的块由圆括号分隔。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)