Batch file

Software potřebné k práci s elektronikou

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
petrfilipi
Příspěvky: 2901
Registrován: 13 zář 2005, 00:00

Batch file

#1 Příspěvek od petrfilipi »

Nazdar všem.
Není tu nějaký znalec "programování" v batch souborech?
Potřebuji spustit RAR tak, aby mi zabalil soubory *.dbf z minulého měsíce.
Tak jsem myslel, že napíšu krátký "baťák", kde:
1. Načtu aktuální měsíc a rok
2. Odečtu měsíc (a případně rok), 1. den tohoto odečteného měsíce od 00:00:00 hod bude spouštěcí čas pro RAR
3. Spustím RAR s přepínačem -ta<vypočtené datum>

Ale skončil jsem skoro dříve, než jsem začal. Rok umím odečíst, ale "zaboha" neumím odečíst měsíc, a to ani přímým odečtním 1 od měsíce (tak jak mi to funguje u roku, tak ani porovnáním aktuálního měsíce a např. čísla 9 (nebo 09).

Netušíte někdo, jak na to?

Takhle vypadá ten BAT soubor:

--------------------------------------------------------------------------------

cls
@echo off

set "_year=%date:~9,4%" rem OK
set "_month=%date:~6,2%" rem OK
set "_day=%date:~3,2%" rem OK
set "_hour=00" rem OK
set "_minute=00" rem OK
set "_second=00" rem OK

set /a "_lastyear =%_year% -1" rem OK
set /a "_lastmonth =%_month% -1" rem nefunguje

@echo on

echo %_year%
echo %_lastyear%

echo %_month%
echo %_lastmonth%

@echo off
if %_month% == 9 set "%_lastmonth%=8" rem nefunguje

@echo on
echo %_month%
echo %_lastmonth%

pause(0)


--------------------------------------------------------------------------------
petrfilipi
Příspěvky: 2901
Registrován: 13 zář 2005, 00:00

#2 Příspěvek od petrfilipi »

Tak jsem to nakonec (samozřejmě s mocnou podporou Googlu) dal. Finta je v tom, že je nutné načítat datum po jednotlivých částech a ty skládat do dnů, měsíců a let. Pak s nimi lze pracovat jako s čísly a odčítat je:

@echo off
setlocal

rem set "datum=%date:~0,13%"
set "datum=so 31.08.2018" rem jen pro zkoušení funkce
set "day1=%datum:~3,1%"
set "day2=%datum:~4,1%"
set "month1=%datum:~6,1%"
set "month2=%datum:~7,1%"
set "year1=%datum:~9,1%"
set "year2=%datum:~10,1%"
set "year3=%datum:~11,1%"
set "year4=%datum:~12,1%"

set "lastday=01"
set "hour=00"
set "minute=00"
set "second=00"

set /a Year=%year1%*1000+%year2%*100+%year3%*10+%year4%
set /a lastyear = %year%
set /a Month=%month1%*10+%month2%
set /a Day=%day1%*10+%day2%

set /a lastMonth=%month% - 1
if "%lastMonth:~1,1%"=="" SET lastMonth=0%lastMonth%
if "%lastMonth:~1,1%"=="0" SET lastMonth=12
if "%lastMonth%"=="12" SET /a lastyear=%year% - 1

set lastdatum=%lastday%%lastmonth%%lastyear%

@echo on
echo %datum%
echo %lastdatum%"
pause (0)
Odpovědět

Zpět na „Software“