Dawno, dawno temu, w czasach Windows 7 – a być może jeszcze wcześniej – stworzyłem skrypt, który z pewnych względów regularnie skanował wybrane zasoby dyskowe i ich zawartość zapisywał do pliku tekstowego. I tak sobie skrypt bezobsługowo działał, regularnie zapisywał listę (i szczegóły plików), aż dziś zwróciłem uwagę, że coś się format daty z jakim zapisywane pliki zmienił.

Formatu daty w skryptach BAT/CMD

Sam skrypt to nic skomplikowanego, jedno proste polecenie systemowe, które skanuje zdefiniowane katalogi, a wynik swojej pracy zapisuje do pliku tekstowego, którego nazwa jest ustawiana automatycznie, na podstawie daty systemowej:

dir /s /n > %date%.txt

Do niedawna wynikiem jego działania były pliki o nazwach zapisanych wg formatu:

yyyy-mm-dd.txt

Kilka miesięcy temu, zapewne podczas którejś z aktualizacji Windows 10 coś się musiało zmienić, i pliki zaczęły zapisywać się w odwrotnym formacie, czyli:

dd.mm.yyyy.txt

Niby szczegół, ale przyzwyczajony jestem, że choćby ze względu na lepszą segregację plików idziemy od roku, przez miesiąc, aż do dnia – zgodnie z częstotliwością zmian.

Niestety funkcja „date” (zmienna %date%) nie pozwala na wybranie formatu w jakim chcemy wyświetlić datę, dlatego musiałem lekko zmodyfikować skrypt, tak by najpierw wyświetlał się rok, potem miesiąc, a na końcu dzień:

set "AktualnaData=%date:~6,4%-%date:~3,2%-%date:~0,2%"
dir /s /n > %AktualnaData%.txt

Tak więc:

%date% -> 30.08.2017
%date:~6,4%-%date:~3,2%-%date:~0,2% -> 2017-08-30
%date:~6,4%.%date:~3,2%.%date:~0,2% -> 2017.08.30
%date:~6,4%%date:~3,2%%date:~0,2% -> 20170830

Co można wyjaśnić tak:

ustaw NazwaZmiennej=[7, 8, 9 i 10 znak z %data%][rozdzielacz][4 i 5 znak z %data%][rozdzielacz][1 i 2 znak z %data%]

Najpierw ustawiamy/tworzymy zmienną AktualnaData, do której podstawiamy 4 znaki licząc od 6 ze zmiennej %data% (30.08.2017), wstawiamy (lub nie) wymagany znak rozdzielający, następnie z tej samej zmiennej %data% pobieramy 2 znaki licząc od 3, dodajemy ewentualnie kolejny znak rozdzielający, i kończymy 2 pierwszymi znakami ze zmiennej %data%, dzięki czemu otrzymujemy pożądany format daty (np. 2017-08-30).

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk