Gå til innhold

Problemer med bruk av and og or


Anbefalte innlegg

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:

Lenke til kommentar
Videoannonse
Annonse

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;
}

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...