Windowsの端末であとで整理しようと思っていたスクリーンショットがフォルダ上に大量にたまってしまうことが私はよくあります。
これをいったんフォルダ分けして自分の中で何があったかわかるようにしたいと思ったので整理するためのスクリプトを作成しました。
※これを
※こうしたい(各日付フォルダに、各日に取得したスクリーンショットが含まれる)
スクリプト本体
MoveDateFolder.ps1
##########################################################
# フォルダ上のすべてのファイルを、更新日付事に選別しそれぞれのフォルダに移動する
# Usage: .\MoveDateFolder.ps1 <対象フォルダ>
# 2025/2/6
##########################################################
# 引数設定箇所
# $SourceDir: 対象ファイルのあるフォルダ.未指定の場合フォルダ
Param(
$SourceDir=(Get-Location).Path
)
# 対象フォルダ上のすべてのファイルに対して処理を実行。
# 「-File」オプションを使用してディレクトリは除外する。
foreach ($f in Get-ChildItem -File ${SourceDir}){
# 移動先フォルダを対象ファイルの更新日付にするため更新日付を取得
$Directory=$f.LastWriteTime.ToString("yyyyMMdd")
# ファイル名を取得
$Filename=$f.Name
# ファイルのフルパスを取得
$FileFull=$f.Fullname
# 移行先フォルダが存在しない場合だけ作成する。
if (!(Test-Path ${SourceDir}\${Directory}) ){
New-Item -Path ${SourceDir} -Name $Directory -ItemType "directory" > $null
}
write-output "move from $FileFull To ${SourceDir}\${Directory}\"
# フォルダ移動
move-item $FileFull ${SourceDir}\${Directory}\
}
スクリプトの使い方と仕様
PS> .\MoveDateFolder.ps1 -SourceDir <対象フォルダ>
対象フォルダ : 対象ファイルが存在するフォルダを指定してください。未指定の場合はカレントディレクトリで動作します。
- 指定したフォルダ上のすべてのファイルを直下に作成した日付フォーマットのフォルダ(yyyymmdd)に各ファイルの最終更新日時を基準に移動します。
- 操作対象フォルダの確認が入ります。確認に「Y」と入力された場合のみファイルが移動されます。
- サブフォルダおよびサブフォルダ内のファイルに対しては操作は行われません。