吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1899|回复: 10
收起左侧

[其他原创] 【批处理】写了个简单的批量结束程序进程占用的小脚本

[复制链接]
hoochanlon 发表于 2024-4-3 17:33

缘起

最近在删除解压的文件时遇到所谓的“权限”问题,折腾了半会,原来是WinRAR预览压缩文件还挂在任务栏,关闭程序后就能删除了。

本着为日后省事着想,写了个结束文件进程、批量关闭文件夹内的程序进程的批处理。之后就不用再去文件夹比对程序排查进程了,解除占用就删除。

应用场景:找不到相关程序进程关闭,或解锁相关程序占用影响文件删除。

注意:该脚本偏向于个人习惯,因我常打开压缩程序不爱关闭,所以额外加入遍历常用解除压缩进程指令,坛友可适当修改代码匹配自身环境。

简单设计

思路:

  1. 给定相关文件及程序。
  2. for 遍历给定的最后目录路径
  3. 提取文件名,批量关闭进程

这期间为了使程序更完善些,我用了powershell的ACL,看上去获取文件所有权很美好,但我实际测试起来也没那么好使,效果不明显,查看改成功的所有者,看上去有些心理安慰,于是又换回batch了。

使用效果

执行

curl -OfsSL https://ghproxy.org/https://raw.githubusercontent.com/hoochanlon/scripts/main/d-bat/unlockapp.bat&&call unlockapp.bat

这里打开了rar、半条命作为演示。

可以看到结束了rar、半条命相关进程。

文件已删除

附源码

链接:https://github.com/hoochanlon/scripts/blob/main/d-bat/unlockapp.bat

@echo off
setlocal

set /p "targetPath=请输入要操作的目录或程序:"

@rem 去除输入路径两边可能存在的引号
set "targetPath=%targetPath:"=%"

@REM 判断路径是否存在
if not exist "%targetPath%" (
    echo 指定的路径不存在,已退出。
    exit /b
)

@REM 获取路径的目录部分和文件名部分
for %%F in ("%targetPath%") do (
    set "actualPath=%%~dpF"
    set "fileName=%%~nxF"
)

@REM 构建实际要操作的路径
set "actualPath=%actualPath%%fileName%"

echo --- 开始检测路径程序进程,并关闭。----
@REM 终止给定的进程
taskkill /F /FI "IMAGENAME eq %fileName%" 2>nul

@REM 如果是目录,终止目录及其子目录中所有的 .exe 进程
if exist "%actualPath%\." (
    for /r "%actualPath%" %%A in (*.exe) do (
        taskkill /F /FI "IMAGENAME eq %%~nxA" 2>nul
    )
)
echo/
echo --- 开始检测压缩软件占用情况,并关闭。----
@REM 特殊关照:winRAR、7z、360压缩、2345好压、快压

@REM winrar
if exist "C:\Program Files\WinRAR\." (
    for /r "C:\Program Files\WinRAR" %%A in (*.exe) do (
        taskkill /F /FI "IMAGENAME eq %%~nxA" 2>nul
    )
)

@REM 7z
if exist "C:\Program Files\7-Zip\." (
    for /r "C:\Program Files\7-Zip\." %%A in (*.exe) do (
        taskkill /F /FI "IMAGENAME eq %%~nxA" 2>nul
    )
)

@REM  360压缩
if exist "C:\Program Files (x86)\360\360zip\." (
    for /r "C:\Program Files (x86)\360\360zip" %%A in (*.exe) do (
        taskkill /F /FI "IMAGENAME eq %%~nxA" 2>nul
    )
)

@REM 2345 好压
if exist "C:\Program Files\2345Soft\HaoZip\." (
    for /r "C:\Program Files\2345Soft\HaoZip" %%A in (*.exe) do (
        taskkill /F /FI "IMAGENAME eq %%~nxA" 2>nul
    )
)

@REM 快压
if exist "C:\Users\hooch\AppData\Roaming\快压\." (
    for /r "C:\Users\hooch\AppData\Roaming\快压" %%A in (*.exe) do (
        taskkill /F /FI "IMAGENAME eq %%~nxA" 2>nul
    )
)
echo ----------------结束 ---------------------
echo/

REM 提示用户选择是否删除文件夹及其所有内容
set /p deleteOption=是否删除 %actualPath% ?(Y/N)
if /I "%deleteOption%"=="Y" (
    rd /S /Q "%actualPath%" 2>nul
    del /F /Q "%actualPath%" 2>nul
    echo 删除操作执行完成。
) else (
    if /I "%deleteOption%"=="N" (
        echo 已撤销删除操作。
    ) else (
        echo 无效的输入,已退出。
    )
)

endlocal
pause

参考

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

devSteven 发表于 2024-4-8 17:10
快压那部分写的是你自己的用户名啊是不是得去修改一下
@rem 快压
if exist "C:\Users\hooch\AppData\Roaming\快压\." (
    for /r "C:\Users\hooch\AppData\Roaming\快压" %%A in (*.exe) do (
        taskkill /F /FI "IMAGENAME eq %%~nxA" 2>nul
    )
)

可用
[Bash shell] 纯文本查看 复制代码
%appdata%
去替换一下
52soft 发表于 2024-4-3 18:42
lcg2014 发表于 2024-4-3 19:10
codermo 发表于 2024-4-3 21:09
学到了!
昔年缔造 发表于 2024-4-3 22:04
看不懂但感觉不错
 楼主| hoochanlon 发表于 2024-4-9 22:51
devSteven 发表于 2024-4-8 17:10
快压那部分写的是你自己的用户名啊是不是得去修改一下

可用 [mw_shl_code=bash,true]%appdata%[/mw_shl_ ...

感谢。{:1_921:} 。我都没注意到。笑哭.jpg
ot1686 发表于 2024-4-11 19:08
感谢大佬分享这个实用的批处理脚本!它可以轻松结束程序佔用,刚刚试用了一下还真的蛮不错的,常常ADB这程序进程都会在,使用了大佬的批次后,节省了我很多麻烦。
doubinanbowan 发表于 2024-4-28 22:59
看起来不错,感谢大佬哈哈哈
wsy1 发表于 2024-4-29 13:39
谢谢大佬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 18:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表