1

ネットワーク共有から多数のテキスト ファイルをコピーするために、Windows XP マシンでバッチ ファイルをスケジュールしました。次回このタスクを実行すると、ファイルは単純に上書きされます。バッチファイルは次のようになります

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

次に、Perl を使用してファイルを分析します。私が知りたいのは、ファイル名を変更せずに、ファイルがネットワーク共有からコピーされた時刻をどこかに記録して、Perlスクリプトが古いバージョンと新しいバージョンのどちらで動作しているかを知る簡単な方法があるかどうかです.ファイル。

4

3 に答える 3

5

1 つの方法として、宛先が NTFS であると仮定します。

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

これにより、それぞれが手動でコピーされ、時刻がデータ ストリーム copywhenに追加されます。データ ストリームは、NTFS ボリューム上のその場でファイルに永続的に関連付けられます。

Perl の標準ファイル ルーチンでは、パスを として渡すだけでこれを読み取ることができると確信してますC:\monitoring\files\whatever.txt:copywhen。そうでない場合は、コマンド ラインから出力を取得できますmore <"C:\monitoring\files\whatever.txt:copywhen"

于 2012-12-21T15:55:02.400 に答える
0

簡単な方法は、コピーする直前にファイルを削除することです。別のドライブからコピーされているため、時刻/日付スタンプは、ドライブにコピーされたときのはずです。それが、私にとってWindowsが常に機能する方法です。^_^

于 2012-12-22T20:21:14.113 に答える
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モジュールを使用します。

于 2012-12-21T17:09:24.320 に答える