Windows的shell下,杀掉某进程

本文介绍了如何在Windows的shell环境下,利用findstr、taskList、taskKill、echo和for命令来查找并杀掉特定的进程,如mspaint.exe。通过运行相关命令并查看log文件,可以成功终止目标进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用了Windows下的findstr、taskList、taskKill、echo、for命令。

在Windows的命令行下,怎么杀掉某进程(比如,杀掉所有的mspaint.exe画图进程)
代码:

@echo off
echo '===begin==='
for /f "tokens=1,2 delims= ," %%a in ('tasklist /m ^| findstr "mspaint.exe"') do (
    echo name=%%a, PID = %%b, and will kill it.
    TASKKILL /PID %%a
)
echo "====end===="
pause
解释:
括号里的命令可能得到很多行文本,对于每一行文本,按照空格和逗号(delims= ,)进行截取,取出来第1个字段送给%a,第2个字段送给%b,然后送到do里面,然后打印一句话,然后用TaskKill命令把这个进程号对应的进程杀掉。

命令echo:echo后面跟随的语句,不需要用引号引起来。
下面的命令可以看到,datetimeStr这个时间戳,不论在引号里面还是外面,都正常显示了,反倒是引号,也跟着输出了。

@echo off
set datetimeStr=%date:~0,4%/%date:~5,2%/%date:~8,2% %time:~0,2%:%time:~3,2%:%time:~6,2%
echo  %datetimeStr%, bat script.
echo '%datetimeStr%, bat script.'
echo  %datetimeStr%",bat script."
echo  %datetimeStr%, bat script.  > D:\test_echo.log
命令taskList:自己用taskList /?查看帮助。运行如下命令并查看log文件。

tasklist /m > D:\tasklist.log

命令findstr:自己用findstr /?查看帮助。运行如下命令并查看log文件。

tasklist /m | findstr "svchost.exe" > tasklist_findstr.log
命令taskKill:自己用taskKill /?查看帮助。
命令for:用for /?查看帮助。
通过帮助文档我们知道,for有一种使用方法:

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
帮助文档中有一个例子非常好,请先查看一下:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
对于FOR /F 的【IN ('command')】部分:
其中的command需要替换成一个命令语句,比如【tasklist /M | findstr "mspaint"】,但是替换时需要注意:
①命令需要用单引号引上②竖线(|)之前需要一个转义字符^,为【'tasklist /m ^| findstr "mspaint.exe"'】。
对于FOR /F 的【DO command [command-parameters]】部分:
do后面可以直接跟一个命令,也可以在do后面写一对小括号,将许多语句写在小括号里面。
注意:do后需要有一个空格,空格后是左括号;即,do和左括号在一行,但不能写在一起。

@echo off
echo '===begin==='
for /f "tokens=1,2" %%a in ('tasklist /m ^| findstr "svchost.exe"') do (
    echo name=%%a
    echo pid==%%b
    echo name=%%a, pid=%%b
    echo =========
)
echo "====end===="
pause
对于FOR /F 的【%variable】部分:
建议写【%a】,如果要写在.bat文件里,需要多加一个%号,为【%%a】。不过,当然可以写%i或%x等。
对于FOR /F 的【["options"]】部分:
建议阅读帮助文档中的例子。
我们查看了【tasklist /m | findstr "svchost.exe" > tasklist_findstr.log】生成的文件的格式。生成的log文件中,各个字段之间是用空格和逗号分隔的。
又【delims=xxx      - 指分隔符集。这个替换了空格和跳格键的默认分隔符集】,所以,我们需要写成【delims= ,】才行。
又【tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代的 for 本身】,并且【%variable】写的是【%a】,那么:
写成【tokens=1,2,3,4,5】那么会将第1~第5个字段传到迭代的for本身(就是传到do里面),用%a~%e获取第1~第5个字段的值。
写成【tokens=1,3-5】那么会将1和3~5送到do里面。其中,1对应%a,3对应%b,4对应%d,5对应%e。
写成【tokens=2,*】那么会将2和2后面的字段送到do里面去。其中2对应%a,2后面的所有数据对应%b。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值