指定したフォルダ内のファイルをファイル更新日付によって、年¥月¥日 のフォルダに振り分けるスクリプト

2018年2月25日

この記事は最初の投稿日から16年経過しています。内容が古い可能性があります。

単一ディレクトリに大量のファイルが存在しておりそのファイルを年\月\日などのフォルダ構造で整理したい時があります。たとえばログファイルとかインターバル撮影した画像ファイルとか。。。

それを実現するソフトを探していたのですが、なかなか自分の利用形態にあうものがないため、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

未分類

Posted by toshyon