# ========= 設定 =========
$src = "C:\Users\ZK820471\adoctor\SWX2320-30MC_td_adoc\en\images"      # 検索元フォルダー
$dst = "C:\Users\ZK820471\adoctor\SWX2320-30MC_td_adoc\en\images\_used"      # 移動先フォルダー（なければ作成）
$listPath = "C:\Users\ZK820471\adoctor\SWX2320-30MC_td_adoc\en\images\list_used.txt"  # TXT or CSV（1行1ファイル名）

# ========= リスト読込（TXT/CSV共通） =========
# 1行1ファイル名。空行を除去、重複はユニーク化。
$names = Get-Content -Path $listPath |
         ForEach-Object { $_.Trim() } |
         Where-Object { $_ -ne "" }   |
         Select-Object -Unique

# ========= ヒット検索（再帰） =========
$hits = Get-ChildItem -Path $src -File -Recurse |
        Where-Object { $names -contains $_.Name }

Write-Host "候補件数: $($hits.Count)"
$hits | Select-Object FullName, Name | Format-Table -AutoSize

# ========= ドライラン（確認のみ）にしたい場合はここで止める =========
# return

# ========= 移動処理 =========

# 移動先フォルダーが無ければ作成
if (!(Test-Path -Path $dst)) { New-Item -ItemType Directory -Path $dst | Out-Null }

foreach ($f in $hits) {
    # 基本のターゲットパス
    $target = Join-Path $dst $f.Name

    # 同名ファイルが既にあれば連番でユニーク化
    if (Test-Path -Path $target) {
        $base = [System.IO.Path]::GetFileNameWithoutExtension($f.Name)
        $ext  = [System.IO.Path]::GetExtension($f.Name)
        $i = 1
        do {
            $target = Join-Path $dst ("{0}({1}){2}" -f $base, $i, $ext)
            $i++
        } while (Test-Path -Path $target)
    }

    # ★ Move-Item はこの1回のみ（行末まで）
    Move-Item -LiteralPath $f.FullName -Destination $target
    # Move-Item -LiteralPath $f.FullName -Destination $target -WhatIf  # ← 実行前確認したい場合はこっちを使う
}
