Gå til innhold

Noen som kan lage et lite script?


Anbefalte innlegg

Skrevet

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

Videoannonse
Annonse
Skrevet

du har hørt helt rett.

 

#!/usr/bin/perl

my $target_folder = shift or die "Please assign a target folder:\n$0 <folder>\n";

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

Skrevet
my $target_folder = shift or die "Please assign a target folder:\n$0 <folder>\n";

 

Kan du gi et eksempel , eller forklare denne? Resten funka fint.

 

 

mvh

Pantera

Skrevet

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.

Skrevet (endret)

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
Skrevet

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.

Skrevet (endret)

-e'en er fjernet (er ikke sikker på hvorfor den havnet der....skrivefeil kanskje?)

 

Bat-fila ligger i begge katalogene.

 

mvh

Pantera

Endret av Pantera
Skrevet

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

Skrevet

Da funket alt så meget bedre. Bat-fila ble kjørt, og resultatet kom frem dit jeg ville ha det.

 

Takker for all hjelp.

 

:)

 

Har nok endel å lese, ja....

 

mvh

Pantera

Skrevet

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

Skrevet

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?

Skrevet

det gjøres ved å fore URL-strengen med data på kommandolinja istedet, slik:

cgibatch.png

 

skriptet ser slik ut:

use CGI;
$cgi = new CGI;

$name = $cgi->param('name');
$alder = $cgi->param('alder');

print "Navnet er $name. Hans alder er $alder\n";

Skrevet
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

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

Skrevet

Den kjører kommandoen uansett:

 

Det er 3 filer i katalogenFound more than 10 files, executing command...

 

....og det er 3 filer i katalogen....

 

 

Pantera

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...