2012-12-21 37 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一直为我工作的方式。^_^