rc-halv Skrevet 24. februar 2008 Skrevet 24. februar 2008 Heisann. Hensikten med dette scriptet er å forandre ÆÅØ osv til AEAAAO osv, og fjerne mellomrom og bytte til underscore i filnavn. Mislykket og vellykket skal registreres for hvert filbytte, men dette ser ikke ut til å virke. Har problemer med denne delen av koden: # Om $_ ikke er en mappe og $_ er ulikt det nye navnet og det nye navnet ikke finnes, skal det byttes navn if ( ! -d $_ and $_ ne $nyttnavn and ! -e $nyttnavn) { (rename $_, $nyttnavn and $vellykket++) or (print "Kunne ikke gi nytt navn til '$_' til '$nyttnavn'!\n" and $mislykket++); #Om det nye navnet finnes allerede og er ulikt $_, skal man ikke skrive over den filen } elsif ( -e $nyttnavn and $_ ne $nyttnavn ) { print "Kan ikke gi nytt navn til '$_', fordi '$nyttnavn' finnes allerede\n" and $mislykket++ or print "Kunne ikke skrive ut meldingen\n" and $mislykket++; } Hele koden: #!/usr/bin/perl #tester om man har valgt ett kommandolinjeparameter if ($#ARGV <= -1) { print "Vennligst skriv navnet på mappen(e) der det skal byttes filnavn.\n"; exit(1); } ## Angir hvilken katalog som skriptet skal utføres i. I dette tilfellet er det mappen som man velger foreach (@ARGV){ ## Setter deg i katalogen eller som tidligere angitt i $katalog, og hopper over deler av skriptet om det ikke eksiterer chdir $_ or print "Kan ikke gå til mappen '$_' fordi den ikke eksisterer eller har blitt flyttet.\n" and goto hopp_over; for( glob "*" ){ (my $nyttnavn = $_); $nyttnavn =~ s/ /_/g; $nyttnavn =~ s/æ/ae/g; $nyttnavn =~ s/ø/oe/g; $nyttnavn =~ s/å/aa/g; $nyttnavn =~ s/Æ/AE/g; $nyttnavn =~ s/Ø/OE/g; $nyttnavn =~ s/Å/AA/g; # Om $_ ikke er en mappe og $_ er ulikt det nye navnet og det nye navnet ikke finnes, skal det byttes navn if ( ! -d $_ and $_ ne $nyttnavn and ! -e $nyttnavn) { (rename $_, $nyttnavn and $vellykket++) or (print "Kunne ikke gi nytt navn til '$_' til '$nyttnavn'!\n" and $mislykket++); #Om det nye navnet finnes allerede og er ulikt $_, skal man ikke skrive over den filen } elsif ( -e $nyttnavn and $_ ne $nyttnavn ) { print "Kan ikke gi nytt navn til '$_', fordi '$nyttnavn' finnes allerede\n" and $mislykket++ or print "Kunne ikke skrive ut meldingen\n" and $mislykket++; } } #om man ikke fant mappen, kommer man hit, man er fortsatt innenfor 'foreach', så den kan fortsette hopp_over: } print $vellykket; print $mislykket; #EOF:
Torbjørn Skrevet 24. februar 2008 Skrevet 24. februar 2008 kjenner du forskjellen på $vellykket++ og ++$vellykket?
rc-halv Skrevet 25. februar 2008 Forfatter Skrevet 25. februar 2008 Nei, er ikke helt sikker. Kan du forklare meg? Vi skal øke variablene med én for hver gang.
Torbjørn Skrevet 25. februar 2008 Skrevet 25. februar 2008 prøv selv: $a=0; print $a++, "\n"; $b=0; print ++$b, "\n" det har med å gjøre når verdien av variabelen returneres, før eller etter inkrementering.
trtrtr Skrevet 27. februar 2008 Skrevet 27. februar 2008 her har du et litt modifisert script. #!/usr/bin/perl #tester om man har valgt ett kommandolinjeparameter if ( !@ARGV ) { print "Vennligst skriv navnet på mappen(e) der det skal byttes filnavn.\n"; exit(1); } my %charsToChange = ('æ' => 'ae', 'Æ' => 'AE', 'ø' => 'oe', 'Ø' => 'OE', 'å' => 'aa', 'Å' => 'AA'); foreach my $dir (@ARGV) { if ( not opendir DIR, $dir ) { print "\nProblems opening dir ($dir). Reason:", $!; next; } #loop through content in dir while ( my $file = readdir DIR ) { #add complete path my $file = $dir . "/" . $file; #skip dirs next if ( -d $file ); my $newFile = $file; my $matchesFound = 0; for my $oldChar ( keys %charsToChange ) { $newChar = $charsToChange{$oldChar}; $matchesFound += $newFile =~ s/$oldChar/$newChar/g; } #skip if no replacements were made next if ( !$matchesFound ); #skip if file already exists next if ( -e $newFile ); print "Renaming file ($file) to ($newFile)\n"; #rename returns false on failure. if ( not( rename $file, $newFile ) ) { print "Problem renaming file ($file) to ($newFile). Reason:", $!; } } closedir DIR; }
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå