ファイル操作

指定フォルダ以下のファイルを 年月別のフォルダにコピーする

このような画像フォルダがあって...


C:\>cscript c:\study\jscript\chapter005\lesson004.js c:\study\picture //nologo
2008/01/01 00:00:00 c:\study\picture\100CDPFP\IMGA0001.JPG
2008/01/02 00:00:00 c:\study\picture\100CDPFP\IMGA0002.JPG
2008/01/03 00:00:00 c:\study\picture\100CDPFP\IMGA0003.JPG
2008/01/04 00:00:00 c:\study\picture\100CDPFP\IMGA0004.JPG
2008/01/05 00:00:00 c:\study\picture\100CDPFP\IMGA0005.JPG
2008/01/01 00:00:00 c:\study\picture\100KCA26\CA260001.JPG
2008/02/01 00:00:00 c:\study\picture\100KCA26\CA260002.JPG
2008/03/01 00:00:00 c:\study\picture\100KCA26\CA260003.JPG
2008/04/01 00:00:00 c:\study\picture\100KCA26\CA260004.JPG
2008/05/01 00:00:00 c:\study\picture\100KCA26\CA260005.JPG
2008/01/01 00:01:00 c:\study\picture\100msdcf\DSC00001.JPG
2008/01/01 00:02:00 c:\study\picture\100msdcf\DSC00002.JPG
2008/01/01 00:03:00 c:\study\picture\100msdcf\DSC00003.JPG
2008/01/01 00:04:00 c:\study\picture\100msdcf\DSC00004.JPG
2008/01/01 00:05:00 c:\study\picture\100msdcf\DSC00005.JPG
2008/02/01 00:00:00 c:\study\picture\101CDPFP\IMGA0001.JPG
2008/02/02 00:00:00 c:\study\picture\101CDPFP\IMGA0002.JPG
2008/02/03 00:00:00 c:\study\picture\101CDPFP\IMGA0003.JPG
2008/02/04 00:00:00 c:\study\picture\101CDPFP\IMGA0004.JPG
2008/02/05 00:00:00 c:\study\picture\101CDPFP\IMGA0005.JPG
2008/03/01 00:00:00 c:\study\picture\102CDPFP\IMGA0001.JPG
2008/03/02 00:00:00 c:\study\picture\102CDPFP\IMGA0002.JPG
2008/03/03 00:00:00 c:\study\picture\102CDPFP\IMGA0003.JPG
2008/03/04 00:00:00 c:\study\picture\102CDPFP\IMGA0004.JPG
2008/03/05 00:00:00 c:\study\picture\102CDPFP\IMGA0005.JPG

"¥年¥月¥日_連番.JPG" というフォルダ/ファイル名でコピーしたい


\100CDPFP\IMGA0001.JPG => \2008\01\01_00001
\100KCA26\CA260001.JPG => \2008\01\01_00002
\100msdcf\DSC00001.JPG => \2008\01\01_00003
\100msdcf\DSC00002.JPG => \2008\01\01_00004
\100msdcf\DSC00003.JPG => \2008\01\01_00005
\100msdcf\DSC00004.JPG => \2008\01\01_00006
\100msdcf\DSC00005.JPG => \2008\01\01_00007
\100CDPFP\IMGA0002.JPG => \2008\01\02_00001
\100CDPFP\IMGA0003.JPG => \2008\01\03_00001
\100CDPFP\IMGA0004.JPG => \2008\01\04_00001
\100CDPFP\IMGA0005.JPG => \2008\01\05_00001
\101CDPFP\IMGA0001.JPG => \2008\02\01_00001
\100KCA26\CA260002.JPG => \2008\02\01_00002
\101CDPFP\IMGA0002.JPG => \2008\02\02_00001
\101CDPFP\IMGA0003.JPG => \2008\02\03_00001
\101CDPFP\IMGA0004.JPG => \2008\02\04_00001
\101CDPFP\IMGA0005.JPG => \2008\02\05_00001
\102CDPFP\IMGA0001.JPG => \2008\03\01_00001
\100KCA26\CA260003.JPG => \2008\03\01_00002
\102CDPFP\IMGA0002.JPG => \2008\03\02_00001
\102CDPFP\IMGA0003.JPG => \2008\03\03_00001
\102CDPFP\IMGA0004.JPG => \2008\03\04_00001
\102CDPFP\IMGA0005.JPG => \2008\03\05_00001
\100KCA26\CA260004.JPG => \2008\04\01_00001
\100KCA26\CA260005.JPG => \2008\05\01_00001

lesson006.js


var fs = WScript.CreateObject("Scripting.FileSystemObject");
var array = new Array();
putsDis(fs, WScript.Arguments(0), array);
array.sort(function (a,b){ return (a.val > b.val) ? 1 : -1 ; });

var y_save = "";
var m_save = "";
var d_save = "";
var seq = 0;

for (var i = 0; i < array.length; i++)
{
var fileName = array[i].key;
var mtime = array[i].val;

var y = mtime.substr(0, 4);
var m = mtime.substr(6, 2);
var d = mtime.substr(9, 2);

if ((y_save != y) || (m_save != m) || (d_save != d))
{
seq = 1;
}
else
{
seq++;
}

var dirName = WScript.Arguments(1) + "\\" + y;
if (y_save != y)
{
y_save = y;
if (fs.FolderExists(dirName))
{
fs.DeleteFolder(dirName);
}
fs.CreateFolder(dirName);
}

dirName = dirName + "\\" + m;
if (m_save != m)
{
m_save = m;
if (fs.FolderExists(dirName))
{
fs.DeleteFolder(dirName);
}
fs.CreateFolder(dirName);
}

if (d_save != d)
{
d_save = d;
}

s = "00000" + seq.toString();
s = s.substr(s.length - 5, 5);

var copyName = dirName + "\\" + d + "_" + s + ".jpg";
fs.CopyFile(fileName, copyName);
}

function putsDis(fs, path, array)
{
var folder = fs.GetFolder(path);

var files = folder.Files;
var enmFile = new Enumerator(files)
for (; !enmFile.atEnd(); enmFile.moveNext())
{
var date = new Date(enmFile.item().DateLastModified);
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate();
var h = date.getHours();
var n = date.getMinutes();
var s = date.getSeconds();

y = LPad(y,"0000") + "\/";
m = LPad(m,"00") + "\/";
d = LPad(d,"00") + " ";
h = LPad(h,"00") + ":";
n = LPad(n,"00") + ":";
s = LPad(s,"00");

if (fs.GetExtensionName(enmFile.item().Path.toLowerCase()) == ".jpg")
{
array.push({key:enmFile.item().Path, val:y + m + d + h + n + s});
}
}
delete enmFile;

var subFolders = folder.SubFolders;
var enmFolder = new Enumerator(subFolders)
for (; !enmFolder.atEnd(); enmFolder.moveNext())
{
putsDis(fs, enmFolder.item().Path, array);
}
delete enmFolder;
}

function LPad(source, pad)
{
source = pad + source;
source = source.substr(source.length - pad.length, pad.length);
return source;
}

実行結果


C:\>cscript c:\study\jscript\chapter005\lesson006.js c:\study\picture c:\study\p
icture_save //nologo

C:\>cscript c:\study\jscript\chapter005\lesson004.js c:\study\picture_save //nol
ogo
2008/01/01 00:00:00 C:\study\picture_save\2008\01\01_00001.jpg
2008/01/01 00:00:00 C:\study\picture_save\2008\01\01_00002.jpg
2008/01/01 00:01:00 C:\study\picture_save\2008\01\01_00003.jpg
2008/01/01 00:02:00 C:\study\picture_save\2008\01\01_00004.jpg
2008/01/01 00:03:00 C:\study\picture_save\2008\01\01_00005.jpg
2008/01/01 00:04:00 C:\study\picture_save\2008\01\01_00006.jpg
2008/01/01 00:05:00 C:\study\picture_save\2008\01\01_00007.jpg
2008/01/02 00:00:00 C:\study\picture_save\2008\01\02_00001.jpg
2008/01/03 00:00:00 C:\study\picture_save\2008\01\03_00001.jpg
2008/01/04 00:00:00 C:\study\picture_save\2008\01\04_00001.jpg
2008/01/05 00:00:00 C:\study\picture_save\2008\01\05_00001.jpg
2008/02/01 00:00:00 C:\study\picture_save\2008\02\01_00001.jpg
2008/02/01 00:00:00 C:\study\picture_save\2008\02\01_00002.jpg
2008/02/02 00:00:00 C:\study\picture_save\2008\02\02_00001.jpg
2008/02/03 00:00:00 C:\study\picture_save\2008\02\03_00001.jpg
2008/02/04 00:00:00 C:\study\picture_save\2008\02\04_00001.jpg
2008/02/05 00:00:00 C:\study\picture_save\2008\02\05_00001.jpg
2008/03/01 00:00:00 C:\study\picture_save\2008\03\01_00001.jpg
2008/03/01 00:00:00 C:\study\picture_save\2008\03\01_00002.jpg
2008/03/02 00:00:00 C:\study\picture_save\2008\03\02_00001.jpg
2008/03/03 00:00:00 C:\study\picture_save\2008\03\03_00001.jpg
2008/03/04 00:00:00 C:\study\picture_save\2008\03\04_00001.jpg
2008/03/05 00:00:00 C:\study\picture_save\2008\03\05_00001.jpg
2008/04/01 00:00:00 C:\study\picture_save\2008\04\01_00001.jpg
2008/05/01 00:00:00 C:\study\picture_save\2008\05\01_00001.jpg

ちなみに、WSH では、ファイルの更新時刻を変更することはできない。

http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/feb07/hey0213.mspx


FileSystemObject、シェル アプリケーションオブジェクト、WMI のいずれにも、
ファイル システムのタイムスタンプを変更する機能はありません。
ただし、試しに Windows PowerShell を使用するのを厭わなければ、
この作業を実行できるだけでなく、さらにすばらしいことに、
それを最小限の労力で実行できます。