Windows任务计划下PGP自动解密脚本异常及功能咨询
批处理自动执行问题解决
- 首先在你的批处理脚本第一行添加
@echo off,关闭命令行内容回显,避免输出脚本内容触发交互等待。 - 检查批处理文件编码,确保使用ANSI编码,UTF-8带BOM的编码会导致Windows批处理首行识别异常,触发回车等待。
- 若需要完全隐藏命令窗口,在Windows任务计划程序的任务设置中,选择「不管用户是否登录都要运行」,同时勾选「隐藏」选项,即可避免弹出命令提示符窗口。
密码输入弹窗问题解决
你当前的--passphrase-fd参数用法错误,该参数需要传入数字类型的文件描述符,而非直接填写密码明文,导致GnuPG无法读取到正确密码,才会触发弹窗输入。
替换为以下参数组合即可解决:
- 替换
--passphrase-fd "secretPassPhrase"为--passphrase "你的密码明文" - 新增
--pinentry-mode loopback参数,强制GnuPG不调用图形化密码输入工具,直接使用脚本传入的密码。
修正后的单文件解密命令示例:
gpg --keyring "C:\UserFolder\.openpgpstudio\keys\pubring.pkr" --secret-keyring "C:\UserFolder\.openpgpstudio\keys\secring.skr" --batch --yes --pinentry-mode loopback --passphrase "secretPassPhrase" -o "D:\FilePath\testPGP.txt" -d "D:\FilePath\testPGP.txt.pgp"
如果担心明文密码写在脚本中存在安全风险,可将密码单独存储在权限受控的文本文件中,使用--passphrase-file "C:\路径\到\密码文件.txt"参数读取密码即可。
后续问题解答
通配符批量解密实现
gpg的-d参数本身不直接支持通配符匹配,可通过Windows批处理的for循环遍历所有.pgp后缀文件实现批量解密。
输出与原文件同名的TXT文件
可以通过批处理for循环的变量参数截取原文件名,自动生成同名txt文件名,完整的批量自动解密脚本示例如下:
@echo off :: 配置PGP文件所在目录 set "PGP_FOLDER=D:\FilePath" for %%f in ("%PGP_FOLDER%\*.pgp") do ( gpg --keyring "C:\UserFolder\.openpgpstudio\keys\pubring.pkr" --secret-keyring "C:\UserFolder\.openpgpstudio\keys\secring.skr" --batch --yes --pinentry-mode loopback --passphrase "secretPassPhrase" -o "%%~dpnf.txt" -d "%%f" :: 解密完成后如需删除原加密文件,可取消下一行注释 :: del "%%f" ) exit
其中%%~dpnf会自动提取文件的盘符、路径、主文件名,拼接.txt后就和原pgp文件同名。
内容的提问来源于stack exchange,提问作者MERNboy
相关产品推荐
相关产品推荐

