我已在Windows XP计算机上安排批处理文件,以从网络共享中复制大量文本文件。下次运行此任务时,文件将被覆盖。批处理文件就是这样的
copy \\networkshare1\*.txt C:\monitoring\files\
copy \\networkshare2\*.txt C:\monitoring\files\
然后我使用Perl来分析文件。我想知道的是,如果有一种简单的方法,无需更改文件名,就可以记录文件从网络共享中复制的时间,以便我的Perl脚本知道它是使用旧版本还是新版本文件。
答案 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一直为我工作的方式。 ^ _ ^