我正在尝试用 perl 为 rar 和 7z 的目录创建一个存档测试器,我的 7z 无法处理 rar,而且我无法为 7z 安装 rar 功能。
我借用了一个 PERL 脚本并对其进行了调整以适合 rar 使用
$unrar = "unrar"; #path to 7z.exe from 7-zip program, make sure to use \\ and not single \ in path
$filetypes_rar = "rar"; #filetypes to test, use | between types
$skipdir = "System Volume Information|$RECYCLE.BIN|corrupt"; #don't scan these directories, use | between names
open (OUT, ">>!corrupt.txt");
listdir(".");
printf ("%-79s\n", " ");
print "\n--- Done ---\n";
sleep(600);
close (OUT);
exit;
sub listdir{
my ($dir) = @_;
my ($file, @files, @list);
opendir(DIR, $dir) || return;
@files = grep { /^[^.]/} readdir(DIR);
closedir DIR;
foreach $file(sort(@files)) {
if (-d "$dir\\$file") {
if (! ($file =~/^$skipdir$/i)) {
listdir("$dir\\$file");
}
} elsif ($file =~ /\.($filetypes_rar)$/i) {
open (DATA, "\"$unrar\" t \"$dir\\$file\"|");
@list = <DATA>;
close(DATA);
$info = $list[$#list-1];
if ($info =~ /Sub items Errors: (\d+)/) {
if ($1 == 1) {
printf ("%-79s\n", substr($file,0,70).": $1 Error");
} else {
printf ("%-79s\n", substr($file,0,69).": $1 Errors");
}
print OUT "$dir\\$file\t$1\n";
if(not (-e "corrupt\\$file")) {
rename ("$dir\\$file", "corrupt\\$file");
}
} else {
printf ("%-79s\r", substr($file,0,75).": OK");
}
}
}
}
我的问题是损坏的档案和正确的工作档案的以下输出
Cannot open .\corrupttestcase.rar
No such file or directorycorrupttestcase.rar: OK
Cannot open .\ok_file.rar
抱歉,我确实需要这个才能工作,但是我的 perl 知识为零