2012-12-21 59 views
1

我已經在Windows XP計算機上安排了一個批處理文件,以便從網絡共享複製大量文本文件。下次這個任務運行時,文件被簡單覆蓋。批處理文件是這樣的在Windows XP上覆制文件時獲取時間和日期

copy \\networkshare1\*.txt C:\monitoring\files\ 
copy \\networkshare2\*.txt C:\monitoring\files\ 

然後,我用Perl來分析文件。我想知道的是,如果有一種簡單的方法,無需更改文件名,可以在某處記錄從網絡共享中複製文件的時間,以便我的Perl腳本知道它是使用舊版還是新版文件。

+0

舊的/新的意味着一個比較,所以你必須記錄以前的狀態/時間戳/校驗和/無論以確定... – pavel

回答

5

一種方法,假設目的地是NTFS:

set dest=C:\monitoring\files\ 
for %%f in ("\\networkshare1\*.txt") do (
    copy "%%f" "%dest%" 
    echo %TIME% >"%dest%%%~nxf:copywhen" 
) 

這將複製每個手動和附加的時間到data streamcopywhen,這是永久與該文件關聯時,其在NTFS捲上原位。

相當肯定Perl的標準文件程序將允許讀通過傳遞路徑C:\monitoring\files\whatever.txt:copywhen,如果沒有可以捕獲從命令行more <"C:\monitoring\files\whatever.txt:copywhen"輸出這一回。

0

看看File::stat包。這將替換內部Perl stat命令與命名爲接口。但是,您可以使用內置的stat命令或File::stat程序包。

use File::stat; 
use feature qw(say); 

my $file_stat = stat($file_name); 
say "The following times are displayed as seconds since January 1, 1970" 
say " File Last Access time: " . $file_stat->atime; 
say " File Last Modification time: " . $file_stat->mtime; 
say " File inode Change Time: " . $file_stat->ctime; 

其中一個應該這樣做。我認爲你最好的選擇可能是mtime

如果你不想使用File::Stat使用內置stat命令:

say "The following times are displayed as seconds since January 1, 1970" 
say " File Last Access time: " . (stat $my_file)[8] 
say " File Last Modification time: " . (stat $my_file)[9]; 
say " File inode Change Time: " . (stat $my_file)[10]; 

將時間轉換成可讀的東西的人,使用Time::Piece模塊。

0

一個簡單的方法就是在複製之前刪除文件。由於它是從另一個驅動器複製的,因此時間/日期戳記應該在複製到驅動器時​​進行。這就是Windows一直爲我工作的方式。^_^