Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Datum a čas v názvu souboru

Hezký den,
prosím o kontrolu dávkového souboru. Generuje mi to chybné názvy souborů před časem 10:00. Podle času systémových hodin od 10:00:00 hod. je to již v pořádku takto:
2021-09-04 - 10.21.07.txt

Co je toho příčinou? Kde dělám chybu? Prosím o vysvětlení a rady jak to vyřešit. Děkuji.

SETLOCAL
set LOGFILE_DATE=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%
set LOGFILE_TIME=%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%
set LOGFILE=%LOGFILE_DATE%" - "%LOGFILE_TIME%"".txt
command > %LOGFILE%
pause

Předmět Autor Datum
Je to preto, že hodiny 00 až 09 sa zaznamenajú bez tej úvodnej nuly, a tým pádom sa ti názov suboru…
čitateľ 04.09.2021 10:36
čitateľ
Děkuji za vysvětlení. Prosím o úpravu kódu. Ztrácím se v tom a je to mimo mé znalosti a schopnosti.…
Time 04.09.2021 10:50
Time
toto používám kdesi v batce: :DATUM REM # EN Fri 06/12/2015 ; 9:21:23.42 REM # CZ po 01.06.2015 ; 9…
lední brtník 04.09.2021 13:28
lední brtník
mimochodem místo zápisu času "_08.53" se mi pro přehlednost osvědčilo "_08h53" je to pak hned jasné…
lední brtník 04.09.2021 23:58
lední brtník
Naprosto se v tom ztrácím. Kódu nerozumím. Možná by mohla pomoci část kódu kde je patrná mezera. if…
Time 05.09.2021 07:44
Time
Potřebuji generovat název takto 2021-09-04 - 08.53.43.txt 1) v případě podobných logů název souboru…
lední brtník 05.09.2021 11:38
lední brtník
Ten kód je tak trochu vražedný, ale pomohl. Děkuji. :beer: Pokud by to někdo další řešil jinak, tak… poslední
Time 08.09.2021 05:55
Time

Je to preto, že hodiny 00 až 09 sa zaznamenajú bez tej úvodnej nuly, a tým pádom sa ti názov suboru rozpadne.
Buď dáš názov súboru do úvodzoviek, alebo ošetríš tu nulu (dá sa to aj špeciálnym zápisom v set).

Tu je návod k tomu setu https://stackoverflow.com/questions/16401747/how-can-i-use-the-variable-time0-2-in-a-batch-file-so-that-times-with-a-lead/16402460
Alebo
https://serverfault.com/questions/147515/need-leading-zero-for-batch-script-using-time-variable

toto používám kdesi v batce:

:DATUM
 REM # EN Fri 06/12/2015    ; 9:21:23.42
 REM # CZ po 01.06.2015     ; 9:05:18,21
 REM # Int 2012-01-31       ;14:56:30
 set rrrr=%date:~-4%
 set dddd=%date:~-10%
 set tttt=%time:~0,5%
:EN
 (set mm=%dddd:~0,2%) & (set dd=%dddd:~3,2%)
:CZ
 echo %date% | find "."
  if not errorlevel 1 (set mm=%dddd:~3,2%) && (set dd=%dddd:~0,2%)
:HHMIN
 (set hh=%tttt:~0,2%) & (set min=%tttt:~3,2%)
  if "%hh:~0,1%"==" " (set hh=0%hh:~1,1%)
 set log=%rrrr%-%mm%-%dd%_%hh%.%min%.txt

sekundami ani mezinárodním pomlčkovým zápisem data jsem se nezabýval, to si doděláš sám.

Potřebuji generovat název takto
2021-09-04 - 08.53.43.txt

1) v případě podobných logů název souboru s mezerarami nedoporučuju, raději kombinovat pomlčky a dolní podtržítka. mj. nesmíš zapomenout pokaždé název souboru (proměnné) uzavřít do uvozovek.
tu chybu tam máš taky: command > %LOGFILE%

2) natvrdo předpokládáš české prostředí v konzoli, což není nejskvělejší nápad. na pc s angličtinou to vyrobí nesmysl.
taky napevno předpokládáš jen letošní rok. proč, plánuješ umřít?

3) starší systémy běžně vypisovaly proměnnou %date% i se zkratkou dne. w10 v tom mají podle jazyka trochu chaos. proto ten skript začíná tak, že si odřízne posledních 10 znaků jen s číselnou částí, viz příklady v původních zaremovaných komentářích.

4) pokud používáš nastavení hodnoty proměnné bez závorek kolem set=..., dávej si bacha, ať řádek nekončí volnou mezerou, bude v proměnné taky.

:DATUM
 set rrrr=%date:~-4%
 set dddd=%date:~-10%
 set tttt=%time:~0,8%
:EN
 set mm=%dddd:~0,2%
 set dd=%dddd:~3,2%
:CZ
 echo %date% | find "." >nul
  if not errorlevel 1 (set mm=%dddd:~3,2%) && (set dd=%dddd:~0,2%)
:HMS
 set hh=%tttt:~0,2%
 set min=%tttt:~3,2%
 set ss=%tttt:~-2%
  if "%hh:~0,1%"==" " (set hh=0%hh:~1,1%)
 (set logfile=%rrrr%-%mm%-%dd% - %hh%h%min%.%ss%.txt) & REM jak jsem psal, tento tvar s mezerami nedoporucuju
:POUZITI
 nejaky_tvuj_command_treba_echo_%promenna% > "cesta\%LOGFILE%"
 pause

dodělal jsem tam i vteřiny, pro orientaci hodin je ponechán oddělovač "h", tečkou ho zvládneš nahradit.

Zpět do poradny Odpovědět na původní otázku Nahoru