2011-01-13 30 views
2

我正在尋找一個程序,該程序能夠通過Windows命令提取zip存檔,並且能夠在cmd上顯示進度條或百分比指示符。我想從一個Perl腳本中使用它,所以給用戶一個暗示進度需要多長時間。到目前爲止,我嘗試了7zip(http://www.7-zip.org/)和Unzip(from InfoZIP),但無法產生上述行爲。有人知道如何解決這個問題嗎?在cmd上提取zip文件進度指示器

更新: 我目前使用這種方法嘗試它:

#!/usr/bin/perl 
use strict; $|++; 
use warnings; 

use Archive::Zip; 

my $zip = Archive::Zip->new('file.zip'); 
my $total_bytes = 0; 
my $bytes_already_unzipped = 0; 

foreach my $member ($zip->members()) { 
    $total_bytes += $member->uncompressedSize(); 
} 
foreach my $member ($zip->members()) { 
    $zip->extractMember($member); 
    $bytes_already_unzipped += $member->uncompressedSize(); 
    print progress_bar($bytes_already_unzipped, $total_bytes, 25, '='); 
} 

#routine by tachyon at http://tachyon.perlmonk.org/ 
#also have a look at http://oreilly.com/pub/h/943 
sub progress_bar { 
    my ($got, $total, $width, $char) = @_; 
    $width ||= 25; $char ||= '='; 
    my $num_width = length $total; 
    sprintf "|%-${width}s| Got %${num_width}s bytes of %s (%.2f%%)\r", 
     $char x (($width-1)*$got/$total). '>', 
     $got, $total, 100*$got/+$total; 
} 

但是我有兩個問題:

  • 這種方法似乎很慢
  • 我沒有在進度條中定期更新,但僅在文件完成提取時才進行。由於我有一些大文件,系統在解壓時似乎沒有迴應
+0

不是編程.... – leppie 2011-01-13 07:39:17

+0

目前我正在試圖通過增加一個子程序來解決這個問題,因爲我無法找到一個程序。我看着存檔::提取物,我知道如何讓一個狀態欄。但我不知道在提取文件之前如何確定提取的zip文件的文件大小。 – Salo 2011-01-13 09:32:11

回答