2014-10-16 34 views
0

我想基於它們的dateLastModified屬性,使用WSH和Jscript同步.doc文件。Windows WSH比較dateLastModified

我有一個名爲src的folderObject和一個名爲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的日期 - 我不能叫他們要麼方法 - 但你需要比較他們的,以避免不必要的副本。我會用+強制對基礎毫秒進行比較。

證據:

// 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技巧來演員 – 2014-10-17 07:36:11