【问题标题】:Batch to kill a process either by PID or process name, depending on user input根据用户输入,通过 PID 或进程名称批量杀死进程
【发布时间】:2019-03-10 16:54:11
【问题描述】:

我想创建一个批处理文件来根据用户的选择通过 id 或名称来终止进程。比如他选择1,那么他被提升进入pid然后代码执行命令taskkill /PID processNumber /F,如果他选择2,他输入进程名,代码执行taskkill /IM processName.exe /F

我的问题是代码在输入 pid 或名称后总是进入循环。

这是我的代码:

@echo off
title TASKKILL
tasklist
echo _____________________________________________________________
echo Press 1 to choose PID
echo Press 2 to choose Process Name
set /p option=
if %option% == 1 goto id
if %option% == 2 goto proc
goto out
:id
set /p pid="Enter the PID of the process you want to kill: "
echo %pid%
taskkill /PID %pid% /F
:proc
set /p processName="Enter the name of the process you want to kill: "
echo %processName%
taskkill /IM %processName%.exe /F
pause

【问题讨论】:

  • 标签:out在哪里?无论如何,您需要控制在每个部分之后继续执行的位置:id:proc;否则它只会在下一行继续。并看看choice...

标签: batch-file cmd


【解决方案1】:

试试这个:

@echo off
title TASKKILL
tasklist
echo _____________________________________________________________
echo Press 1 to choose PID
echo Press 2 to choose Process Name
set /p option=
if "%option%"=="1" goto :id
if "%option%"=="2" goto :proc

goto :out
:id
set /p pid="Enter the PID of the process you want to kill: "
echo %pid%
taskkill /PID %pid% /F

goto :out
:proc
set /p processName="Enter the name of the process you want to kill: "
echo %processName%
taskkill /IM %processName%.exe /F

:out
pause

您需要在正常流程中避开函数,将goto :eofgoto :outbranch 放在它们之前。

所以我这里的更改是添加:out 标签,并在这两个函数之前添加goto :out

注意当使用if检查变量的值时,最好同时引用变量和你检查的值,==前后不要留空格,像这样:

if "%var%"=="value" echo "It's euqal!"

所以我更改了if %option% == 1 部分:)

【讨论】:

  • 相同的代码复制粘贴。我没有将它与另一个代码结合起来
  • 我重新启动笔记本电脑并重新执行批处理文件,它工作正常。没有改变任何东西。谢谢!我将其标记为答案
猜你喜欢
  • 2021-11-29
  • 1970-01-01
  • 2020-03-02
  • 2014-11-24
  • 2014-09-07
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
相关资源
最近更新 更多