PCを使ってダウンロードや作業をしていると、いつの間にかドライブ直下(D:\ など)に動画ファイルが溜まって散らかりがちですよね。
「ファイル名に作品コードや型番(例: ABC-001.mp4 や TEST_2026.mov)が付いているのに、手動でフォルダを作って移すのは面倒……」
今回はそんな悩みを一発で解決する、PowerShellを使った自動ファイル整理スクリプトをご紹介します。
今回やりたいこと
D:\直下にある動画ファイル(mp4, mov, avi, mkv, wmv)を検出- ファイル名の先頭にある「英数字」を抽出(大文字に統一)
D:\Videos\【抽出した英数字】というフォルダを自動作成- 該当する動画ファイルをそのフォルダへ自動移動
【分類の例】
・ABC-01.mp4→D:\Videos\ABC\ABC-01.mp4へ移動
・xyz123_sample.mkv→D:\Videos\XYZ123\xyz123_sample.mkvへ移動
完成スクリプト
以下のコードをコピーして使用します。
$sourceDir = "D:\"
$videosDir = "D:\Videos"
# 移動先のベースフォルダが存在しない場合は作成
if (-not (Test-Path -Path $videosDir)) {
New-Item -ItemType Directory -Path $videosDir | Out-Null
}
# 対象の動画ファイルを拡張子でフィルタリング
$videoFiles = Get-ChildItem -Path $sourceDir -File | Where-Object { $_.Extension -match "\.(mp4|mov|avi|mkv|wmv)$" }
if ($videoFiles.Count -eq 0) {
Write-Output "※ Dドライブ直下に動画ファイルが見つかりませんでした。拡張子をご確認ください。"
}
foreach ($file in $videoFiles) {
Write-Output "ファイル発見: $($file.Name)"
# 先頭の英数字を抽出
if ($file.BaseName -match "^([A-Za-z0-9]+)") {
$categoryName = $matches[1].ToUpper()
# 誤分類を防ぐため、先頭文字が2文字以上の場合のみ実行
if ($categoryName.Length -ge 2) {
$subFolder = Join-Path -Path $videosDir -ChildPath $categoryName
# 分類先フォルダがなければ新規作成
if (-not (Test-Path -Path $subFolder)) {
New-Item -ItemType Directory -Path $subFolder | Out-Null
}
# ファイルを移動
Move-Item -Path $file.FullName -Destination $subFolder -Force
Write-Output " → [$categoryName] フォルダへ移動成功"
} else {
Write-Output " → 先頭の文字が短すぎるためスキップされました ($categoryName)"
}
} else {
Write-Output " → 先頭が英数字ではないためスキップされました"
}
}
Write-Output "整理処理が完了しました。"
コードのポイント解説
1. 確実な拡張子マッチング
Where-Object { $_.Extension -match "\.(mp4|mov|avi|mkv|wmv)$" }
Get-ChildItem の引数だけでは複数の拡張子指定が難しいため、パイプラインで正規表現(-match)を使って主要な動画形式を一括取得しています。
2. 先頭の英数字を正規表現で抽出
if ($file.BaseName -match "^([A-Za-z0-9]+)") {
$categoryName = $matches[1].ToUpper()
$file.BaseName(拡張子を除いたファイル名)から先頭の英数字を取り出します。.ToUpper() で大文字に変換することで、小文字・大文字のブレで別フォルダが作成されるのを防いでいます。
3. 意図しない誤移動を防ぐガード条件
if ($categoryName.Length -ge 2)
「1.mp4」や「a.mov」のようなファイル名の場合に、1 や A といった1文字フォルダが乱立するのを防ぐため、2文字以上の英数字がある場合のみ分類するようにしています。
実行方法
- Windowsのスタートボタンを右クリックし、「ターミナル」 または 「PowerShell」 を開きます。
- 上記スクリプトをコピー&ペーストし、
Enterキーを押して実行します。
※スクリプトファイル(.ps1)として保存して実行する場合は実行ポリシーの変更が必要になる場合がありますが、ターミナルに直接貼り付けて実行する形であれば設定変更なしですぐに使えます。
カスタマイズのヒント
- 保存場所の変更: 冒頭の
$sourceDirや$videosDirのパスを変更すれば、外付けHDDやダウンロードフォルダにも使えます。 - 拡張子の追加:
\.(mp4|mov|avi|mkv|wmv|webm|ts)$のようにパイプ(|)で区切って拡張子を増やせます。 - シミュレーション(テスト実行):
Move-Itemの行の末尾に-WhatIfを追加すると、実際には移動せず「何がどこへ移動するか」のログだけを確認できます。
まとめ
手作業で行うと時間のかかる動画整理も、PowerShellを使えば数秒で自動仕分けが完了します。
ファイル名の先頭に規則性があるデータなら画像やPDFなどにも応用できますので、ぜひ試してみてください!
コメント