本文完成了两个操作,
第一,从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窗口,把命令打印出来,黏贴过去进行调试的,这样也很完美
完结撒花