win10 python强制移动被占用文件

系统环境: windows 10专业版 64位python3.5.2
问题描述: os.popen执行系统命令move src_dir des_dir
移动文件无效,traceback提示文件被占用,移动目录0个

研究一番,发现工具process explorer, 用工具find->find handle or DLL,输入文件名称,可以查看占用文件的进程,
查询后发现是个c++库open文件后没有正常关闭文件,系统会保持一个file handle,导致无法操作文件,
在process explorer可以手动close handle,然后可以正常操作文件。

如何通过命令行来处理呢,查询某个目录下的文件是否被占用并自动解除占用(删除handle)

继续google,发现这个回答https://superuser.com/a/787179
在bat脚本里运行
@echo off
for /f "tokens=3,6,8 delims=: " %%i in ('handle -p eclipse e:\git\') do echo Releasing %%k & handle -c %%j -y -p %%i
按自己的需求修改下
@echo off
for /f "tokens=3,6,8 delims=: " %%i in ('handle -p python d:\projects\') do echo Releasing %%k & handle -c %%j -y -p %%i
优化将搜索目录作为参数传入,再修改
@echo off
for /f "tokens=3,6,8 delims=: " %%i in ('handle -p python %1') do echo Releasing %%k & handle -c %%j -y -p %%i
脚本命名为remove_handle.bat(上述命令直接在cmd命令窗口执行时需要将参数前的%%换成%)

下载handle: https://docs.microsoft.com/zh-cn/sysinternals/downloads/handle
把解压目录添加到系统变量path

终于可以在python中直接调用脚本了
os.system('remove_handle.bat {}'.format(file_path))
然后再对file_path下的文件可执行任意操作了。这个操作比较暴力,可能因系统复用handle导致正在使用文件的进程发生未可知的错误。复制代码

转载于:https://juejin.im/post/5c751149f265da2d96181a70

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值