Pantera Skrevet 1. september 2004 Del Skrevet 1. september 2004 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
Torbjørn Skrevet 2. september 2004 Del Skrevet 2. september 2004 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 } Lenke til kommentar
Pantera Skrevet 2. september 2004 Forfatter Del Skrevet 2. september 2004 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 Lenke til kommentar
Torbjørn Skrevet 2. september 2004 Del Skrevet 2. september 2004 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
Pantera Skrevet 2. september 2004 Forfatter Del Skrevet 2. september 2004 Da skjønte jeg litt mer, ja. Fikk til og med scriptet til å virke. Takker. Lenke til kommentar
Torbjørn Skrevet 2. september 2004 Del Skrevet 2. september 2004 perl programmerere liker å briljere med å gjøre så mye som mulig med så lite som mulig kode. bare spør hvis det er mer du lurer på, og fortell vennene dine om oss. Lenke til kommentar
Pantera Skrevet 3. september 2004 Forfatter Del Skrevet 3. september 2004 (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 3. september 2004 av Pantera Lenke til kommentar
Torbjørn Skrevet 3. september 2004 Del Skrevet 3. september 2004 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
Pantera Skrevet 3. september 2004 Forfatter Del Skrevet 3. september 2004 (endret) -e'en er fjernet (er ikke sikker på hvorfor den havnet der....skrivefeil kanskje?) Bat-fila ligger i begge katalogene. mvh Pantera Endret 3. september 2004 av Pantera Lenke til kommentar
Torbjørn Skrevet 3. september 2004 Del Skrevet 3. september 2004 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: Lenke til kommentar
Pantera Skrevet 3. september 2004 Forfatter Del Skrevet 3. september 2004 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 Lenke til kommentar
Torbjørn Skrevet 3. september 2004 Del Skrevet 3. september 2004 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 Lenke til kommentar
356speedster Skrevet 3. september 2004 Del Skrevet 3. september 2004 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
Torbjørn Skrevet 3. september 2004 Del Skrevet 3. september 2004 det gjøres ved å fore URL-strengen med data på kommandolinja istedet, slik: 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"; Lenke til kommentar
356speedster Skrevet 3. september 2004 Del Skrevet 3. september 2004 ahhh, genialt enkelt, takker :-) Lenke til kommentar
Torbjørn Skrevet 3. september 2004 Del Skrevet 3. september 2004 (endret) bare hyggelig, tore perl -e 'print pack "B8"x4, qw/01010100 01101111 01110010 01100101/' Endret 3. september 2004 av Torbjørn Lenke til kommentar
Pantera Skrevet 3. september 2004 Forfatter Del Skrevet 3. september 2004 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
Torbjørn Skrevet 3. september 2004 Del Skrevet 3. september 2004 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
Pantera Skrevet 3. september 2004 Forfatter Del Skrevet 3. september 2004 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 Lenke til kommentar
Torbjørn Skrevet 3. september 2004 Del Skrevet 3. september 2004 hm... putt inn enda en parentes: ( ()=glob "$target_folder\\0*.txt" ) > 10 Lenke til kommentar
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å