2017-08-26 91 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定義的文件夾中生成解密文件。