admin管理员组

文章数量:1632159

本文完成了两个操作,

第一,从rar文件中, 将指定文件批量解压缩并重命名

第二,使用Python完成相应操作

首先是操作原因,我有一堆rar文件,里面有一个文件我需要提取出来,但是这个文件在每个rar文件中是一样的,如果只是提取,后面的会把前面的覆盖,因此需要提取之后用源文件中的日期重命名一下

前置操作需要安装7z.exe,并且将路径加入到系统路径

文件存储在D:\Documents\tmp下,实践证明中文并不影响

具体命令参考了bat网站,具体网址不记得了,主要是参考其提取数字的操作 数字提取之后用

ren命令进行了重命名

7z 命令是用于解压缩的 会解压到运行命令的文件夹 所以一般来说需要cd到目标文件夹


@echo off
D:
cd "D:\Documents\tmp"
pause

for /f "delims=" %%a in ('dir /s /a-d /b D:\Documents\tmp') do call :lp "%%a" %%~na %%~xa
goto :eof
:lp



set "str=%2"

for /l %%a in (0,1,9) do call,

 set "str=%%str:%%a=%%"



for /f "delims=%str%" %%a in ("%2") do (

7z x  -y %%a.rar "211.txt" -r
echo %1 
echo %2
echo %3

ren "211.txt" "211观_%%a.txt"

)
pause

第二步,由于有些文件结构比较复杂 自己对批处理命令不是很熟悉,所以还是想转换为Python操作

其中Python中的zipfile对zip操作比较友好,但是rarfile,以及unrar由于一些原因,和Python并不是很适配,因此只好转而使用os.system(),这样就可以直接调用批处理中的命令了,简单实用

rar = rarfile.RarFile(src_file)
os.chdir(dest_dir)
# rar.extractall()
# rar.close()
for f in rar.infolist():
     print(f.filename, f.file_size)
     if f.filename[-3:] not in ['rar','zip']:
     os.system('7z x  -y "{}" "{}" -r'.format(src_file, f.filename))
     # rar.extract(f)

从注释可以看出,一开始使用rar.extractall()和rar.extract()是不成功的,因为rarfile这个包需要unrar的相应配合,具体可以自行百度或者查看rarfile的官网

所以就转而使用7z直接系统调用了,需要注意的是,外部使用单引号,内部使用双引号

如果交换解压也是不成功的

对了,再提示一下,在pycharm下,对命令行调试时,返回中文显示是乱码的,我修改了全局设定也不行,后来调试的时候,是在cmd窗口,把命令打印出来,黏贴过去进行调试的,这样也很完美

完结撒花

本文标签: 批处理解压缩文件Windows