Przejdź do głównej zawartości

Data i czas w skryptach cmd

Problem:

Potrzebny jest wpis bieżącej daty i godziny w pliku tekstowym, coś na wzór logów, oczywiście z wykorzystaniem najlepiej tylko poleceń konsolowych cmd, czyli bez korzystania z sed-a. Poniżej rozwiązanie uzyskiwania wartości daty trochę dłuższe, ale pokazujące możliwości wykorzystania zmiennych systemowych.

Wykorzystane polecenia cmd
  • date, time, find, set, echo 
  • potoki, < - przekierowanie do wnętrza polecenia,
    >> -przekierowanie wyniku do pliku, 

Od początku

Date i time - ustawiają lub wyświetlają bieżące informacji na temat daty i czasu. Teraz polecenia mają przełącznik /t który pozwala tylko wyświetlać, czyli to jest łatwiej ale nie zawsze tak było.

date /t 




Nie zawsze tak było i wtedy aby uzyskać tylko datę można było przekierować plik zawierający znak entera. Taki plik bez treści, jedynie ze znakiem ENTER musisz przygotować i zapisać, u mnie to plik ent zapisany w katalogu ze skryptami. Czyli
date < ent 




Teraz przekierujemy to do polecenia find aby wyciąć tylko tą linie która jest potrzebna 
date < ent | find "current" 




Teraz wycinanie potrzebnego fragmentu z całej linii wiersza, bo przecież potrzebna jest tylko sama wartość daty czyli 06.01.2022. Tu przyda się przekierowanie wyników do pliku i użycie dodatkowej zmiennej systemowej deklarowanej poleceniem set czyli kolejno:

time < ent | find "current" > tmp.txt
set /p ttmp=<tmp.txt

to samo dla date

date < c:\skrypty\ent | find "current" > tmp.txt
set /p dtmp=<tmp.txt

Teraz masz dwie zmienne %ttmp% i %dtmp%, które zawierają pełny wiersz z którego trzeba wycinać potrzebne teksty.

echo %dtmp:~21,10% - %ttmp:~21,11% >> harmonogram.txt

Weż odpowiedni fragment (czyli od 21 znaku 10 kolejnych) ze zmiennej %dtmp% i dodaj tez odpowiedni fragment zmiennej %ttmp% i to wyślij to pliku, tu harmonogram.txt.
Samo wycinanie potrzebnych fragmentów z zadeklarowanych zmiennych (bez wysyłania do pliku) działa jak niżej:




Jeśli wyślesz te wyniki do pliku tekstowego to masz plik typu log z datą i czasem. Tu jest przykład takiego pliku harmonogram.txt w którym notuje działanie skryptu (jakiego to już inna para kaloszy) wywoływanego poprzez windowsowy harmonogram zadań, vide wiem kiedy windows wyzwolił ten skrypt.







Na koniec sprzątanie

set dtmp=
set ttmp=
del tmp.txt /f /q

Całość tego skryptu wygląda tak

echo off
cd c:\skrypty
time < c:\skrypty\ent | find "current" > tmp.txt
set /p ttmp=<tmp.txt
date < c:\skrypty\ent | find "current" > tmp.txt
set /p dtmp=<tmp.txt
rem wez odpowiedni fragment ze zmiennej %dtmp%
rem i dodaj tez odpowiedni fragment zmiennej %ttmp% i to wyslij to pliku
echo %dtmp:~21,10% - %ttmp:~21,11% >> harmonogram.txt
rem czysc niepotrzebne zmienne
set dtmp=
set ttmp=
del tmp.txt /f /q



.. a co dalej skrypt robi to już mniej ważne
Dodatkowe, przydatne



Komentarze