Hjälp med en uppgift - script .bat

Trädvy Permalänk
Medlem
Plats
Sverige
Registrerad
Jan 2008

Hjälp med en uppgift - script .bat

Hej,

Jag är i behov av hjälp och hoppas någon i detta forum är kapabel att lösa det hela med en smart lösning.

Jag har ett ftp flöde via IIS inbyggda ftp klient på min server.

Det jag vill är att på något sätt övervaka detta flöde men vet inte riktigt hur.
Jag får filer varje dag någon gång mellan 00 och 06.00 med olika filnamn.

Min tanke är att kanske göra någon .bat fil som checkar ftp foldern. Denna .bat fil schema kör jag via Task scheduler och om den failar så görs någon form av action.

Krånglar jag till det? Det kanske finns enklare sätt?
Om detta är en bra lösning skulle jag behöva hjälp med kodningen i .bat filen då det inte är min starka sida. Tänker mig att .bat filen kanske kan faila om senaste filen i foldern är mer än 24 timmar gammal.

Tacksam för hjälp

Trädvy Permalänk
Medlem
Plats
Ängelholm
Registrerad
Mar 2010

Finns många sätt att göra det du önskar, men en BAT-fil som körs som ett schemalagt jobb låter som det enklaste att göra tror jag. Beror lite på vad du vill ska hända när en fil finns eller fattas.

Lite hjälp med googling:
https://www.google.se/#q=batch+if+file+age

Trädvy Permalänk
Medlem
Plats
Sverige
Registrerad
Jan 2008

@Zakire:

Det enda jag egentligen vill ska hända om en fil saknas är att jobbet i Taskscheduler ska misslyckas. Dvs att själva batfilen på något sätt ska ge ett error som "Taskscheduler" uppfattar?

Trädvy Permalänk
Testpilot
Plats
Göteborg
Registrerad
Nov 2002

Utöver batch, har du powershell och även externa program som t.ex. macroscheduler https://www.mjtnet.com
Jag hade kört bat enbart vid enklare uppgifter som att kopiera allt innehåll från x till y. PS har jag ingen större erfarenhet med men MSched är vad jag finner kan göra allt jag behöver dessutom snabbt och enkelt att få igång det.

Om du trisslar och trasslar med en hel del och väldigt brett, brett som att handskas med windowsfönster och program, logik & variabler, browser, filsystem, tangentbord och mus kontroll m.m. och kan tänkas behöva ha ett gui fönster till vissa fall så rekommenderar jag macroscheduler. Lätt och snabbt att prototypa med.

Trädvy Permalänk
Medlem
Plats
Sverige
Registrerad
Jan 2008

Om det finns någon vänlig själv därute som skulle kunna skapa en kod för detta, helst i cmd men powershell går också bra. Iaf en start med exempel så kan jag försöka modifiera själv. Har suttit nu hela dagen men kommer ingen vart.

Tack på förhand.

Trädvy Permalänk
Medlem
Plats
Luleå
Registrerad
Jul 2011

Hej,
Här kommer koden (ungefär iaf) (batfil).
Vi låtsas att du bara vill räkna antalet filer vilket ser enklast ut för mig just nu, annars måste du ju verifiera på nåt annat sätt att alla filer är där (typ forfiles eller så).
Iaf så räknar den antalet filer och om det blir godkänt antal (8 i mitt exempel) så returnerar den exit code 0 vilket anses som lyckat. Annars 255 vilket anses som fel.

@echo off for /f %%A in ('dir c:\ftpsite /a-d-s-h /b ^| find /v /c ""') do set cnt=%%A echo File count = %cnt% if "%cnt%"=="8" goto success exit 255 :success exit 0

Trädvy Permalänk
Medlem
Plats
Sverige
Registrerad
Jan 2008

@Brudo:

Tack för att du tog dig tid men iom att jag har olika antal filer i foldern från dag till dag så blir det problem.
Det enda jag vet är att det bara levereras filer någon gång mellan 00-06 på natten varje dag.

Det är inte akut för mig att upptäcka stopp i flödet så en kod som säger något i stil med typ:
"Finns ingen fil i denna folder som är nyare än 24h så ERROR"

Trädvy Permalänk
Medlem
Plats
Luleå
Registrerad
Jul 2011

Ok, då använder du forfiles.

forfiles /p "C:\ftpsite /s /m *.* /d -1 /C "cmd /c Echo FEL"

Kollar efter filer äldre än 1 dag (även rekursivt i undermappar. Dock kan det ju vara nåt läge att klura ut hur felhanteringen går till. Om du ska lägga det i en bat och schemalägga måste du hitta nåt snyggt sätt att returnera felkoder. Alternativt kan du ju använda forfiles att skapa en fil någonstans lokalt istället.

Trädvy Permalänk
Medlem
Plats
Sverige
Registrerad
Jan 2008

@Brudo:

Tack Brudo.

Då återstår bara "resten"

Trädvy Permalänk
Medlem
Plats
Azure
Registrerad
Aug 2011

Nu när vi har powershell på linux och bash på windows, så känns batch som ett ganska tråkigt skriptspårk att kunna.

Hade några minuter över, du borde kunna göra något vettigt av detta.

$logpath = "c:\logs\" $importeditems = Get-ChildItem -Path "c:\ftp\foo\" -Recurse $outpath = "c:\ftp\bar\" function writelog ($message,$path){ $time = get-date -Format "yyyyMMdd:HHmm" $line = $time + " | $message" | Out-File -FilePath $($path + "log.txt") -Append -Encoding utf8 } if ($importeditems){ writelog -message "New files found doing some stuff." -path $logpath foreach ($item in $importeditems){ #starta något annat eller vad du tänkt att göra mer filerna... Move-Item -Path $item.PSPath -Destination $($outpath + $item.name) writelog -message $("Done with stuff, file is moved to " + $($outpath + $item.name)) -path $logpath } }else{ #smtp skicka mail kanske? "Nattimport fungerar inte" writelog -message $("ALERT! No new files." + $($outpath + $item.name)) -path $logpath }

Dold text

write-host ((0..66)|%{if (($_+1)%3 -eq 0){[char][int]("118105107116111114064103105108098101114116115115111110046099111109"[($_-2)..$_] -join "")}}) -separator ""