Thread rmdir permission denied unter Windows XP
(43 answers)
Opened by Thomas at 2009-10-16 14:20
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: $!"; } |