本帖最后由 Love0912 于 2024-10-17 16:58 编辑
先看代码:
@echo off
setlocal enabledelayedexpansion
set "acroFound=0"
:: 遍历所有磁盘
echo 程序初始化中,查询您是否已安装PDF阅读软件。。。。。
for %%d in (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 (
if exist %%d:\ (
:: 检查每个磁盘的根目录及其子目录中是否存在AcroRd32.exe
dir /b /s %%d:\AcroRd32.exe >nul 2>&1
if !errorlevel! equ 0 (
set "acroFound=1"
for /f "delims=" %%i in ('dir /b /s %%d:\AcroRd32.exe') do (
set "cx=%%i"
goto :jx :: 找到了就结束循环
)
)
)
)
:xz
cls
echo 你当前电脑未安装AcroRd PDF阅读器
echo.
echo 1 进行下载,并关闭此脚本 2 直接关闭当前脚本
echo.
:cho
set choice=
set /p choice= 请输入对应的按回车:
IF NOT "%Choice%"=="" SET Choice=%Choice:~0,1%
if /i "%choice%"=="1" goto wz
if /i "%choice%"=="2" goto end
echo 选择无效,请重新输入
echo.
goto cho
:wz
cls
start "" "https://zhaol.lanzoui.com/i1yhNf0uzje"
exit
rem 通过拖拽或输入文件名指定路径
:jx
cls
echo.
echo 二虎电脑 PDF打印管理器
echo ╔┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╗
echo.┋
echo ┋ 1、本程序用于快速批量打印PDF文件
echo ┋ 2、本程序默认使用指定的PDF阅读器(Adobe Reader)并使用默认的打印机 ┋
echo.┋ 3、本程序完全免费,旨在让您能快速完成繁琐的任务,解放双手
echo.┋ 4、如发现BUG可联系作者进行反馈。
echo.┋ 5、软件不设置版权限制,可以随意使用,但是不允许拿去卖钱!!
echo.┋
echo ┋ 作者:二虎电脑 同V
echo.╚┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╝
set "folder=%~1"
for /f "delims=" %%i in ('powershell -command "(Get-WmiObject -Class Win32Printer | Where-Object { $.Default -eq $true }).Name"') do set printer=%%i
if "%folder%"=="" set /p folder="请输入包含PDF文件的文件夹路径(支持直接将文件夹拖拽到本脚本)并按回车确认: "
rem 本脚本加密部分,需要输入密码才能继续使用本程序进行打印
setlocal enabledelayedexpansion
set InputPrompt=请输入密钥以继续:
set CorrectKeyMsg=密钥正确,继续执行...
set WrongKeyMsg=密钥错误,请重新输入或按X键退出...
set RetryPrompt=是否重新输入(Y/N)?:
set InvalidInputMsg=无效输入,请重新选择...
:PasswordLoop
set /p UserKey=!InputPrompt!
if "%UserKey%"=="52pj" (
echo !CorrectKeyMsg!
goto start
) else (
echo !WrongKeyMsg!
set /p Choice=!RetryPrompt!
if /i "%Choice%"=="Y" goto PasswordLoop
if /i "%Choice%"=="X" goto end
echo !InvalidInputMsg!
goto PasswordLoop
)
rem 指定完毕执行以下命令
:end
exit
rem 打印执行操作部分
:start
ECHO 请输入您要打印的份数(0-9,最大支持数字为9)
set cs=
set /p cs= 请输入对应的按回车:
IF NOT "%cs%"=="" SET cs=%cs:~0,1%
for /L %%i in (1,1,%cs%) do (
echo 正在执行打印操作中。。。
for %%f in ("%folder%*.pdf") do (
echo 正在打印 %%f ...
"%CX%" /t "%%f" "%printer%"
)
echo 第 %%i 次打印操作完成。
)
rem 执行完毕,反馈信息
echo.
echo 所有PDF文件打印完毕,摁任意键退出此脚本。
pause
先说下的我的编码思路:
首先检查是否安装有Adobe Reader PDF阅读器,如果有,转调JX标签,否则转调WZ标签进行下载提醒操作;因为有的PDF用的是绿化版本的不走注册表啥的,所以我这里用的是遍寻磁盘的方法,这样更精准,如果找到了则将路径保存到CX中,为打印做准备。
然后弹出简单的介绍窗口,让用户加载待打印的PDF文件夹,可以手动输入也可以采取拖拽的方式,将路径保存到FOLDER变量中。
然后是密码验证,输入正确的密码(52pj)即可进行下一步打印操作
最后就是打印部分,先输入需要打印的份数,将数据保存到变量CS中,然后执行打印操作。
语言环境:
批处理,BAT格式,ANSI编码
下面是问题:
现在遇到的问题是,除了打印功能外,其他的功能都已经成功实现落地了,但是看代码来说,我也没看出来哪里有问题,求助各位大佬,给瞅瞅怎么搞。
要求:
自己先测试一下,确定能落地了在回答,当然如果有思路也是极好的。然后给完代码后最好附带简单的说明,毕竟纯代码的话,有时候不好理解你的思路。。。
先感谢各位大佬的支援{:301_1003:}
-----------------------------------------------------
这个问题我自己攻克了,下面贴出来代码大家一起研究下看有啥不足的地方没有~
@echo off
setlocal enabledelayedexpansion
set "acroFound=0"
:: 遍历所有磁盘
echo 程序初始化中,查询您是否已安装PDF阅读软件。。。。。
for %%d in (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 (
if exist %%d:\ (
:: 检查每个磁盘的根目录及其子目录中是否存在foxit.exe
dir /b /s %%d:\foxit.exe >nul 2>&1
if !errorlevel! equ 0 (
set "acroFound=1"
for /f "delims=" %%i in ('dir /b /s %%d:\foxit.exe') do (
set CX="%%i"
title !CX!
echo 找到了程序:!CX!
::上面输出文件路径的时候需要带有引号,不然路径如果有空格就异常。
goto :jx :: 找到了就结束循环
)
)
)
)
:xz
cls
echo 你当前电脑未安装foxit PDF阅读器
echo.
echo 1 进行下载,并关闭此脚本 2 直接关闭当前脚本
echo.
:cho
set choice=
set /p choice= 请输入对应的按回车:
IF NOT "%Choice%"=="" SET Choice=%Choice:~0,1%
if /i "%choice%"=="1" goto wz
if /i "%choice%"=="2" goto end
echo 选择无效,请重新输入
echo.
goto cho
:wz
cls
start "" "https://wwpe.lanzoue.com/irMcW2crgppi"
exit
rem 通过拖拽或输入文件名指定路径
:jx
cls
echo.
echo 二虎电脑 PDF打印管理器
echo ╔┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╗
echo.┋
echo ┋ 1、本程序用于快速批量打印PDF文件
echo ┋ 2、本程序默认使用指定的PDF阅读器(Foxit)并使用默认的打印机 ┋
echo.┋ 3、本程序完全免费,旨在让您能快速完成繁琐的任务,解放双手
echo.┋ 4、如发现BUG可联系作者进行反馈。
echo.┋ 5、软件不设置版权限制,可以随意使用,但是不允许拿去卖钱!!
echo.┋ 6、请勿修改阅读器的名字,即PDF阅读器的名字必须是Foxit,否则会报错
echo.┋
echo ┋ 作者:二虎电脑 同V
echo.╚┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╝
set "folder=%~1"
for /f "delims=" %%i in ('powershell -command "(Get-WmiObject -Class Win32_Printer -Filter 'Default = True').Name"') do set printer=%%i
if "%folder%"=="" set /p folder="请输入包含PDF文件的文件夹路径(支持直接将文件夹拖拽到本脚本)并按回车确认: "
rem 本脚本加密部分,需要输入密码才能继续使用本程序进行打印
set InputPrompt=请输入密钥以继续:
set CorrectKeyMsg=密钥正确,继续执行...
set WrongKeyMsg=密钥错误,请重新输入或按X键退出...
set RetryPrompt=是否重新输入(Y/N)?:
set InvalidInputMsg=无效输入,请重新选择...
:PasswordLoop
set /p UserKey=!InputPrompt!
if "%UserKey%"=="52pj" (
echo !CorrectKeyMsg!
goto start
) else (
echo !WrongKeyMsg!
set /p Choice=!RetryPrompt!
if /i "%Choice%"=="Y" goto PasswordLoop
if /i "%Choice%"=="X" goto end
echo !InvalidInputMsg!
)
goto passwordloop
:end
exit
rem 打印执行操作部分
:start
ECHO 请输入您要打印的份数(0-9,最大支持数字为9)
set cs=
set /p cs= 请输入对应的按回车:
IF NOT "%cs%"=="" SET cs=%cs:~0,1%
for /L %%i in (1,1,%cs%) do (
echo 正在执行打印操作中。。。
for /R "%folder%" %%i in (*.pdf) do (
echo 正在打印 %%i ...
%CX% /t "%%i" "%printer%"
)
echo 第 %%i 次打印操作完成。
)
rem 执行完毕,反馈信息
echo.
echo 所有PDF文件打印完毕,摁任意键退出此脚本。
pause
taskkill /IM foxit.EXE /F
|