@echo off set PATH=D:\cygwin\bin;%PATH% set Password=hogehoge set OutputFolder=D:\MyDoc\download set InputFile=%1 set OutputFile=%OutputFolder%\%~n1 bash -c 'echo %Password% | gpg --batch --yes --passphrase-fd 0 -o %OutputFile% %InputFile%'
それぞれの行の意味
@echo off set PATH=D:\cygwin\bin;%PATH%
BATファイルからCygwinを呼び出す際に必ず必要なおまじない。
cygwin1.dll のあるパスを通しておく。
set Password=hogehoge set OutputFolder=D:\MyDoc\download
gpgで使うパスフレーズと、解凍したファイルを置くフォルダ
set InputFile=%1 set OutputFile=%OutputFolder%\%~n1
BATファイルの引数から 入力ファイル名と出力ファイル名を取り出す。
ドラッグ&ドロップされたファイル名は、BATファイルに引数(%1,%2,...)としてつけられて実行される。
⇒バッチファイルでドラッグ&ドロップの情報を取得 - その他(プログラミング・開発) 解決済み| 【OKWAVE】
変数 %1 からファイル名部分を切り出すには %~n1 とする。
⇒バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法 - みちしるべ
bash -c 'echo %Password% | gpg --batch --yes --passphrase-fd 0 -o %OutputFile% %InputFile%'
gpgコマンド実行
- --batch
- バッチとして実行
- --yes
- 質問にはすべてハイと答える(ファイルの上書き確認など)
- --passphrase-fd n
- パスフレーズを ファイルディスクリプタn (0なら標準入力)から読むようにする
- -o filename
- 出力ファイル名の指定
⇒https://www.gnupg.org/gph/de/manual/r1023.html
標準入力はシェルで起動しないと作られないので、bashから呼び出す。
ダブルクォートで呼び出すと \ でエスケープされてしまうので、シングルクォートで囲う。
わかっている問題
ファイル名に空白が入っているとエラーになる。