Avatar billede DangerDane Novice
01. august 2017 - 10:58 Der er 1 kommentar

Batch programmering der kører med og anvender dato i forbindelse med et kopi job.

Hejsa,

Jeg har en lille udfordring jeg håber i måske kan hjælpe med.

Hver dag omkring kl 0500 kører der et kopijob der kopierer en række filer, hvoraf 3 af dem er navngivet LÅÅMMDD.xxx ÅÅ er årstallet som de 2 sidste tal, MM er måneden angivet som 2 tal og DD er altid bare standard angivet som 01. Løbende henover måneden der kopieres filerne fint nok da jeg har hardcodet datoen ind i selve scriptet, men på sigt er det jo ikke holdbart hele tiden at skulle rette det til.

Men kan ikke lige selv se mig ud af hvordan jeg lige skal få det rettet til således at det tager højde for følgende situationer...

1:
Skift af måned/år, da filen så ændrer navn fra L170701 til fx L170801, eller 171201 til 180101  uden at jeg ska ind manuelt og rette filen som sagt

2:
Ved månedens afslutning skal både den forrige månedsfil og den nye månedsfil kopieres. Så både L170701 samt L170801 skal kopieres over, men [b]KUN[b] den første i måneden. Resten af tiden er det kun den for måneden aktuelle fil der skal kopieres.

Men hvordan hulan griver jeg lige det an. Selve koden jeg bruger er således

for %%I in (infdb.dat infdb.ix kunde.DAT kunde.ix L170701.DAT L170701.DIA L170701.IX L170801.DAT L170801.DIA L170801.IX perso.dat perso.ix TI*FR.DAT TI*FR.IX TILKA.DAT TILKA.IX) do copy %%I C:\bbsud1\

Er der nogen der lige kender det gyldne trick?
Avatar billede RogerWilco Seniormester
03. august 2017 - 11:01 #1
At sætte datoer ind i et batch-script er nemt nok, men at udregne gårsdagens dato vil være meget besværligt.
I dit tilfælde kan man dog snyde lidt, hvis man lagrer dato for seneste kørsel (dvs. gårsdagens kørsel) i en fil, hvilket så kræver at batch-scriptet har skriverettigheder i den mappe hvor det ligger.

Prøv dette:

@echo off
pushd %~dp0
set ndato=%date:~8,2%%date:~3,2%01
for %%I in (infdb.dat infdb.ix kunde.DAT kunde.ix L%ndato%.DAT L%ndato%.DIA L%ndato%.IX perso.dat perso.ix TI*FR.DAT TI*FR.IX TILKA.DAT TILKA.IX) do copy %%I C:\bbsud1\
for /f %%f in (senestedato.txt) do set sdato=%%f
if %date:~0,2%==01 for %%I in (L%sdato1%.DAT L%sdato1%.DIA L%sdato%.IX) do copy %%I C:\bbsud1\
echo %ndato% >senestedato.txt
popd
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester