Tips · Unlock · Batch
フォルダ内の PDF を一括でパスワード解除する
毎週届く資料など、同じ運用の PDF が複数あるとき。GUI の一括モードか CLI の unlock batch で、パスワードなしのコピーを一括作成します。
GUI
- 左メニューから Unlock を開く。
- 一括モード(フォルダ) にチェックを入れる。
- 入力フォルダ と 出力フォルダ を指定する。
- 必要なら サブフォルダを含める をオンにする。
- パスワードなしで保存 を押す。パスワード入力ダイアログが出たら入力する。
- 処理中に止めたいときは キャンセル で中断できる。
- 出力フォルダ内の PDF を開き、パスワードを聞かれないことを確認する。
CLI の基本
フォルダ内の PDF を同じパスワードで一括解除:
manapdf unlock batch .\pdfs --output-dir .\out --password "your-password" --recursive
ファイルごとにパスワードが違うとき(CSV は path,password 形式・UTF-8 BOM 可):
manapdf unlock batch .\pdfs --output-dir .\out --password-csv passwords.csv --recursive
対話入力で進めたいとき:
manapdf unlock batch .\pdfs --output-dir .\out --ask-password --recursive
unlock batch— フォルダ内の PDF を走査し、パスワードなしのコピーを--output-dirに保存します。入力 PDF は変更されません。--password-csv— 1 行につきPDFのパス,パスワード。先頭行がpath,passwordならヘッダーとして読み飛ばします。パス列はファイル名だけ(例:明細.pdf)でも、入力フォルダからの相対パスでも、フルパスでも構いません。- パスワードにカンマやダブルクォートが含まれるときは、CSV の値を
"pa""ss,word"のようにクォートします。 - 処理順はファイル名の自然順(
file2.pdfがfile10.pdfより前)です。--dry-runで対象と順番を確認できます。 --recursiveなしのとき、出力は出力フォルダ直下に元と同じファイル名で作られます。サブフォルダを含めるときは、出力側でも同じ階層構造を維持します。
実行前の確認:
manapdf unlock batch .\pdfs --output-dir .\out --recursive --dry-run
1 件でも失敗したらエラー終了にしたいときは --strict を付けます。
例1 — CSV の path 列にファイル名だけ書く
入力フォルダ直下に PDF が並んでいるとき、CSV の 1 列目はファイル名だけで十分です。
path,password
明細_202403.pdf,abc123
契約書_A社.pdf,secret99
請求書.pdf,monthly
manapdf unlock batch .\pdfs --output-dir .\out --password-csv passwords.csv --force
- CSV の
path列と、実際の PDF ファイル名が一致している必要があります(大文字小文字は Windows では区別しません)。 - サブフォルダ内の PDF には、
docs\locked.pdfのように入力フォルダからの相対パスを書きます(--recursiveを付けて実行)。
例2 — テキストファイルの上から順にパスワードを当てる
passwords.txt に 1 行 1 パスワードだけ書いてあるとき、--password-csv は行番号ではなくパスで対応するため、そのままでは使えません。ManaPDF が処理する PDF の並び(自然順)に合わせて CSV を作ってから unlock batch します。
passwords.txt の例(1 行目が 明細_202403.pdf 用、2 行目が 契約書_A社.pdf 用…):
abc123
secret99
monthly
PowerShell で CSV を生成して一括解除:
$inputDir = ".\pdfs"
$outputDir = ".\out"
$pwdFile = ".\passwords.txt"
# ManaPDF と同じ並び・同じ対象を dry-run で取得
$plan = manapdf unlock batch $inputDir --output-dir $outputDir --dry-run --json --quiet | ConvertFrom-Json
$passwords = Get-Content $pwdFile | Where-Object { $_ -match '\S' }
if ($plan.files.Count -ne $passwords.Count) {
throw "PDF $($plan.files.Count) 件とパスワード $($passwords.Count) 行が一致しません"
}
$csvLines = @("path,password")
$root = (Resolve-Path $inputDir).Path
for ($i = 0; $i -lt $plan.files.Count; $i++) {
$rel = $plan.files[$i].input.Substring($root.Length).TrimStart('\', '/')
$pass = $passwords[$i] -replace '"', '""'
if ($pass -match '[,"]') { $pass = "`"$pass`"" }
$csvLines += "$rel,$pass"
}
$csvPath = Join-Path $env:TEMP "manapdf-passwords.csv"
$csvLines | Set-Content $csvPath -Encoding utf8
manapdf unlock batch $inputDir --output-dir $outputDir --password-csv $csvPath --recursive --force
--dry-run --json— 実際には解除せず、処理対象 PDF の一覧と順番だけを JSON で返します。ここでの順番が本番のunlock batchと同じです。Get-Contentで読んだ行の並びを、上から PDF 1 件目・2 件目…に対応させます。空行は除いています。- 件数が合わないときは CSV を作らずに止めます。先に
--dry-run(テキスト出力)で PDF の並びを目視確認してください。 Get-ChildItem | Sort-Object Nameだけでは ManaPDF の自然順とずれることがあります(例:file10.pdfとfile2.pdf)。並びの基準は dry-run に合わせるのが確実です。
例3 — ファイル名からパスワードを拾って CSV を作る
ファイル名の末尾にパスワードが入っている運用(例: 明細_202403_pw-abc123.pdf)なら、PowerShell でパスワードを抜き出し、path,password の CSV を生成してから unlock batch します。
$inputDir = ".\pdfs"
$csvPath = ".\passwords.csv"
$rows = Get-ChildItem $inputDir -Filter *.pdf -File | ForEach-Object {
if ($_.Name -notmatch '_pw-(.+)\.pdf$') {
Write-Warning "パスワード形式と合わない: $($_.Name)"
return
}
$pass = $Matches[1] -replace '"', '""'
if ($pass -match '[,"]') { $pass = "`"$pass`"" }
[pscustomobject]@{ Line = "$($_.Name),$pass" }
}
"path,password", ($rows.Line) | Set-Content $csvPath -Encoding utf8
manapdf unlock batch $inputDir --output-dir .\out --password-csv $csvPath --force
_pw-の直後から拡張子の手前までをパスワードとして使う例です。社内の命名ルールに合わせて正規表現(-matchのパターン)を変えてください。- 解除後の PDF は元のファイル名のまま出力されます(パスワード部分をファイル名から除きたい場合は、別途リネームが必要です)。
- サブフォルダを含むときは
Get-ChildItem -Recurseにし、CSV の path 列には入力フォルダからの相対パスを書くようにします。
例4 — 1 ファイルずつ unlock する(CSV を使わない)
件数が少ない、またはパスワード一覧と PDF をループで直結したいときは、単体の unlock を繰り返します。出力ファイル名は入力と同じ名前にできます。
$inputDir = ".\pdfs"
$outputDir = ".\out"
$passwords = Get-Content .\passwords.txt | Where-Object { $_ -match '\S' }
$plan = manapdf unlock batch $inputDir --output-dir $outputDir --dry-run --json --quiet | ConvertFrom-Json
if ($plan.files.Count -ne $passwords.Count) { throw "件数が一致しません" }
for ($i = 0; $i -lt $plan.files.Count; $i++) {
$in = $plan.files[$i].input
$out = $plan.files[$i].output
manapdf unlock $in -o $out --password $passwords[$i] --force
}
unlock 入力.pdf -o 出力.pdf --password— 1 ファイルだけ解除します。単体コマンドに--ask-passwordはありません。- dry-run の
outputパスをそのまま使うと、unlock batchと同じ出力先・ファイル名になります。 - 件数が多いときは、例2 の CSV 生成 +
unlock batchの方が速く、途中再開もしやすいです。