Jestem początkującym programistą PERL-A i mam spory problem: stworzyłem następujący skrypt do masowej zmiany nazwy plików:
Kod: Zaznacz cały
#!/usr/bin/perl
opendir(HU, ".");
@hu=readdir(HU);
closedir(HU);
foreach $hu(@hu)
{
if ($hu =~ /_at_/)
{
my $poz_pocz;
my $poz_konc;
my $us = 1;
$poz_pocz=index($hu, "_at_")+3;
my $czesc_nazwy= substr($hu, $poz_pocz);
#print "$czesc_nazwy \n";
for $a (0..2) #wartosc "2" oznacza liczbe
{ #znakow "_" pomniejszona o
my @znaki=index($czesc_nazwy, "_")+1; #1. oznacza to, ze gdy w
#print "@znaki oraz $us\n"; #skrypcie bedzie 2, usunie
$us=@znaki[a]; #sie 2 slowa miedzy trzema
$czesc_nazwy= substr($czesc_nazwy, $us); #znakami "_"
#print "$czesc_nazwy \n";
}
$pocz=substr($hu, 0, $poz_pocz);
@nazwa = ($pocz, $czesc_nazwy);
$nowa_nazwa=join("_", @nazwa);
#print "$pocz i $czesc_nazwy oraz @nazwa\n";
#print "nowa nazwa to $nowa_nazwa \n";
rename($hu, $nowa_nazwa);
}
}
#my $wait=<stdin>;
exit;
Kod: Zaznacz cały
222_moje_at_pale_szlugi_plik_testowy.txt
Kod: Zaznacz cały
222_moje_at_plik_testowy.txt
Kod: Zaznacz cały
222_moje_at_testowy.txt
Czy jest jakiś sposób aby skrypt nie usuwał tych plików? Myślałem nad sprawdzaniem długości zmiennej "$czesc_nazwy", ale to bez sensu, bo pliki, na których ma skrypt operować moga mieć różną długość (pczy czym na 100% większą od tych 3 podkreśleń po "_at_").
Czy jest ktoś, kto zna rozwiązanie tego problemu?
/EDIT
Być może ważnym faktem jest to, że skrypt jest uruchamiany na Windowsie XP