NeosVRの写真をいい感じにフォルダ分けするツール

Neosの写真フォルダ ありがちな光景

Neosの写真フォルダ、散らかりがち

私はファイル整理が苦手なので、散らかってても気にしないことにしています。
とはいえ流石に数が多くなりすぎてよくわからなくなったので、写真整理をすることにしました。

ファイル整理、多くなればなるほど細かさと丁寧さが求められる苦行の道。あまりにも私向きではなかったので、細かくて丁寧さが求められがちなことは得意な人やモノにおまかせしてしまいましょう。

いい感じになんとかしてくれるツールを作りました

というわけでNeosの写真をいい感じに月ごとに分けてくれるツールを作りました。

環境が変わってもWindowsであれば気軽に使えるように、PowerShelのスクリプトにしました。
以下のスクリプトをコピーして、パスを自分用に変更したら多分動きます。
整頓するファイルはjpgとpngしか対応してないですが、然るべきところを変更したらそれ以外の形式も扱えるので、必要であればいい感じにカスタマイズしてください。

動作までのイメージは
1. スクリプト好きな場所におく
2. スクリプトを動かすためのバッチファイルを好きな場所におく
3. スクリプトを実行する
4. 保管用フォルダに月ごとのフォルダが作られてうれしい
5. 作られた月ごとのフォルダの中に写真が再配置されてうれしい
こんな感じです。

本体は以下。

PowerShellスクリプト本体

# 保管用フォルダのパス 自分用に変えてください
$targetFolder = 'D:\picture\Neos'
$imageList = Get-ChildItem $targetFolder
try
{
    foreach($image in $imageList)
    {
        if($image.PSIsContainer)
        {
            # フォルダは除外
            continue
        }
        $extension = [System.IO.Path]::GetExtension($image.Name);
        if($image.PSIsContainer -or ($extension -ne ".jpg" -and $extension -ne ".png"))
        {
            # jpg,png以外は除外
            Write-Host "Extension :" $extension
            Write-Host "---Not covered files or directories---"
            Write-Host "Detail File Name :" $image.Name
            continue

        }
        # 拡張子なしファイル名に変換する
        $splitExtFileName =  [System.IO.Path]::GetFileNameWithoutExtension($image);

        try{
            # ファイル名を日付型に変換する
            $fileNameDateTime = [DateTime]::ParseExact($splitExtFileName,"yyyy-MM-dd HH.mm.ss", $null);
        }
        catch
        {
            Write-Host "---This filename is not valid---"
            Write-Host "Detail File Name :" $splitExtFileName
            continue
        }

        # 年と月を抜き出してディレクトリ名を作る
        $subDirectoryName = $fileNameDateTime.ToString("yyyy-MM");
        Write-Host "yyyyMMDirName:" $subDirectoryName
        $subDirectoryPath = $targetFolder + "\" + $subDirectoryName;
        Write-Host "yyyyMMDirPath:" $subDirectoryPath
        # ディレクトリの存在チェック
        if(-not(Test-Path($subDirectoryPath)))
        {
            # 存在しない場合は作成する
            New-Item $subDirectoryPath -ItemType Directory | Out-Null
        }

        # 画像の移動先のフルパスを作る
        $imagePathTo = $subDirectoryPath + "\" + $image.Name;
        # 画像を作ったパスに移動させる
        Move-Item $image.FullName $imagePathTo -ErrorAction Stop
    }

}
catch [Exception]{
    Write-Host "**** ERROR OCCURRED ****"
    $error[0] | Out-string | write-host
}

これをダブルクリックで動かすために、以下のようなbatファイルを別途作りました。
いらないかもしれないですが、私の環境ではひとまずこのbatファイルを叩くようにしています。
中身のパスは上記のスクリプトを保存したパスにしてください。

起動用batファイル

powershell -NoProfile -ExecutionPolicy Unrestricted D:\projects\powershell\NeosPhotOrganizer.ps1

私はコード内にめっちゃコメント書くタイプで、コードを見れば何をやりたいのかが書いてありますのでここでは割愛します。そういうことです。

PowerShellの感想とかやり残したこととか

初めてPowerShellのスクリプトを触りましたが、比較演算子や論理演算子が明らかに違うので、そこだけ「おや?」となったくらいで、それ以外はあんまり違和感なくスルスルと書けたのでいいなーと思いました。
効率悪いところとか粗いところはたくさんありますが、動けば正義なのです。

強いて言えば、Neosでデフォルトで保存されるファイル名の時間がUTCなので、JSTに変えたりとかできればな~とか思いますが、そんな事するくらいなら早くNeosで遊びたかったのであまりこだわらずに作りました。
ちゃちゃっと直せる方は修正点を私までこっそりおしえてください。

Neosにかぎらず、ファイルが日付の形式になっているようなものであれば大抵使えると思うので、スキあらば活用しようと思います。

また一つ快適な生活基盤を手に入れてしまったわねと思ったところで終わりにしておきます。

この記事が気に入ったらサポートをしてみませんか?