Thread Dateien kopieren und entpacken
(8 answers)
Opened by karl34 at 2011-10-24 13:07
Was mir zuerst auffällt ist: system("cd $VerzPfad.$strAblageVer");. Kommst du von DOS/Windows?
Mit system startest du einen neuen Prozess. Das bedeutet das der Shell-Befehl cd nur in diesem Kontext ausgeführt wird. Nur bei DOS (und Windows<2000 ?) hat nur das Laufwerk einen Arbeitspfad. Bei den meisten Betriebssystem hat jeder Prozess einen eigenen Arbeitspfad. Beispiel: perl -MCwd -e 'print cwd()."\n"; system("cd PERL"); print cwd()."\n"' Willst du den Pfad für den aktuellen Prozess ändern dann nutze in perl chdir. Das ruft den entsprechenden Systembefehl auf. Weiterhin, wenn du den Pfad so zusammenführst Code (perl): (dl
)
"$VerzPfad.$strAblageVer"
Das Script überarbeitet 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 #!/usr/bin/perl use strict; use warnings; use File::Copy; # arbeiten mit Pfaden use File::Spec; my $strVerzeichnis = "Verzeichnis_A"; my $strAblageVer = "Verzeichnis_B"; # Aktueller Arbeits-Pfad my $VerzPfad = File::Spec->curdir(); # Pfad anpassen $strAblageVer=File::Spec->join($VerzPfad,$strAblageVer); unless(-d $strAblageVer) { die(qq#ERROR Directory "$strAblageVer" don't exists!\n#); } # alle ".zip" lesen my @zip_files=list_zip_files($strVerzeichnis); # exit wenn keine gefunden unless(@zip_files) { print "No ZipFiles foundn\nfertig\n"; exit(); } #zum Zielverzeichnis wechseln: chdir($strAblageVer) or die(qq#ERROR chdir "$strAblageVer" ($!)\n#); # Dateien kopeiren foreach my $name ( @zip_files ) { print "Extract: $name\n"; my $quell_file=File::Spec->join($strVerzeinis,$name); my $ziel_file=File::Spec->join($strAblageVer,$name); my $staus=copy($quell_pfad, $ziel_pfad); if($staus!=1) { warn(qq#WARNING Can't copy "$quell_file" => "$ziel_file" ($!)\n#); # rest der Schleife überspringen next(); } extract_zip($ziel_file); } print "\nfertig\n\n"; ########################################################### sub list_zip_files { my $dir=shift; unless(-d $dir) { warn(qq#WARNING Diectory "$dir" don't exsists!\n#); return (); } my @zip_list=(); if(open(my $dh, $dir)) { while(my $name=readdir($dh)) { next unless($name=~/\.zip$/); push(@zip_list, $name); } close($dh); } else { warn(qq#WARNING Can't open $dir ($!)\n#); } return @zip_list; } # entpackt die angegebene Datei im aktuellen Verzeichnis sub extract_zip { my $file=shift; unless(-f $file) { warn(qq#WARNING $file don't exists!\n#) return 0 } my $status=system("unzip", $file ); if($status!=0) { warn(qq#WARNING Can't extract "$ziel_file" ERRORCODE:($staus)\n#); } } Last edited: 2011-10-24 16:24:09 +0200 (CEST) |