PowerShell

EPUBを解凍した画像ファイルのリネーム

順番ではないファイル名

電子書籍のファイルフォーマットであるEPUBを解凍すると画像ファイルを抽出することができます。

漫画の場合は表紙から順番に並んでいない状態で解凍されました。

ファイル名が不規則

このままではzipファイルなどにまとめると順番通りにページを開くことができません。

PowerShellを使ってリネーム

手動で対応するのも面倒なので自動的にjpgファイルをリネームするPowerShellを開発しました。

リネームするjpgファイル名を抽出

# 出力ファイルのパス
$outFile = [出力ファイルフルパス]

# 出力ファイルの内容を削除
"" | Out-File $outFile -NoNewline

# XPathクエリで.jpgを含むsrc属性を取り出す
$jpgFilesXpath = "//d:img[contains(@src, '.jpg')]"

# XHTMLファイルを取得するディレクトリのパス
$dirPath = 'C:\tmp\book\out\rename'

# 指定されたディレクトリ内のすべてのXHTMLファイルを取得
$xhtmlFiles = Get-ChildItem -Path $dirPath -Filter '*.xhtml' -File -Recurse

# 名前空間の定義
$namespace = @{ d = "http://www.w3.org/1999/xhtml"}

# 各XHTMLファイルをループしてクエリを実行
foreach ($file in $xhtmlFiles) {
  # Select-Xmlコマンドでクエリを実行
  $result = Select-Xml -Path $file.FullName -XPath $jpgFilesXpath -Namespace $namespace

  # 結果をループしてファイル名をファイルに出力
  $result.Node | ForEach-Object {
  $_.src | Out-File $outFile -Append
  }
}

画像ファイルと同じフォルダに格納されている拡張子「xhtml」からjpgファイル名を抽出
[出力ファイルフルパス]は適時変更してください(テキストファイルで可)

出力結果

表紙からリネームする順番でjpgファイル名が出力されます。

リネームjpgファイル名抽出結果

抽出したjpgファイル名からリネーム

# 出力リストを取得
$fileList = Get-Content -Path [リネームjpgファイル名フルパス]

# ファイルのカウンターを設定
$i = 1

# directory_pathにはリネームしたいファイルが存在するディレクトリパスを設定してください
$directory_path = [リネームファイルフォルダフルパス]

foreach ($file in $fileList) {
  # 元のファイルのパスを取得
  $originalFilePath = Join-Path -Path $directory_path -ChildPath $file
  if (Test-Path -Path $originalFilePath) {
    
    # 新しいファイル名を指定(3桁の数字を持つ文字列にカウンター$iをフォーマットします)
    $newFileName = "A{0:D3}.jpg" -f $i
   
    # 新しいファイルのフルパスを作成
    $newFilePath = Join-Path -Path $directory_path -ChildPath $newFileName

    # ファイル名を変更
    Rename-Item -Path $originalFilePath -NewName $newFilePath

    # カウンターを増やす
    $i++
  } else {
    Write-Output "File $originalFilePath does not exist."
  }
}

[リネームファイルフォルダフルパス]で指定したファルダにあるjpgファイルをリネーム

表紙から順番にリネーム

2本目のスクリプトでAから始まるファイル名にリネームを実施した結果です。

表紙からリネーム

表紙からリネームされているのでzipにまとめても問題なく読むことができます。

【改訂新版】 Windows PowerShell ポケットリファレンス

PowerShell の基本コマンドから応用スクリプトまで、すぐ動くサンプルで学べる実践書です。
ファイル操作・条件分岐・ループ・エラーハンドリングなど、“実際に手を動かす” ことで理解が進みます。
PowerShell の基礎力と応用力を同時に高めたい人におすすめです。

おすすめポイント:

  • 動作するサンプルが豊富で理解が早い
  • 自動化に必要な基礎文法〜実践スクリプトを広くカバー
  • 初級者から中級者へのステップアップに最適

Rakuten

Amazon

Yahoo!ショッピング

  • この記事を書いた人
  • 最新記事
プロフィール用アイコン

かじ

社内SEとして15年以上、IT企画とシステム開発を担当してきました。
ガジェット好きで、実務で得たITノウハウをわかりやすく発信しています。

★…社内SE歴 15年以上
★…IT企画・開発・業務改善を経験
★…PowerShellやサーバ運用など技術記事を更新中

現場で役立つITノウハウ×ガジェットレビューを中心に更新しています。

-PowerShell