Gå til innhold

Noen som kan lage et lite script?


Anbefalte innlegg

Hei

 

Trenger et script som sjekker en mappe som sjekker om det finnes fler enn 10 stk 0*.txt filer, og hvis det finnes fler enn 10, så skal det kjøres en kommando. Hvis mindre enn 10, skal scriptet avsluttes.

 

Hørt at Perl skulle være fint til dette. Noen som har et forslag til hvordan dette kan settes opp?

 

Har søkt litt rundt på nettet, men er helt grønn i dette emnet foreløpig.

 

 

mvh

Pantera

Lenke til kommentar
Videoannonse
Annonse

linja vil hente ut første argument fra kommandolinja,

 

hvis ikke du angir noe target directory, vil den "dø" med feilmeldingen som er ment å si at du må angi et katalognavn.

 

$0 er en spesiell variabel som inneholder navnet på perlfila som kjøres.

 

 

syntaksen for den linja er ellers noe forkortet, fullt utskrevet er det omtreng slik:

 

# @ARGV inneholder alle argumenter fra kommandolinja.
my $target_folder = shift(@ARGV)

if(!$target_folder){
 die "...bla bla bla...\n";
}

 

det rasjonalieres litt (@ARGV er default argument øverst i skriptet), og forkortes litt, die setninga evalueres kun hvis $target_folder ikke har verdi, istedet for å skrive ut en full if-setning.

Lenke til kommentar

Hmm....var visst litt kjapp. Scriptet virka ikke alikevel.

 

Satte det opp slik:

 

#FileWatch.pl

my $target_folder = ('c:\Incoming') or die "Please assign a target folder:\n$0 <folder>\n"; -e

if (glob "$target_folder/0*.txt" > 10 ){
print "Found more than 10 files, exeuting command...\n";
system(snmpTrap.bat); # command goes here
}

...som gir disse meldingene:

syntax error at FileWatch.pl line 5, near "){"

syntax error at FileWatch.pl line 8, near "}"

 

Hva er feil?

 

mvh

Pantera

Endret av Pantera
Lenke til kommentar

du har en -e der som jeg ikke vet hvor kom fra?

 

videre skal argumentet til system() være en streng, så pakk inn snmpTrap.bat i "" eller ''

 

... videre står du ikke i c:\Incoming og utfører kommandoen snmpTrap.bat, du står i den katalogen du kjører perlskriptet fra. Dvs. du sjekker om du har flere enn 10 filer 0*.txt i $target_folder, for deretter å kjøre snmpTrap.bat i den katalogen du står i og kjører perlskriptet, ikke i c:\Incoming.

 

chdir $target_folder; # vil flytte deg over i den katalogen.

Lenke til kommentar

blir litt annerledes på windows:

my $target_folder = shift or die "must specify target folder!\n";

die "'$target_folder' is not a directory!\n" unless -d $target_folder;

if(()=glob "$target_folder\\0*.txt" > 10 ){
 print "Found more than 10 files, exeuting command...\n";
 chdir $target_folder;
 system('echo "hello there!"'); # put your command here
}

 

ser slik ut hos meg:

perlting.png

Lenke til kommentar

Dette er litt off-topic, men jeg prøver:

 

Pleier å bruke Perl til å kjøre websites, og da er det enkelt å gi scriptet variabler via POST/GET og en form for "parser" som oversetter f.eks

 

http://.../scriptname.cgi?variabel1=10&variabel2=20

 

til f.eks:

 

$variabel1=$input{'variabel1'};

$variabel2=$input{'variabel2'};

 

Så til spørsmålet. Hvordan kan jeg fore scriptet med variabler fra en *.bat fil?

 

og hvordan "parses" evt dette inne i scriptet?

Lenke til kommentar
jeg skal krype til tastaturet og innrømme at koden jeg først skrev ikke var riktig.

 

man trenger:

() = glob("...") > 10

 

for å sjekke om resultatet av glob funksjonen er større enn 10

 

Det virker som scriptet starter bat-fila, uansett hvor mange filer som ligger i mappa. Prøvde å sette > 100, men bat-fila kjøres uansett.

 

 

mvh

Pantera

Lenke til kommentar
my $target_folder = shift or die "must specify target folder!\n";

die "'$target_folder' is not a directory!\n" unless -d $target_folder;

printf "Det er %i filer i katalogen", scalar ( () =  glob "$target_folder\\0*.txt" )

if(()=glob "$target_folder\\0*.txt" > 10 ){
print "Found more than 10 files, exeuting command...\n";
chdir $target_folder;
system('echo "hello there!"'); # put your command here
}

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...