2014-10-16 5 views
0

Я пытаюсь синхронизировать файлы .doc, основываясь на их атрибуте DateLastModified, используя WSH и Jscript.windows WSH compare dateLastModified

У меня есть объект folderObject, называемый src, и строка в пункт назначения, называемая dstPath.

Объект src folderObject указывает на удаленный сервер. Но я попытался с обеих папок на локальном диске, с теми же результатами

var fso = WSH.CreateObject("Scripting.FileSystemObject"); 
src = fso.getFolder(srcPath); 

for(e = new Enumerator(src.files) ; !e.atEnd() ; e.moveNext()){ 

//only word docs 
if (e.item().Type == "Document Microsoft Word 97 - 2003"){ 

    try{ 
     f= fso.getFile(dstPath + e.item().Name) 

     if ((f.DateLastModified) != (e.item().DateLastModified)){ 
      WSH.echo(f.Name + "\t" + f.DateLastModified + "\t" + e.item().DateLastModified) 
      e.item().copy(dstPath); 
     } 

    } 
} 

Вот некоторые пример вывода:

test1.doc Tue Jun 10 11:10:04 UTC+0200 2014 Tue Jun 10 11:10:04 UTC+0200 2014 

, как вы можете видеть, обе даты совпадают, но оператор = до сих пор! возвращает true, и файл все равно копируется ...

Я также заметил, что typeof (file.dateLastModified) возвращает «date», но это не настоящий объект даты Jscript, поскольку я не могу выполнить f.DateLastModified.getTime () он ничего не возвращает.

Любые намеки на то, что не так?

ответ

2

Ваш

if ((f.DateLastModified) != (e.item().DateLastModified)){ 

применяет! = Оператор к двум разным (дата) объектов. Согласно docs:

значения считаются равными, если они являются идентичными строками, численно эквивалентные числа, тот же объект, идентичные булевы значения, или (если различные типы) они могут быть принуждены к одной из эти ситуации. (курсив мой)

Эти объекты не могут быть «полной» относится JScript - я не мог назвать их методы либо - но вы должны сравнить их значения, чтобы избежать ненужные копии. Я бы использовал +, чтобы сопоставить базовые миллисекунды.

Evidence:

// two different Date objects with the same value 
var d1 = new Date(1, 2, 3, 4, 5, 6, 7); 
var d2 = new Date(1, 2, 3, 4, 5, 6, 7); 
WSH.Echo("d1:", d1); 
WSH.Echo("d2:", d2); 
WSH.Echo("Different objects:"); 
WSH.Echo(" d1 == d2:", (d1 == d2).toString()); 
WSH.Echo(" d1 != d2:", (d1 != d2).toString()); 
WSH.Echo("Same (numerical) value:"); 
WSH.Echo(" +d1:", +d1); 
WSH.Echo(" +d2:", +d2); 
WSH.Echo(" d1 - d2:", d1 - d2); 
WSH.Echo(" +d1 == +d2:", (+d1 == +d2).toString()); 

выход:

d1: Sun Mar 3 04:05:06 UTC+0100 1901 
d2: Sun Mar 3 04:05:06 UTC+0100 1901 
Different objects: 
    d1 == d2: false 
    d1 != d2: true 
Same (numerical) value: 
    +d1: -2172171293993 
    +d2: -2172171293993 
    d1 - d2: 0 
    +d1 == +d2: true 
+0

Спасибо! это работает :) Я буду держать трюк + d1 в виду сделать актерский состав –

Смежные вопросы