前言
一个朋友跟我抱怨说,有没有好的方法处理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
总结
以上就是对批处理命令的理解了,批处理对于重复性工作的帮助还是挺大的,能够大大提高工作的效率。