Windows批处理压缩包内加密pdf文件解密的操作步骤

寻技术 Windows / 其他编程 2023年07月11日 162

前言

一个朋友跟我抱怨说,有没有好的方法处理40多个压缩包内的加密pdf文档,并自动压缩回压缩包内?之前10几个压缩包的时候还觉得工作量还行,20几个加密pdf文档也就1个小时的事情,现在是40多个压缩包,90个加密文档,一个一个这样干太枯燥了。

一、批处理是什么?

批处理就是可以对文件进行批量处理,而不需要一个一个的去对文件执行相同的操作。Window下的批处理一般有几种方式,第一种是直接在CMD的Dos界面执行批处理命令,第二种就是保存文件为bat格式,然后双击执行文件就可以自动执行文件内的所有批处理命令,类似于Python文件。

二、使用步骤

1.同时登录多个微信批处理

工作中经常会出现私人有一个微信,公司又有一个微信,所以想在一台电脑上同时登录私人和公司的微信,工作和生活两不误。同时登录多个微信有多个方法。

第一个方法是,将鼠标指针移到微信图标并选中,然后连续按Enter键几次以上,就可以登录多个微信账号,要求是账号必须在手机登录,并进行扫码。

第二个方法就是可以通过批处理的方式进行登录。

批处理的操作步骤如下:

(1)新建一个bat文件。

新建一个txt文件,然后将后缀名txt改成bat就可以。

(2)编辑bat文件,记事本打开文件然后将以下代码复制进去

::关闭回显(命令不打印输出),@命令从本行开始
@echo off

::执行第一个微信
start /d "D:\ProgramFiles\Tencent\WeChat\" WeChat.exe

::执行第二个微信
start /d "D:\ProgramFiles\Tencent\WeChat\" WeChat.exe

exit

红色部分需要替换成你自己的微信安装目录。

start命令,/d表示启动目录。整个命令的格式如下图。

2.多个压缩包加密pdf文件解密

因为我用的pdf解密软件(PDFPasswordRemover)虽然支持批处理,但官方文档没有给出如何在Windwos系统下批处理调用方式,它的批处理方式是将所有pdf文件拖入软件框内就可以批量处理进行解密操作,所以我写的批量处理操作需要将所有压缩包内的pdf文件解压后拷贝到同一个文件夹内,有知道的小伙伴可以在评论区告诉我。

(1)解压所有压缩包

::关闭回显(命令不打印输出),@命令从本行开始
@echo off
::查找当前文件夹内所有的.zip文件并使用WinRAR进行解压
for %%i in (*.zip) do (D:\ProgramFiles\WinRar\WinRAR.exe x -y %%i)
pause

注意:执行这个命令需要安装WinRAR软件,并且需要更改红色的路径。

目前这个命令可行的是WinRar软件,360Zip是不行的,这样写会变成压缩命令。

以下是for命令的格式和参数。

(2)将所有解压出来的pdf文件拷贝到一个文件夹内。

/r参数是表示遍历当前目录以及所有子目录。

/y参数是表示目标文件存在同名文件时,默认覆盖掉此文件。

::关闭回显(命令不打印输出),@命令从本行开始
@echo off

::创建一个目标路径变量tarDir
set tarDir=C:\Output\pdf

::路径不存在则创建一个
if not exist %tarDir% (mkdir %tarDir%)

::查找当前路径以及子目录下的所有以.pdf结尾的文件,覆盖拷贝到目标路径
for /r %%i in (*.pdf) do (copy /y %%i %tarDir% > nul)

pause

copy的命令格式和参数。

这两个命令文件可以合并成一个,执行完第一步之后,加入此步的for行命令。

(3)批量解密pdf文件

将上一步的C:\Output\pdf文件夹内所有pdf拖入下面的软件中,

上面软件的输出默认在C:\Output文件夹

(4)批量拷贝解密后的pdf文件回压缩包目录

解密后的pdf文件默认会添加_Password_Removed.pdf后缀

也就是我们拷贝回去的时候,只需要拷贝后缀是_Password_Removed.pdf的文件,而原来的pdf文件名称是去掉_Password_Removed,所以我们需要判断之前压缩包解压出来的目录,是否存在原文件,如果存在则拷贝后缀是_Password_Removed.pdf的解密文件,不存在则跳过。

::关闭回显(命令不打印输出),@命令从本行开始
@echo off
::设置延迟变量
setlocal EnableDelayedExpansion

::创建变量srcDir并赋值
set srcDir=C:\Output
::创建变量tarDir并赋值bat文件所处目录
set tarDir=%cd%

::外层for循环遍历文件名包含_Password_Removed的文件
for /f "delims=" %%i in ('dir %srcDir% /b *_Password_Removed*') do (
    ::对文件名进行处理,并去除_Password_Removed
    ::echo %%i
    set var=%%i
    set var=!var:_Password_Removed=!
    ::echo %%i !var!
    ::遍历压缩包目录的子目录,并判断子目录是否包含原文件
    for /f %%j in ('dir %tarDir% /ad/b/s') do (
        ::echo -
        set cur="%%j\!var!"
        ::echo !cur!
        ::原文件存在则拷贝外层解密文件
        if exist !cur! ( echo ---%%i %%j & copy /y %srcDir%\%%i %%j > nul)
    )
)

pause

记得需要把bat文件放置到原先的压缩包目录。

/f参数表示对目录以及子目录进行遍历循环时,可以打开文件,并将文件里面的内容读取到内存,你可以对这个文件的内容再进行遍历,目前这里还不需要,只需要文件名就可以了。

dir表示指向目录。/b舍弃标题与摘要内容,不加这个窗口会多出很多打印。

/b /a:d选项是指定显示所有具有该属性的文件目录。

/s 查找当前目录以及所有子目录下的文件。

set var=!var:_Password_Removed=!

这条语句就是将_Password_Removed赋值为空,如果想改成其它的,直接在修改=后面就可以了。

copy /y选项是存在默认处理方式是覆盖掉文件,不加这个会一直弹窗让你选择。

(5)批量压缩目录

::关闭回显(命令不打印输出),@命令从本行开始
@echo off
::查找当前文件夹内所有的目录,并将其压缩成目录名.zip文件,压缩完不删除原文件目录
for /d %%i in (*) do (D:\ProgramFiles\WinRar\WinRAR.exe a -k -r -s -m1 %%i.zip %%i)

pause

WinRAR批处理命令。

a :备份所有文件。-k :锁定压缩文件。-r:备份目录和子目录。-s :创建固实压缩文件。

-m<n>:设置压缩模式,从底到高压缩率越高:-m0不压缩方式储存;-m1最快;-m2较快;-m3标准(默认);-m4较好;-m5最好。

总结

以上就是对批处理命令的理解了,批处理对于重复性工作的帮助还是挺大的,能够大大提高工作的效率。

关闭

用微信“扫一扫”