批处理以通过PID或进程名称终止进程,具体取决于用户输入

时间:2019-03-10 16:54:11

标签: batch-file cmd

我想创建一个批处理文件以根据用户的选择按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

1 个答案:

答案 0 :(得分:3)

尝试一下:

@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部分:)