2018年6月23日土曜日

robocopy でエラー 87がでてコピーできなくて困る

こんばんわ

今日はDELLのパソコンのデータをバックアップしようとしたら、なんだかコピーにやたら時間がかかり待てど暮らせど終わりません。パソコン使っていて待たされるのってとても変ですよね。パソコンを使ってたくさん時間がかかってしまうことを早く終わらせたいのに、ちゃんと動作させるために時間を使ってしまうのはなんだか本末転倒というやつです?実際の現場でも「プログラムを書いてテストして自動にするよりも手でやってしまったほうが早くね?」という話になることもありますが、パソコンを使って効率的にしようと思ったのになんだかすごく時間かかってしまったなんてことになりたくないですね。

まあちょっと話がそれてしまいましたが、私は、Macをバックアップするときは TimeMachineを使ってやっています。MacのParallelsで動いているWindowsのバックアップはMacをバックアップするときに、Parallelsのイメージをバックアップするようにしていてそれでよしとしています。今日話題にしているDELLのバックアップはUsersの自分のディレクトリだけrobocopyでバックアップしています。しかもみんな外付けUSBにバックアップするという古いやり方です。まあそんな感じで今日も久しぶりにrobocopy してみたところ、やったら時間がかかっていつまでたっても終わらないのでログを見てみると、以下のようなログが大量に表示されています。


2018/06/23 21:31:43 エラー 87 (0x00000057) ファイル属性を変更しています c:\users\XXXXXX\Documents\Arduino\libraries\Bridge\keywords.txt
パラメーターが間違っています。


実際にそのファイルを見てみたところ、一見問題なさそうなのですが、よーくよく見ると更新日時が空欄です。

更新日なし.PNG

ファイルのプロパティを見てみたところ、更新日時がへんです。

プロパティ.png

へんというか、日付が0なんですかね?0というよりちょっとマイナス?Windowsで0の時っていつだったか思い出せませんが、とにかくおかしいことは確かです。よくわからないので、作成日時を更新日時に設定しちゃおうと思います。

こんなPerl作ってやりました。オプションにディレクトリを指定すると再帰的に潜っていって、見つけたファイルすべて、作成日時を取得して、更新日時に設定してしまいます。すごい適当です。エラーチェックとかは各自作りこんでください(笑)

#!/usr/bin/perl
use warnings;
use strict;
use Date::Manip;
my $top_dir=$ARGV[0];

use File::Find;
find(\&process, $top_dir);

sub process{
my $filename =$_;
my $curdir=$File::Find::dir;
chdir $curdir;
my @s = stat $filename;
my $atime=$s[8];
my $ctime = $s[10];
my $mtime=$ctime;
print "$atime,$mtime,$filename\n";
utime $atime, $mtime, $filename;
}

ほら、日付が表示されるようになりました。

日付あり.png

更新日時が表示されるようになったら先ほどのエラーは出なくなりました。
ほかにもあるのかな。。。とりあえずrobocopy が終了したので良しとします。




0 件のコメント:

結局 Kindle にケースを買いました。

 こんばんわ 私、最近ほとんど外出しなくなったのですが、妻の買い物に一緒に行って、ぼけーっと待っていたり、病院に行ってぼけーっと待っていたりする機会が多くなり、なんなら家でもボケーっとしていることが非常に多くなったためか、Kindleの出番が結構ありそうです。 前回、タブレットで...