2017-08-26 92 views
0

我能够使用GNUPG或Kleopatra(gpg4win)手动解密文件,但是当我运行这个批处理时,我得到0 KB输出,任何原因?下面是我的代码;解密后的0 KB输出文件

@echo off 
set LOGFILE=Log.log 
call :LOG > %LOGFILE% 
exit 
:LOG 

for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set "dt=%%a" 
set "YYYY=%dt:~0,4%" 
set "MM=%dt:~4,2%" 
set "DD=%dt:~6,2%" 
set "HH=%dt:~8,2%" 
set "Min=%dt:~10,2%" 
set "Sec=%dt:~12,2%" 
set "secret=mypassword" 

set datestamp=%YYYY%%MM%%DD% 

set origPath=D:\Encrypted\ 
set origFile=my_test_file 
set origExt=.PGP 
set origCompleteFile=%origPath%%origFile%%datestamp%%origExt% 

set destPath=D:\Encrypted\ 
set destFile=my_test_file_ddmmyyyy 
set destExt=.csv 
set destCompleteFile=%destPath%%destFile%%YYYY%-%MM%-%DD%%destExt% 

set ctaFolder=N:\Test\ 

echo Decrypt file : "%origCompleteFile%" 
echo Save decrypted file in : "%destCompleteFile%" 

rem decrypt CTA File 
gpg --batch --passphrase "%secret%" --decrypt "%origCompleteFile%" > "%destCompleteFile%" 

rem copy to CTA folder in .54 
xcopy /s/y "%destCompleteFile%" "%ctaFolder%" 

回答

0

无法将二进制数据重定向到文件中。 Windows命令行界面专为文本数据而非二进制数据设计。另外,由:LOG以下至stdout以下命令输出的所有内容都将通过批处理文件重定向到文件Log.log

GPG manual解释了此控制台应用程序的所有可用命令行选项。

它是该解密的数据写入处理标准输出或选项--output后指定的文件选项​​3210解释。

所以解决方案是简单地使用另外的选项--output而不是重定向stdout到一个文件。

gpg --batch --passphrase "%secret%" --output "%destCompleteFile%" --decrypt "%origCompleteFile%" 

整个批次代码可以被优化,以这样的代码:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 
set "secret=mypassword" 

rem Get current date in format YYYYMMDD for usage in file name (DDMMYYYY commented out). 
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "LocalDateTime=%%I" 
rem set "FileNameDate=%LocalDateTime:~6,2%%LocalDateTime:~4,2%%LocalDateTime:~0,4%" 
set "FileNameDate=%LocalDateTime:~0,8%" 

set "origPath=D:\Encrypted\" 
set "origFile=my_test_file_" 
set "origExt=.csv.gpg" 
set "origCompleteFile=%origPath%%origFile%%FileNameDate%%origExt%" 

set "destPath=D:\Encrypted\" 
set "destFile=my_test_file_" 
set "destExt=.csv" 
set "destCompleteFile=%destPath%%destFile%%FileNameDate%%destExt%" 

set "ctaFolder=N:\Test\" 

echo Decrypt file: "%origCompleteFile%" 
echo Save decrypted file in: "%destCompleteFile%" 

rem Decrypt CTA file 
gpg --batch --passphrase "%secret%" --output "%destCompleteFile%" --decrypt "%origCompleteFile%" 

rem Copy to CTA folder in .54 
%SystemRoot%\System32\xcopy.exe "%destCompleteFile%" "%ctaFolder%" /Q /Y >nul 
endlocal 

这将是当然可以直接由环境变量ctaFolder定义的文件夹中生成解密文件。