Linux   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了批处理文件 – 批处理脚本GPG解密大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_801_3@概述 我正在尝试编写批处理文件来解密全部使用相同公钥加密的.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=*
我正在尝试编写批处理文件来解密全部使用相同公钥加密的.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”可能无意中导致双重双引号…

大佬总结

以上是大佬教程为你收集整理的批处理文件 – 批处理脚本GPG解密全部内容,希望文章能够帮你解决批处理文件 – 批处理脚本GPG解密所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。