Thread rmdir permission denied unter Windows XP (43 answers)
Opened by Thomas at 2009-10-16 14:20

Gast Thomas
 2009-10-22 11:03
#127238 #127238
Hallo,
heut ists leider etwas hektisch, hier ist das ganze Skript, das ich jetzt soweit habe, vielleicht kann man hier schon etwas erkennen:
Ich mach mich dann mal über lexikalische Handles schlau.

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
#!/usr/bin/perl -w
use strict;
use warnings;
use File::Copy;
# im unten eingeklammerten Bereich können die Variablen geändert werden ACHTUNG: Auch unter Windows / statt \ verwenden
##########################################################################
# wo befinden sich XML und PDF-Dateien?
my $suchpfad = "D:/aa a/_bbb/_ccc";
# wie heißt die XML-Datei?
my $xmldatei = "ready.xml";
#Wie heißt der Delimiter (eingrenzender Tag) in der XML-Datei?
my $delimiter = "<Dateiname>";
#wohin sollen die Ordner kopiert werden?
my $ziel = "H:/Perl/Skripts/aa a/Zielordner";
#########################################################################
my $xmltreffer = "0";
my $fstreffer = "0";
my $timecounter = "0";
my @delarray;
my @lesen;

push @lesen,"$suchpfad";
while (scalar @lesen) 
{
        my $verz = shift @lesen;
        opendir (VERZEICHNIS,$verz) or die "$!";
        foreach my $file (sort {$a cmp $b} readdir VERZEICHNIS) 
        {
                if (-d "$verz/$file") 
                {
              push @lesen,"$verz/$file" if $file ne '.' && $file ne '..';
            }
            elsif ($file =~ /^$xmldatei$/) 
                {  # Durch Regex Treffer ermitteln
                        print "XML-Datei: $file im Verzeichnis $verz\n";
                        print '$verz: ' . "$verz\n";
                        print '$file: ' . "$file\n";
                        open(XMLFILE, "<$verz/$file") || die "XML-Datei: $!";
                        while (<XMLFILE>)
                        {
                                #wenn Tag "<Dateiname> gefunden wird
                                if ($_ =~ "<Dateiname>")
                                {
                                        $xmltreffer++;
                                        #entferne den / des schließenden Tags 
                                        $_ =~ s/\///;
                                        #splitte nach <Dateiname> --> [<Dateiname>][filename] [<Dateiname>]
                                        my @split = split(/<Dateiname>/, $_);
                                        #loope, solange es die Datei, die jetzt im XML-Dokument gefunden wurde nicht auch im FS gibt mit einem timeout von x Sekunden.
                                        while (!(-e "$verz/$split[1]") && ($timecounter<=300))
                                        {
                                                print "$verz/$split[1] nicht gefunden.\n";
                                                sleep(1);
                                                $timecounter ++;
                                        }
                                        # falls die Datei mittlerweile existiert
                                        if (-e "$verz/$split[1]")
                                        {
                                                $fstreffer++;
                                        }
                                        $timecounter = "0";
                                }
                                
                        }
                        close (XMLFILE);
                        if (($xmltreffer eq $fstreffer) && ($xmltreffer ne 0))
                        {
                                #copy($File::Find::dir , $ziel); 
                                print "kopiere $verz/*\n";
                                #splitte das aktuelle Verzeichnis, in $array[-1] (am Ende) befindet sich dann z.B. S455_00015653
                                my @array = split(/\//, $verz);
                                #print "$array[-1]\n";
                                opendir(IN,"$verz") || die $!;
                                my @dirarray=readdir(IN);
                                close IN;
                                foreach(@dirarray)
                                {
                                        if ($_ ne "." && $_ ne "..")
                                        {
                                                print "$_\n";
                                                mkdir("$ziel/$array[-1]") unless (-e "$ziel/$array[-1]");
                                                move("$verz/$_", "$ziel/$array[-1]") or die "File move: $!";
                                        }
                                }
                                push(@delarray, "$verz");
                        }
            }
        }
        closedir VERZEICHNIS;
}
foreach(@delarray)
{
        rmdir $_ || die "remove dir: $!";
}

View full thread rmdir permission denied unter Windows XP