AIでファイル名の一括変更案を作るときは、命名規則に合うかだけでなく、変更先が重複しないか、変更しない既存ファイルへぶつからないかを確認します。名前が整った一覧でも、そのまま実行すると上書きや取り違えにつながる場合があります。
この記事では、架空の8件の変更案を、問題あり・確認保留・名前確認の候補へ分けます。実ファイルの読取りや名前変更、上書き、画像変換は行いません。成果物は、元の名前と変更先、止める理由を対応づけた計画表です。
目次
対象フォルダと、名前の扱いを先に決める
今回の例は、同じフォルダ内のファイル名だけを扱います。サブフォルダへの移動、パス全体の長さ、リンク先の更新、クラウド同期は対象外です。計算には英数字中心の架空名を使い、大文字小文字を区別しない比較を計画上のルールにします。
MicrosoftのWindows向け公式資料は、大文字小文字の区別を仮定しないこと、使えない文字、CONなどの予約名、末尾の空白やピリオドを避けることを説明しています。同時に、ファイルシステムや名前空間で条件が異なることも示しています。Microsoft:ファイルとパスの命名(新しいタブで開く)
以下はWindowsでの一般的な名前の注意を参考にした、限定した事前確認です。すべてのOS・ファイルシステム・同期サービスへ共通の有効名を保証するものではありません。実際の保存先、共有先、同期先で必要な条件を別に確認します。
変更しないファイルも、衝突確認へ含める
変更対象8件のほかに、同じ架空フォルダへreadme.txtが存在し、これは変更しない設定とします。変更予定の行だけを見ると、この既存名を見落とします。
表は横にスクロールできます
| 計画ID | 元の名前 | 変更案 | この例での確認 |
|---|---|---|---|
| F01 | report-a.txt | Report.txt | F02の変更先と大文字小文字を除いて同じ |
| F02 | report-b.txt | report.txt | F01の変更先と大文字小文字を除いて同じ |
| F03 | notes.txt | CON.txt | 予約名CONに拡張子を付けた形 |
| F04 | draft.txt | summary?.txt | 疑問符を含む |
| F05 | photo.jpg | photo.png | 拡張子が変わる。内容の変換とは別 |
| F06 | memo.txt | memo.txt | 末尾に空白がある |
| F07 | faq.txt | readme.txt | 変更しない既存ファイルと同名 |
| F08 | final.txt | final-approved.txt | この例の名前検査では問題なし |
F01とF02は、文字列が完全一致していないため見逃しやすい組です。今回の比較規則では同じ変更先として扱い、どちらも止めます。先に実行した方を残す、後の方に勝手に連番を付ける、といった修正は行いません。
F07も、元ファイルfaq.txtの内容で既存readme.txtを置き換えてよい根拠はありません。名前変更案の作成と、既存ファイルの上書き許可を分けます。F08は、この限定した検査を通っただけで、実行許可や参照先への影響確認を終えた意味ではありません。
拡張子を変える案は、名前の整形と分ける
F05のphoto.jpgをphoto.pngへ変える案は、表示する拡張子の変更です。この一覧には、画像の内容をPNGへ変換する処理はありません。名前が.pngになったことだけで、画像形式が変わったとは報告しません。
今回は拡張子変更を確認保留にします。内容を変換したい依頼なら、出力形式、画質、透過、メタデータ、元ファイル保持などを別工程で決める必要があります。名前だけをそろえる依頼に、内容変換を無断で加えないでください。
F06の末尾空白も、AIが出力した表では見えにくいことがあります。文字列を引用した表示や、末尾空白の注記を付けて確認します。確認のための表示を変えても、元の変更案そのものを黙って修正しません。
状態は、元の8件へ一つずつ対応させる
この例ではF01・F02・F03・F04・F06・F07の6件が問題あり、F05の1件が拡張子変更の確認保留、F08の1件が名前確認の候補です。変更先の重複は1組・2件です。
「6件の問題」を「6組の衝突」とは言いません。2件は同じ重複組に属し、ほかは予約名、禁止文字、末尾空白、既存名との衝突です。問題の種類と元計画IDを残すと、担当者がどの条件を直すべきか確認できます。
実務では、同じファイルが一覧へ二度入る、元の名前がすでに存在しない、別フォルダの同名を混ぜるなど、入力一覧自体の確認も必要です。元のパスや管理IDを保持し、表示名だけで別ファイルをまとめないようにします。
掲載例の名前と件数を検算する
次のPythonは、文字列の一覧だけを検査します。ファイル操作の関数は呼びません。問題のある名前を修正したり、変更を実行したりするコードではありません。
from collections import Counter
from pathlib import PurePosixPath
plans = [
("F01", "report-a.txt", "Report.txt"),
("F02", "report-b.txt", "report.txt"),
("F03", "notes.txt", "CON.txt"),
("F04", "draft.txt", "summary?.txt"),
("F05", "photo.jpg", "photo.png"),
("F06", "memo.txt", "memo.txt "),
("F07", "faq.txt", "readme.txt"),
("F08", "final.txt", "final-approved.txt"),
]
untouched = {"readme.txt"}
targets = Counter(dst.lower() for _, _, dst in plans)
reserved = {"CON", "PRN", "AUX", "NUL"}
reserved |= {f"{prefix}{n}" for prefix in ("COM", "LPT") for n in range(1, 10)}
result = {}
reasons = {}
for plan_id, src, dst in plans:
issues = []
if targets[dst.lower()] > 1:
issues.append("TARGET_DUPLICATE")
if dst.lower() in {name.lower() for name in untouched}:
issues.append("EXISTING_UNTOUCHED")
if dst.split(".", 1)[0].upper() in reserved:
issues.append("RESERVED")
if any(c in '<>:"/\\|?*' or ord(c) < 32 for c in dst):
issues.append("INVALID_CHARACTER")
if dst.endswith((" ", ".")):
issues.append("TRAILING_SPACE_OR_DOT")
reasons[plan_id] = issues
if issues:
result[plan_id] = "BLOCKED"
elif PurePosixPath(src).suffix.lower() != PurePosixPath(dst).suffix.lower():
result[plan_id] = "REVIEW_EXTENSION"
else:
result[plan_id] = "NAME_CANDIDATE"
assert result == {
"F01": "BLOCKED", "F02": "BLOCKED", "F03": "BLOCKED",
"F04": "BLOCKED", "F05": "REVIEW_EXTENSION", "F06": "BLOCKED",
"F07": "BLOCKED", "F08": "NAME_CANDIDATE",
}
assert Counter(result.values()) == {"BLOCKED": 6, "REVIEW_EXTENSION": 1, "NAME_CANDIDATE": 1}
print(result, reasons)
掲載例を実行し、別の検算でも変更先ごとに計画IDを対応づけ、Report.txt/report.txtの2件、変更しないreadme.txtとの衝突、状態別の6・1・1件を確認しました。PurePosixPathはこの例で拡張子部分を比較するために使い、実際のWindowsパスを検査したものではありません。
コードは、空の名前、全種類の予約名表記、Unicodeの正規化、名前やパスの長さ、元ファイルの存在、権限などを網羅していません。対象は表の固定した8件です。文字列の検算が通ったことを、OS上で改名できた証拠にはしません。
AIには、実行より対応表と修正案を返させる
架空の8件のファイル名変更案を事前確認してください。
同じフォルダで、大文字小文字を区別しない比較をする例です。
変更しない既存名readme.txtも衝突確認へ含めてください。
元計画ID、元の名前、変更案、問題の種類、確認事項を返してください。
変更先の重複は両行を止め、連番付与や上書きを勝手に選ばないでください。
拡張子変更を内容の形式変換と書かず、確認保留へ分けてください。
名前の確認候補を実行許可や変更完了と書かないでください。
ファイルの読み書き、改名、移動、削除、変換は行いません。
依頼文と表は手製で、AIの実行結果ではありません。修正案を採用する場合も、新しい変更先で重複と既存名を再確認します。元名と変更後の対応が失われるような置換をしないでください。
実際の変更前には、影響するリンク、参照する文書やアプリ、同期先、復元方法を確認します。名前を入れ替えるような循環や、変更先が別の変更対象の元名でもある場合は、実行順も別途設計します。今回の計画表は、その実行手順を作成・検証したものではありません。
参考資料
公式資料の確認日:2026年10月20日。名前、既存一覧、計画、判定条件、依頼文は独自の架空例です。掲載コードと独立した変更先照合をローカルで検査しました。実ファイル、AI処理、OS上の改名、内容変換、リンクや同期、権限、復元、画面表示は未検証です。
