加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

批处理文件 – 批处理脚本GPG解密

发布时间:2020-12-13 22:58:10 所属栏目:Linux 来源:网络整理
导读:我正在尝试编写批处理文件来解密全部使用相同公钥加密的.gpg文件的文件夹.这是我到目前为止: @ECHO offSET outbound=C:encrypted filesSET olddir=%CD%SET password=correcthorsebatterystapleCD /d %outbound%DIR *.gpg /B tmp.txtFOR /F "tokens=*" %%F
我正在尝试编写批处理文件来解密全部使用相同公钥加密的.gpg文件的文件夹.这是我到目前为止:

@ECHO off
SET outbound=C:encrypted files
SET olddir=%CD%
SET password=correcthorsebatterystaple
CD /d %outbound%
DIR *.gpg /B > tmp.txt
FOR /F "tokens=*" %%F IN (tmp.txt) DO (
    ECHO %%F > tmplen.txt
    FOR %%L IN (tmplen.txt) DO (SET namelen=%%~zL)
    DEL tmplen.txt
    gpg --output %%F:~0,namelen-4 --batch --yes --passphrase %password% --decrypt %%F)
DEL tmp.txt
CD /d %olddir%

目前它只是打印

usage: gpg [options] [filename]

这是我第一次尝试编写Batch脚本,所以我确信这很简单.

解决方法

以下应该有效:

@ECHO off
SET password=correcthorsebatterystaple
PUSHD "C:encrypted files"
FOR /F "tokens=*" %%F IN ('DIR *.gpg /B') DO (
    gpg --output %%~nF --batch --yes --passphrase %password% --decrypt %%F)
POPD

说明:

> PUSHD和POPD用于临时操纵到另一个目录;
>不存在保存DIR输出所需的临时文本文件,因为FOR也能够解析命令的输出(IN()中的集合用”括起来,因此它被解释为命令,而不是文件规格).
>截断文件扩展名(你想用第二个临时文件和内部FOR循环做什么,至少根据我的解释),你只需要给出修饰符~n,在我们的情况下%% ~nF;你的方法不起作用,因为:

>你不能像你在namelen-4那样尝试在线数学(你需要使用一个临时变量和SET / A进行算术运算,然后delayed expansion必须是活动的);
>子字符串扩展如:~0,8不适用于FOR变量(你需要一个临时变量才能做到这一点,然后delayed expansion必须再次激活);

加成:
如果脚本输入文件名中有空格问题,您可能需要用以下命令交换gpg命令行:

gpg --output "%%~nF" --batch --yes --passphrase %password% --decrypt "%%~F"

?修饰符删除潜在的周围双引号,因此“%% ~nF”和“%% ~F”始终用双引号括起文件名.请注意,“%% F”可能无意中导致双重双引号…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读