Thread Dateien kopieren und entpacken (8 answers)
Opened by karl34 at 2011-10-24 13:07

topeg
 2011-10-24 16:20
#153504 #153504
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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"
dann bekommst ein Punkt zwischen den beiden. Ich denke das ist nicht gewollt.

Das Script überarbeitet
more (15.2kb):
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)

View full thread Dateien kopieren und entpacken