提取了bat。分享给大家
[Asm] 纯文本查看 复制代码 @shift /0
@echo off
setlocal
setlocal enableextensions enabledelayedexpansion
[url=home.php?mod=space&uid=251666]@rem[/url] 记录开始时间
set start_time=%time:~0,8%
@rem 记录器初始化
set /a "n0=0"
set /a "n1=0"
set /a "n2=0"
set /a "n3=0"
set /a "n4=0"
set /a "n5=0"
set /a "n5e=0"
set /a "n6=0"
set /a "n6e=0"
set /a "n7=0"
set /a "n8=0"
set /a "n9=0"
set /a "n10=0"
@rem 初始化powershell命令(脚本)
set "Clip_Script=add-type -as System.Windows.Forms; [windows.forms.clipboard]::GetText()"
@rem 传递并检测系统参数
set pt=%1
if not '%pt%' =='' goto next2
:next1
cls
echo;
set /p pt= 请指定待解密的pdf文件或文件夹(如:"%~dp0待解密文件.pdf" ):
if '%pt%' =='' goto next1
:next2
@rem # 脱去变量pt串中可能出现的所有引号(先强行增加引号,再去除所有引号)
set pt="%pt%"
set "pt=%pt:"=%"
if /i "%pt%" =="" goto next1
@rem # 拆分输入路径为:盘符、路径、文件名、扩展名、属性、合格路径、大小、修改时间
set Dir_i=%pt%
call :Dir_split "%Dir_i%" Dir_d Dir_p Dir_n Dir_x Dir_a Dir_f Dir_z Dir_t
if /i "%Dir_a%"=="" echo;&echo;指定的文件名含与本脚本命令相冲突的字符(如^&、^^!、%%、^^^^等特殊字符),无法往下执行,请修改文件名后再调用本脚本。&echo;请按任意键退出脚本&goto next3
rem echo Dir_i="%Dir_i%"
rem echo Dir_d="%Dir_d%"
rem echo Dir_p="%Dir_p%"
rem echo Dir_n="%Dir_n%"
rem echo Dir_x="%Dir_x%"
rem echo Dir_a="%Dir_a%"
rem echo Dir_f="%Dir_f%"
rem echo Dir_z="%Dir_z%"
rem echo Dir_t="%Dir_t%"
@rem 设定待解密的pdf所在的文件夹
set "pdfDir=%Dir_d%%Dir_p%"
@rem 删除文件名中可能出现的"_Password_Removed"
if not "%Dir_n%"=="" set Dir_n=%Dir_n:_Password_Removed=%
@rem 1.如果输入是文件夹
if /i "%Dir_a:~0,1%"=="d" (
if /i not "%Dir_n%"=="" (set "pdfList=%Dir_d%%Dir_p%%Dir_n%\*.pdf") else (set "pdfList=%Dir_d%%Dir_p%*.pdf")
set "pdfDir=%Dir_d%%Dir_p%%Dir_n%"
set "pdfFilesName=*.pdf"
)
@rem 2.如果输入是文件
if /i not "%Dir_a:~0,1%"=="d" (
@rem 2.1.扩展名转换为小写
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do call set Dir_x=!!Dir_x:%%i=%%i!!
@rem 2.2.输入是pdf文件
if /i "!Dir_x!"==".pdf" (
set "pdfList=!Dir_d!!Dir_p!!Dir_n!!Dir_x!"
set "pdfFilesName=!Dir_n!*.pdf"
)
@rem 2.3.输入不是pdf文件
if /i not "!Dir_x!"==".pdf" (
set "pdfList=!Dir_d!!Dir_p!*.pdf"
set "pdfFilesName=*.pdf"
)
)
@rem 2.4.如果不是根目前,则删除最后的反斜杠“\”
if /i "%pdfDir:~-1,1%"=="\" if /i not "%pdfDir:~-2,1%"==":" set "pdfDir=%pdfDir:~0,-1%"
@rem 2.5.测试文件夹是否真实存在
if not exist "%pdfDir%" echo;&echo;指定的文件夹"%pdfDir%"不存在&echo;请按任意键退出脚本&goto next3
@rem 2.6.如果指定的是具体的pdf文件,则首先测试该文件是否真实存在
if /i "%Dir_x%"==".pdf" (
if not exist "%pdfList%" echo;&echo;指定的pdf文件"%pdfList%"不存在&echo;请按任意键退出脚本&goto next3
)
@rem 2.7.设置log文件
if /i "%pdfDir:~-1,1%"=="\" (
set R_Su=%pdfDir%Success.log
set R_Fa=%pdfDir%Fail.log
echo 文件所在目录:%pdfDir% >"!R_Su!"
echo 文件所在目录:%pdfDir% >"!R_Fa!"
) else (
set R_Su=%pdfDir%\Success.log
set R_Fa=%pdfDir%\Fail.log
echo 文件所在目录:%pdfDir%\ >"!R_Su!"
echo 文件所在目录:%pdfDir%\ >"!R_Fa!"
)
::echo;测试成功,请按任意键退出脚本&endlocal&pause>nul&&exit /b
echo 开始时间:%start_time% >>"%R_Su%"
echo 开始时间:%start_time% >>"%R_Fa%"
echo 成功移动编辑或打印限制密码的文件:>>"%R_Su%"
echo 密码移除失败的文件:>>"%R_Fa%"
::echo;测试成功,请按任意键退出脚本&endlocal&pause>nul&&exit /b
echo;
echo;!注意!
echo;1.脚本运行期间不得使用剪贴板,
echo; 即不能有“剪切”、“复制”、“粘贴”(含对应的快捷方式)操作!!
echo; 否则结果将不可预知!!!
echo;
echo;2.脚本将忽略含特殊字符(如^&、^^!、%%、^^^^等)的文件,
echo; 这类文件不符合脚本批量处置的要求,请在DOS窗口使用命令行方式直接处置。
echo;
for /r "%pdfDir%" %%a in ("%pdfFilesName%") do (
set "p1=0"
set "error00=0"
set "error01=1"
set fpi="%%~fa"
set fpo="%%~da%%~pa%%~na_Password_Removed%%~xa"
@rem 剔除含特定字符(如^&、^^!、%%、^^^^等)的文件(冲突)
if /i "!error00!"=="0" (
echo "%%~fa"|find.exe /i "&">Nul && ( set "error00=1"&&set /a "n6=!n6!+1" ) || ( set "error01=0" )
)
if /i "!error00!"=="0" (
echo "%%~fa"|find.exe /i "!">Nul && ( set "error00=1"&&set /a "n6=!n6!+1" ) || ( set "error01=0" )
)
if /i "!error00!"=="0" (
echo "%%~fa"|find.exe /i "%">Nul && ( set "error00=1"&&set /a "n6=!n6!+1" ) || ( set "error01=0" )
)
if /i "!error00!"=="0" (
echo "%%~fa"|find.exe /i "^">Nul && ( set "error00=1"&&set /a "n6=!n6!+1" ) || ( set "error01=0" )
)
if !n6! gtr !n6e! (set /a "n6e = !n6!" &&echo; 冲突:!fpi!&&echo;&&echo; 冲突:!fpi!>>"%R_Fa%")
@rem 剔除特定文件(忽略)
if /i "!error00!"=="0" (
echo;"%%~fa"|find.exe /i "\Recovery\">Nul && ( set "error00=1"&&set /a "n5=!n5!+1" ) || ( set "error01=0" )
)
if /i "!error00!"=="0" (
echo;"%%~fa"|find.exe /i "\$Recycle.Bin\">Nul && ( set "error00=1"&&set /a "n5=!n5!+1" ) || ( set "error01=0" )
)
if /i "!error00!"=="0" (
echo;"%%~fa"|find.exe /i "_Password_Removed">Nul && ( set "error00=1"&&set /a "n5=!n5!+1" ) || ( set "error01=0" )
)
if !n5! gtr !n5e! (set /a "n5e = !n5!" &&echo; 忽略:!fpi!&&echo;&&echo; 忽略:!fpi!>>"%R_Fa%")
@rem # 脱去变量fpi\fpo串中可能出现的所有引号(先强行增加引号,再去除所有引号)
if /i "!error00!"=="0" (
set "fpi=!fpi:"=!"
set "fpo=!fpo:"=!"
)
if /i "!error00!"=="0" (
if not exist "!fpi!" (
set "error00=1"
set /a "n0=!n0!+1"
) else (
set /a "n9=!n9!+1"
echo 第 !n9! 个文件
echo 正在对 "!fpi!" 进行处置)
)
if /i "!error00!"=="0" (
call :Dir_split "!fpi!" Dir_err Dir_err Dir_err Dir_err Dir_a Dir_err Dir_err Dir_err
if /i "!Dir_a!"=="" set "error00=1"&&set /a "n5=!n5!+1"
)
if /i "!error00!"=="0" (
qpdf.exe --show-encryption "!fpi!" 2>&1 |clip.exe
)
@rem 0文件不存在
if /i "!error00!"=="0" (
powershell -sta "%Clip_Script%"|find.exe /i "No such file or directory">Nul && ( set "error00=1"&&set /a "n0=!n0!+1"&&set "p1=No such file or directory" ) || ( set "error01=0" )
)
@rem 1文件没加密
if /i "!error00!"=="0" (
powershell -sta "%Clip_Script%"|find.exe /i "File is not encrypted">Nul && ( echo; "!fpi!" 无密码。&&echo;&&set "error00=1"&&set /a "n1=!n1!+1"&&set "p1=File is not encrypted" ) || ( set "error01=0" )
)
@rem 2文件故障
if /i "!error00!"=="0" (
powershell -sta "%Clip_Script%"|find.exe /i "file is damaged">Nul && ( echo; "!fpi!" 文件故障或损坏。&&echo;&&set "error00=1"&&set /a "n2=!n2!+1"&&set "p1=file is damaged" &&echo; 故障:"!fpi!">>"%R_Fa%") || ( set "error01=0" )
)
@rem 3文件带打开密码
if /i "!error00!"=="0" (
powershell -sta "%Clip_Script%"|find.exe /i "invalid password">Nul && ( set "error00=0"&&set /a "n3=!n3!+1"&&set "p1=invalid password" ) || ( set "error01=0" )
)
@rem 4文件无打开密码,但部分限制编辑或打印功能
if /i "!error00!"=="0" (
powershell -sta "%Clip_Script%"|find.exe /i "print high resolution">Nul && ( set "error00=0"&&set /a "n4=!n4!+1"&&set "p1=print high resolution" ) || ( set "error01=0" )
)
rem echo error00="!error00!"
rem echo p1="!p1!"
rem powershell -sta "%Clip_Script%"
if /i "!p1!"=="invalid password" (
set /p ps= 请指定 "!fpi!" 打开密码:
echo;
qpdf.exe --password="!ps!" --decrypt "!fpi!" "!fpo!" >nul 2>&1
if !errorlevel! equ 0 (set /a "n8=!n8!+1"&echo; "!fpi!" 解密成功&echo;&echo "!fpi!">>"%R_Su%") else (set /a "n7=!n7!+1"&echo; "!fpi!" 解密失败???&echo;&echo 需打开密码:"!fpi!">>"%R_Fa%"))
if /i "!p1!"=="print high resolution" (
qpdf.exe --decrypt "!fpi!" "!fpo!"
if !errorlevel! equ 0 (set /a "n8=!n8!+1"&echo; "!fpi!" 解密成功&echo;&echo "!fpi!">>"%R_Su%") else (set /a "n7=!n7!+1"&echo; "!fpi!" 解密失败???&echo;&echo "!fpi!">>"%R_Fa%"))
)
set /a "n10=%n9%+%n5%+%n6%"
echo;
echo;扫描有效文件数:%n9%
echo;
echo;成功解密文件数:%n8%
echo;
echo;带打开密码文件数:%n3%
echo;
echo;只限制编辑或打印文件数:%n4%
echo;
echo;解密操作失败文件数:%n7%
echo;
echo;解密检测时出现故障(或损坏)文件数:%n2%
echo;
echo;未加密文件数:%n1%
echo;
echo;被忽略(或无效或不存在)文件数:%n5%
echo;
echo;文件名与脚本特定字符(如^&、^^!、%%、^^^^等)冲突的文件数:%n6%
echo;
echo;不存在的文件(可能是“For”指令本身特性及脚本其它未知项引发而产生不存在文件名):%n0%
echo;
echo;总检测文件数(可能存在):%n10%
echo;
echo; >>"%R_Su%"
echo; >>"%R_Fa%"
echo;共扫描了%n9%个效文件(可能共有%n10%个pdf文件) >>"%R_Su%"
echo;共扫描了%n9%个效文件(可能共有%n10%个pdf文件) >>"%R_Fa%"
@rem 耗时计算
set /a startS=%start_time:~6,2%
set /a startM=%start_time:~3,2%
set /a startH=%start_time:~0,2%
set /a totalSs=%startS%+%startM%*60+%startH%*60*60
set end_time=%time:~0,8%
set /a endS=%end_time:~6,2%
set /a endM=%end_time:~3,2%
set /a endH=%end_time:~0,2%
set /a totalSe=%endS%+%endM%*60+%endH%*60*60
set /a diff_total_S=%totalSe%-%totalSs%
if %diff_total_S% lss 0 (set /a diff_total_S=24*60*60+%totalSe%-%totalSs%)
set /a diffH_=%diff_total_S% / 3600
set /a diffM_=%diff_total_S% %% 3600
set /a diffS_=%diffM_% %% 60
set /a diffM_=%diffM_% / 60
echo 开始时间:%start_time%
echo 完成时间:%end_time%
echo 耗时:%diffH_%小时 %diffM_%分钟 %diffS_%秒
echo 完成时间:%end_time% >>"%R_Su%"
echo 耗时:%diffH_%小时 %diffM_%分钟 %diffS_%秒 >>"%R_Su%"
echo 完成时间:%end_time% >>"%R_Fa%"
echo 耗时:%diffH_%小时 %diffM_%分钟 %diffS_%秒 >>"%R_Fa%"
echo;
endlocal
echo 执行完成,按任意键(建议按"空格键")退出......
pause>nul
@rem # 退出
exit /b
:next3
endlocal
pause>nul
exit /b
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:Dir_split %Dir_i% Dir_d Dir_p Dir_n Dir_x Dir_a Dir_f Dir_z Dir_t
:: 功能:拆分输入路径为:盘符、路径、文件名、扩展名
:: 参数:%1 输入全路径
:: %2 输出:盘符
:: %3 输出:路径
:: %4 输出:文件名
:: %5 输出:扩展名
:: %6 输出:属性(文件or文件夹)
:: %7 输出:合格的路径名
:: %8 输出:文件大小
:: %9 输出:文件时间
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS
endlocal&set %2=%~d1&set %3=%~p1&set %4=%~n1&set %5=%~x1&set %6=%~a1&set %7=%~f1&set %8=%~z1&set %9=%~t1&goto :EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
endlocal
@echo on
|