获取在Windows XP上复制文件的时间和日期

时间:2012-12-21 14:38:33

标签: windows perl batch-file windows-xp

我已在Windows XP计算机上安排批处理文件,以从网络共享中复制大量文本文件。下次运行此任务时,文件将被覆盖。批处理文件就是这样的

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

然后我使用Perl来分析文件。我想知道的是,如果有一种简单的方法,无需更改文件名,就可以记录文件从网络共享中复制的时间,以便我的Perl脚本知道它是使用旧版本还是新版本文件。

3 个答案:

答案 0 :(得分:5)

一种方法,假设目的地是NTFS:

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

这会手动复制每个,并将时间附加到data stream copywhen,该文件在NTFS卷上就地时与文件永久关联。

非常确保Perl的标准文件例程允许通过简单地将路径传递为C:\monitoring\files\whatever.txt:copywhen来读取它,如果不是,您可以从命令行捕获输出{{1 }}

答案 1 :(得分: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模块。

答案 2 :(得分:0)

一种简单的方法是在复制之前立即删除该文件。由于它是从另一个驱动器复制的,因此时间/日期标记应该是复制到驱动器的时间。这就是Windows一直为我工作的方式。 ^ _ ^