指定したフォルダ内のファイルをファイル更新日付によって、年¥月¥日 のフォルダに振り分けるスクリプト
この記事は最初の投稿日から17年経過しています。内容が古い可能性があります。
単一ディレクトリに大量のファイルが存在しておりそのファイルを年\月\日などのフォルダ構造で整理したい時があります。たとえばログファイルとかインターバル撮影した画像ファイルとか。。。
それを実現するソフトを探していたのですが、なかなか自分の利用形態にあうものがないため、Windows Script で作成してみました。
※注意)このスクリプトにはファイルの移動処理が含まれており誤動作等によってファイルを失う可能性もあります。以下のスクリプトを実行して生じた不利益について私は一切責任をとれませんので、ご自身でスクリプトの中身をよく確認の上実行してください。
次のようにして起動します。(スクリプトファイル名は、mdf.vbs )
CScript //Nologo mdf.vbs [ディレクトリ名](最後の\なし)
例)CScript //Nologo mdf.vbs D:\Tmp
たとえば、
2008/05/04 16:12 94,304 a.jpg
2008/05/05 11:05 27,658 b.jpg
2008/05/10 21:36 3,862,186 c.jpg
というファイルが存在しているディレクトリを指定して実行した場合
2008\
05\
04\
a.jpg
05\
b.jpg
10
c.jpg
という形でフォルダ作成・ファイル移動が行われます。
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
For Each sTargetFolder In WScript.Arguments
If Fs.FolderExists(sTargetFolder) Then
WScript.echo(sTargetFolder & " のファイルを整理します。")
Set oTarget=Fs.GetFolder(sTargetFolder)
For Each oFile In oTarget.Files
WScript.echo(oFile)
' 移動先ディレクトリの存在チェックと作成
' YYYY\MM\DD という形式でフォルダを作成する。
sFdc = oFile.DateLastModified
sYear = mid(sFdc,1,4)
sMonth = mid(sFdc,6,2)
sDay = mid(sFdc,9,2)
sYearFolder = sTargetFolder & "\" & sYear
If Not Fs.FolderExists(sYearFolder) Then
Fs.CreateFolder(sYearFolder)
WScript.echo(sYearFolder & " を作成しました。")
End If
sMonthFolder = sYearFolder & "\" & sMonth
If Not Fs.FolderExists(sMonthFolder) Then
Fs.CreateFolder(sMonthFolder)
WScript.echo(sMonthFolder & " を作成しました。")
End If
sDayFolder = sMonthFolder & "\" & sDay
If Not Fs.FolderExists(sDayFolder) Then
Fs.CreateFolder(sDayFolder)
WScript.echo(sDayFolder & " を作成しました。")
End If
' ファイルの移動
WScript.echo(" -> " & Fs.BuildPath(sDayFolder, oFile.Name))
If Fs.FileExists(Fs.BuildPath(sDayFolder, oFile.Name)) Then
WScript.echo(" すでにファイルが存在しています。(" & Fs.BuildPath(sDayFolder, oFile.Name) & ")")
'何もしない。
Else
oFile.Move(sDayFolder & "\")
WScript.echo(" 移動しました。")
End If
Next
End If
Next