微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在批处理中杀死一个进程并报告成功

我有以下batch file,终止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

但是,这个命令没有回应。 所以它只是给出了认的命令文本。 所以是的,我想要做什么:

如果找不到iTunes,则应显示该命令

未findiTunes

如果使用&&或||,命令成功完成,X> = 1的`EXIT / BX`退出批处理 批量调用间的运算符

检测文件是否在batch file中打开

批处理 – 如果ELSE启动函数的条件执行,无论

块级磁盘caching,如何查找文件系统请求的块的逻辑块地址

Windows批处理退出选项b有或没有错误级别

如果发现并终止,

iTunes被杀害

帮帮我? 错误级别不起作用,这似乎是没有工作的错误

Windowsbatch file – GOTO命令被忽略

如何在使用pipe道时检测diskpart中的错误

windows批处理 – ECHO正在改变%ERRORLEVEL%

处理nmake错误级别/返回码

Windows任务计划程序报告不正确/不一致的结果代码

至少适用于我:

> 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数字如果最后一个程序运行返回等于或大于指定数字的退出代码,则指定一个真实条件。 – help if

通常,使用if %errorlevel%==来检查错误errorlevel是一个非常糟糕的主意,除非您将其与0进行比较。退出代码的语义是anything非零信号失败。 你在这里的假设就是taskkill在失败时会返回1 。

我可以问你为什么这样做是无止境的? taskkill已经杀死了itunes.exe 所有实例。 而且你在没有任何延迟的情况下运行在一个紧密的循环中,所以你的批处理文件在运行时可能会消耗一个cpu核心。

ETA:忽略了你的编辑:为什么地球上花括号? 批处理文件中的块由圆括号分隔。

一个替代的解决方案,在VBScript,保存下面的代码为mykill.vbs

Set objArgs = WScript.Arguments strProcess = objArgs(0) strComputer = "." Set objWMIService = Getobject("winmgmts:{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2") Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process Where Name ='" & strProcess & "'") If colProcesses.Count = 0 Then Wscript.Echo strProcess & " is not running." Else Wscript.Echo strProcess & " is running." 'Kill the process For Each objProcess in colProcesses r=objProcess.Terminate() WScript.Echo "r is " & r If r = 0 Then WScript.Echo strProcess & " killed" End If Next End If

在命令行上

c:test> cscript //nologo mykill.vbs "itunes.exe"

你为什么不使用PowerShell?

try { Stop-Process -Name itunes -ErrorAction Stop "iTunes is killed" } catch { "iTunes not found" }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐