Batch file-ban hivatkozás aktuális dátumra
2018-05-28T13:37:59+02:00
2018-06-01T08:14:46+02:00
2022-08-11T03:45:29+02:00
vaczak
Sziasztok! Kérem nézzétek el,teljesen hozzá nem értő vagyok. Íme a .bat eddigi parancssor:
cd d:\temp\ohmie
OHMExport.exe /p ExportAszaly /f d:\Aszaly\letoltAszaly.csv /k "2018.05.08 00:01" /z "2018.05.09 00:01"
pause
k-kezdő időpont
z-záró időpont
Azt szeretném kérdezni, hogyan lehet megadni, hogy a záróidőpont az éppen aktuális dátum és idő legyen, a kezdő pedig például az (aktuális dátum és idő)-2nap?
Valami ilyen csak működő formában:
cd d:\temp\ohmie
OHMExport.exe /p ExportAszaly /f d:\Aszaly\letoltAszaly.csv /k "MOST-2NAP" /z "MOST"

Lehetséges egyáltalán? Vagy ezt az alkalmazáson belül kellene megfogalmazni?
Előre is köszönöm a segítséget!
Mutasd a teljes hozzászólást!
A %1 az első parancssori argumentum, amit átadsz a .bat fájlnak. HAME ötlete annyi, hogy a .bat futtatásakor mögéírod te magad a dátumot, de a 00:01-et már a fájl fűzi hozzá (kevesebb gépelés).

Pl.

a.bat: @echo "Hello %1!" meghívás: a.bat Pistike eredmény: "Hello Pistike!"
Én amúgy innen válogatnék: How to get yesterday's date in batch file? meg a duplikátumos megjegyzésben hivatkozott másik kérdésből (most így jobban megnézve, inkább csak onnan).
A VBScriptes megoldások a legrobosztusabbak, mert a rendszerre bízzák a dátumkalkulációt, szökőévestül, mindenestül. Pl. ez: how to get yesterday's date in a batch file
Ha tisztán .bat kéne, akkor marad a matematika, amikor a nap "alulcsordul", akkor ki kell találni, hogy milyen hosszú hónap volt előzőleg, és ennek keretében foglalkozni a szökőévekkel vagy csökkenteni akár az évszámot is. Ilyet is találhatsz mindkét hivatkozott topikban.
Mutasd a teljes hozzászólást!

  • Szia!

    Az aktuális dátumot meg tudod adni neki a %date% kifejezéssel.
    Szép módszer szerintem nincs a két nappal ezelőtti dátum megadására, neten is körbenézve csak ronda találatok voltak.

    Powershell játszik a feladatnál?

    Üdv,
    G.
    Mutasd a teljes hozzászólást!
  • Köszönöm a választ! Más forrásból ilyen megoldást javasoltak, ami viszont csak aktuális adatok lekérdezését teszi lehetővé és nem kér le adatot visszamenőleg. A batch elején megadja a változókat:
    @SET Today=%Date: =0%
    @SET Year=%Today:~0,4%
    @SET Month=%Today:~5,2%
    @SET Day=%Today:~8,2%
    @SET Act=%Time: =0%
    @SET Hour=%Act:~0,2%
    @SET Minute=%Act:~3,2%

    majd így alakul a sor:
    i:\OHMIE\OHMExport.exe /p ExportAszaly /k "%year%.%month%.%day% %Hour%:00" /z "%year%.%month%.%day% %Hour%:59" /f i:\a850%year%%month%%day%_%Hour%%Minute%.csv
    és itt dátum és időpont szerint menti el.

    Sajnos Powershell nem játszik.
    Mutasd a teljes hozzászólást!
  • Na igen, ez elég ronda így szerintem :)

    Ha már így külön ki vannak vagdosva a különböző időszakok, akkor innen tudsz már számolni is akár velük.

    set /a ket_nappal_ezelott=%day%-2
    Az /a kapcsolóval tudsz aritmetikai műveleteket csinálni.

    Mi a gond ezzel?

    Amennyiben másodikán futtatod, a napból kivonsz kettőt, akkor a dátum pl.: 2018.05.00 lesz, ami nem olyan jó.
    Változhat, hogy milyen formázásban jön vissza a dátum, más gépen nem biztos, hogy pont ugyanazokon a helyiértéken lesznek a naphoz tartozó karakterek.

    Ha csak a batch játszik, akkor lehet neten találni még összetettebb megoldásokat, vagy akár csak egy functiont meghívni akár pythonban akár powershellben, akár bármiben, ami visszaadja a megfelelő dátumot.
    Vagy tényleg a programon belül le lehetne kezelni. - jó dolog a paraméterek átadása, kár lenne ezzel csökkenteni a program rugalmasságát.

    G.
    Mutasd a teljes hozzászólást!
  • és ha így adnád meg:

    OHMExport.exe /p ExportAszaly /f d:\Aszaly\letoltAszaly.csv /k "%1 00:01" /z "%date% 00:01"
    majd a batchet így hívnád meg :
    a <kezdeti dátum> azaz a konkrét példádnál:  a 2018.05.08

    persze ha az OHMExport nem tudja kezelni a különböző dátumformátokat akkor a %date%-kal probléma lesz azokon a gépeken, ahol a rendszerbeállítás nem YYYY.MM.DD
    Mutasd a teljes hozzászólást!
  • Ronda szerintem is, de ez van ha egyszer nem értek hozzá :D

    Nem teljesen értem mire is gondoltál ezzel:

    Ha csak a batch játszik, akkor lehet neten találni még összetettebb megoldásokat, vagy akár csak egy functiont meghívni akár pythonban akár powershellben, akár bármiben, ami visszaadja a megfelelő dátumot

    Powershellben kellene írni egy functiont a problémás 2 nappal korábbi dátumra és arra hivatkozni batchben?
    A programon belüli kezeléssel viszont az a gondom, hogy készen kaptam és nem sok lehetőség van a fejlesztésre, próbálom "házon belül" megoldani.
    Mindenképp köszönöm a segítséged, RESPECT!
    Mutasd a teljes hozzászólást!
  • Köszönöm a válaszod, de meg tudnád mondani ez mit jelképez?

    k "%1 00:01"
    Mutasd a teljes hozzászólást!
  • A dátum rendszerbeállítása nem lenne gond, mivel csak egy szerveren futna folyamatosan és gyűjtené napi szinten az utolsó két nap adatait. Viszont ha csak nagyon összetett megoldás létezik erre, akkor lehet inkább eltekintek a biztonságot jelentő átfedő napoktól és csak egy-egy napnyi adatok kérek le.
    Mutasd a teljes hozzászólást!
  • A %1 az első parancssori argumentum, amit átadsz a .bat fájlnak. HAME ötlete annyi, hogy a .bat futtatásakor mögéírod te magad a dátumot, de a 00:01-et már a fájl fűzi hozzá (kevesebb gépelés).

    Pl.

    a.bat: @echo "Hello %1!" meghívás: a.bat Pistike eredmény: "Hello Pistike!"
    Én amúgy innen válogatnék: How to get yesterday's date in batch file? meg a duplikátumos megjegyzésben hivatkozott másik kérdésből (most így jobban megnézve, inkább csak onnan).
    A VBScriptes megoldások a legrobosztusabbak, mert a rendszerre bízzák a dátumkalkulációt, szökőévestül, mindenestül. Pl. ez: how to get yesterday's date in a batch file
    Ha tisztán .bat kéne, akkor marad a matematika, amikor a nap "alulcsordul", akkor ki kell találni, hogy milyen hosszú hónap volt előzőleg, és ennek keretében foglalkozni a szökőévekkel vagy csökkenteni akár az évszámot is. Ilyet is találhatsz mindkét hivatkozott topikban.
    Mutasd a teljes hozzászólást!
  • Szia!

    Rövid minta, copyright stackoverflow :D

    Parancssorban tesztelgetésre:

    "psCommand=powershell -noprofile -command "(get-date).AddDays(-2).ToString('yyyy-MM-dd')"" for /f "delims=" %I in ('%psCommand%') do set "dt=%I" echo %dt% batch fájlban: "psCommand=powershell -noprofile -command "(get-date).AddDays(-2).ToString('yyyy-MM-dd')"" for /f "delims=" %%I in ('%psCommand%') do set "dt=%%I" echo %dt%
    A második esetben a for parancs sorában meg kell duplázni a % jeleket (For /f - Loop through text - Windows CMD - SS64.com)

    vagy lehet még értéket elkapni batch-ben az exit code-al is, lehet találni arra is példákat neten.

    G.
    Mutasd a teljes hozzászólást!
  • a %<szám> a batch meghívásakor megadott paraméter sorszámát adja meg. Tehát a %1 az elsőt, %2 a másodikat, undzovajter.
    Tehát ha így hívod meg a batchedet, hogy

    a.bat 2018.05.08

    akkor a %1 helyén a 2018.05.08 lesz.



    Most látom, már tevemadár leírta.
    Mutasd a teljes hozzászólást!
  • Az első linked alapján sikerült megoldást találnom. Nem tudom pontosan hogyan működik, de ma is kipróbáltam és visszaadta a tegnapi dátumot hónapváltás ellénre.

    Nagyon nagy köszönet és mindenki másnak is aki megpróbált segíteni!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd