Thread Archive::Zip Umlaute auf Windows
(14 answers)
Opened by bianca at 2016-05-01 10:57
Da sich Fred nicht zurück meldet habe ich erstmal eine alternative Lösung mit 7-Zip gebaut.
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 #!/usr/bin/perl use strict; use warnings; use 5.010; use Encode; ########################################################### # Def my @pfade = ("test_archive_broschüre"); # Quelle(n) my $ziel_zip = 'test.zip'; # Zieldatei my $siebenzip = 'c:/programme/7-zip/7z.exe'; # Installationsort 7-Zip my $comp_rate = 9; # Komprimierungsgrad # von 0/garnicht+schnell bis 9/stark+langsam ########################################################### # Pre say("\n\n\n".('-' x 80)."\ngeht los"); close(STDERR); # alternativ umleiten je nach Einsatzort # 7-Zip gibt Fehler auf STDERR und STDOUT aus # und da STDOUT schon geholt wird brauchen wir STDERR nicht auch noch my $output = `"$siebenzip" -h`; if ($output =~ /^7-zip \[(\d\d)\] (\d+)\.(\d+).+(\d\d\d\d)-(\d\d)-(\d\d)$/im) { say("Installierte Version von 7-Zip: $2.$3 vom $6.$5.$4 in $1 Bit Architektur"); if (!-f $ziel_zip || unlink($ziel_zip)) { $_ =~ s/\//\\/g for @pfade; my $quellen = '"'.join('" "',@pfade); $quellen .= ($quellen !~ /\\$/ && $quellen !~ /\*$/? '\\' : '') .($quellen !~ /\*\.\*$/ ? '*.*' : ''); my $kommando = join(' ',( '"'.$siebenzip.'"', 'a', # add / hinzufügen '-r', # recurse / Unterverzeichnisse einschließen "-mx=$comp_rate", # set compression Method / Komprimierungsstärke $ziel_zip, $quellen, )); $output = `$kommando`; my $regex_mit_verz = qr{ Scanning the drive: (\d+) folder([s]?), (\d+) file([s]?), (\d+) bytes(.*) Creating archive: $ziel_zip Items to compress: (\d+) Files read from disk: (\d+) Archive size: (\d+) bytes(.+) Everything is Ok }m; my $regex_ohne_verz = qr{ Scanning the drive: (\d+) file([s]?), (\d+) bytes(.*) Creating archive: $ziel_zip Items to compress: (\d+) Files read from disk: (\d+) Archive size: (\d+) bytes(.+) Everything is Ok }m; my $fertig = sub { my ($ma) = @_; my ($quelle_verz,$quelle_dateien,$quelle_bytes,$ziel_anz_gesamt,$ziel_bytes); if (scalar(@$ma) == 10) { $quelle_verz = $ma->[0]; $quelle_dateien = $ma->[2]; $quelle_bytes = $ma->[4]; $ziel_anz_gesamt = $ma->[6]; $ziel_bytes = $ma->[8]; } else { $quelle_verz = 0; $quelle_dateien = $ma->[0]; $quelle_bytes = $ma->[2]; $ziel_anz_gesamt = $ma->[4]; $ziel_bytes = $ma->[6]; } if ($quelle_verz + $quelle_dateien == $ziel_anz_gesamt) { if ($quelle_bytes) { my $rate = int(100 / $quelle_bytes * $ziel_bytes); if ($rate != 100) { say("Komprimierung erfolgte, das ZIP betraegt $rate % von der Summe der" ." Ursprungsgroesse aller Dateien ($ziel_bytes von $quelle_bytes Byte)"); } else { say("Es wurde keine (nennenswerte) Komprimierung durchgefuehrt"); } } else { say("In dem/den Quellverzeichnis/-sen wurde/-n keine Datei/-en gefunden"); if (!$ziel_anz_gesamt) { say("Das ZIP ist leer"); } } } else { say("Fehler in ".__LINE__.": $quelle_verz Verzeichnis/-se + $quelle_dateien" ." Datei/-en != $ziel_anz_gesamt Element/-e"); exit(); # die() ist hier nicht angezeigt, weil dessen Text auf STDERR # gehen würde, was wir aber oben geschlossen hatten } }; if ($output =~ $regex_mit_verz || $output =~ $regex_ohne_verz) { my @matches = map {;no strict 'refs'; $$_} 1 .. $#-; # $matches[0] = $1 $matches[1] = $2 $matches[2] = $3 usw. # Quelle: http://www.perlmonks.org/?node_id=959528 $fertig->(\@matches); } else { say("Fehler in ".__LINE__.":\n$output\n"); exit(); } } else { say("Fehler in ".__LINE__); exit(); } } else { say("Fehler in ".__LINE__); exit(); } ########################################################### # End say("Fertig\n".('-' x 80)); Das ist nur ein Gerüst. Detailliertere Fehlerabfragen etc. müssen noch vom Nutzer vorgenommen werden. Vereinfachungen, Korrekturen etc. sind herzlich Willkommen Wünsche allen einen sonnenreichen Feiertag! Editiert von bianca: Korrekturen aus dem Dialog mit MarkusH Last edited: 2016-05-07 07:51:44 +0200 (CEST) 10 print "Hallo"
20 goto 10 |