Aktualizacja: teraz, gdy jest 2016, użyłbym do tego PowerShell, chyba że istnieje naprawdę interesujący powód kompatybilności wstecznej, szczególnie z powodu problemów z ustawieniami regionalnymi podczas używania date
. Zobacz @ npocmaka na https://stackoverflow.com/a/19799236/8479
Jakich instrukcji wiersza polecenia systemu Windows można użyć, aby uzyskać bieżącą datę i godzinę w formacie, który można umieścić w nazwie pliku?
Chcę mieć plik .bat, który zamyka katalog do archiwum z bieżącą datą i godziną jako częścią nazwy, na przykład Code_2008-10-14_2257.zip
. Czy jest jakiś prosty sposób, niezależnie od regionalnych ustawień urządzenia?
Nie mam nic przeciwko formatowi daty, idealnie byłoby to rrrr-mm-dd, ale wszystko, co proste, jest w porządku.
Do tej pory mam to, co na mojej maszynie daje mi Tue_10_14_2008_230050_91
:
rem Get the datetime in a format that can go in a filename.
set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%
rem Now use the timestamp by in a new ZIP file name.
"d:\Program Files\7-Zip\7z.exe" a -r Code_%_my_datetime%.zip Code
Mogę z tym żyć, ale wydaje się to trochę niezgrabne. Idealnie byłoby krótsze i mieć wspomniany wcześniej format.
Używam Windows Server 2003 i Windows XP Professional. Nie chcę instalować dodatkowych narzędzi, aby to osiągnąć (chociaż zdaję sobie sprawę, że są takie, które będą ładnie formatować daty).
[datetime]::now.tostring("yyyy-MM-dd")
Odpowiedzi:
Zobacz plik wsadowy systemu Windows (.bat), aby uzyskać bieżącą datę w formacie MMDDRRRR :
Jeśli wolisz czas w formacie 24-godzinnym / wojskowym, możesz zastąpić drugą linię FOR:
Jeśli chcesz, aby data była niezależna od regionalnej kolejności dnia / miesiąca, możesz użyć „WMIC os GET LocalDateTime” jako źródła, ponieważ jest w kolejności ISO:
źródło
For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%b-%%a)
drugiej linii.For /f "tokens=1-2 delims=/: " %%a in ("%TIME%") do (if %%a LSS 10 (set mytime=0%%a%%b) else (set mytime=%%a%%b))
Zwraca wartości takie jak „0001” i „0315”, które wolę w moich nazwach plików.wmic
polecenia! Do tej pory widziałem tylkoWMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table
. Podobnie, aby dostać się20120623-1619
do mojej lokalnej strefy czasowej w Amsterdamie, w jednej linii:for /f %%a in ('wmic os get LocalDateTime ^| findstr ^[0-9]') do (set ts=%%a) & set datetime=%ts:~0,8%-%ts:~8,4%
%%a was unexpected at this time.
Niezależnie od regionu parsowanie daty i godziny
Format wyjściowy
%DATE%
idir
polecenia jest zależny regionalnie, a tym samym nie wytrzymała ani mądry. date.exe (część UnxUtils ) dostarcza dowolne informacje o dacie i godzinie w dowolnym możliwym do zaakceptowania formacie. Możesz także wyodrębnić informacje o dacie / godzinie z dowolnego pliku za pomocądate.exe
.Przykłady: (w skrypcie cmd użyj %% zamiast%)
date.exe +"%Y-%m-%d"
22.12.2009
date.exe +"%T"
18:55:03
date.exe +"%Y%m%d %H%M%S: Any text"
20091222 185503: Dowolny tekst
date.exe +"Text: %y/%m/%d-any text-%H.%M"
Tekst: 09/12/22-dowolny tekst-18.55
Command: date.exe +"%m-%d """%H %M %S """"
07-22 „18:55:03”
Informacje o dacie / godzinie z pliku referencyjnego:
date.exe -r c:\file.txt +"The timestamp of file.txt is: %Y-%m-%d %H:%M:%S"
Używanie go w skrypcie CMD w celu uzyskania informacji o roku, miesiącu, dniu i czasie:
Używanie go w skrypcie CMD w celu uzyskania znacznika czasu w dowolnym wymaganym formacie:
Wydobywanie informacji o dacie / godzinie z dowolnego pliku referencyjnego.
Dodanie do pliku informacji o dacie / godzinie:
date.exe jest częścią bezpłatnych narzędzi GNU, które nie wymagają instalacji.
UWAGA: Kopiowanie
date.exe
do dowolnego katalogu znajdującego się na ścieżce wyszukiwania może spowodować awarię innych skryptów korzystających z wbudowanegodate
polecenia systemu Windows .źródło
date.exe
wydaje się być zależny od ustawień regionalnych. Zwraca datę w formacie dd / MM / rrrr w moim systemie, jeśli byłby niezależny od ustawień regionalnych, oczekiwałbym MM / dd / rrrr lub rrrr-MM-dd. Nie sądzę, że ta odpowiedź mówi o wbudowanym programie date.exe, ale o jego wersji innej firmy.Dwa kolejne sposoby, które nie zależą od ustawień czasu (oba pochodzą z : Jak uniezależnić dane / czas od lokalizacji:) . I oba mają także dzień tygodnia i żadne z nich nie wymaga uprawnień administratora !:
MAKECAB - działa na KAŻDYM systemie Windows (szybko, ale tworzy mały plik tymczasowy) (skrypt foxidrive):
Więcej informacji o funkcji get-date .
ROBOCOPY - to nie jest natywne polecenie dla Windows XP i Windows Server 2003, ale można je pobrać ze strony Microsoft . Ale jest wbudowany we wszystko z Windows Vista i nowszych:
I jeszcze trzy sposoby korzystania z innych języków skryptowych Windows. Dadzą ci większą elastyczność, np. Możesz uzyskać tydzień w roku, czas w milisekundach i tak dalej.
JScript / pakiet hybrydowy (należy zapisać jako
.bat
). JScript jest dostępny w każdym systemie od wersji NT i wyższej, jako część hosta skryptów systemu Windows ( choć może być wyłączony przez rejestr, jest to rzadki przypadek ):VSCRIPT / BATCH hybrid ( Czy można osadzić i uruchomić VBScript w pliku wsadowym bez użycia pliku tymczasowego? ) Ta sama sprawa co JScript, ale hybrydyzacja nie jest tak doskonała:
PowerShell - można zainstalować na każdym komputerze z platformą .NET - pobierz z Microsoft ( v1 , v2 , v3 (tylko dla Windows 7 i nowszych)). Jest instalowany domyślnie we wszystkich systemach Windows 7 / Windows Server 2008 i nowszych:
Aby użyć go z pliku wsadowego:
Własnie skompilowany plik jscript.net/batch (nigdy nie widziałem komputera z systemem Windows bez platformy .NET, więc myślę, że jest to dość przenośny):
Logman Nie można uzyskać roku i dnia tygodnia. Jest stosunkowo powolny, a także tworzy plik tymczasowy i jest oparty na znacznikach czasu, które logman umieszcza na swoich plikach dziennika. Będzie działać na wszystkich elementach systemu Windows XP i nowszych. Prawdopodobnie nikt go nie użyje - w tym ja - ale jest jeszcze jeden sposób ...
Jeszcze jeden sposób z WMIC, który podaje również tydzień roku i dzień tygodnia, ale nie milisekundy (dla milisekund sprawdź odpowiedź foxidrive):
Używanie TYPEPERF z pewnymi wysiłkami, aby być szybkim i kompatybilnym z różnymi ustawieniami języka i tak szybko, jak to możliwe:
MSHTA umożliwia wywoływanie metod JavaScript podobnych do metody JScript przedstawionej w punkcie 3 powyżej. Pamiętaj, że właściwości obiektu Date w JavaScript zawierające wartości miesiąca są ponumerowane od 0 do 11, a nie od 1 do 12. Zatem wartość 9 oznacza październik.
źródło
makecab
: działa to poprzez utworzenie pliku o nazwie~.rpt
i przeszukaniestring
go, zaczynając odmakecab
, który jest podobny do liniiMakeCAB Report: Tue Sep 02 22:15:57 2014
. dla mnie to polecenie nie jest zlokalizowane, jest niezależne od ustawień regionalnych. Ta sztuczka polega na tym. Miejmy nadzieję, że już nigdy nie będzie, albo strzeż się!mshta
hybrydy? :) Czy mogę edytować swoją odpowiedź i dodać jedną? To wydaje się być najlepszą kolekcją ezoterycznych rozwiązań i wygląda na to, żemshta
należy tutaj.Oto wariant z alt.msdos.batch.nt, który działa lokalnie niezależnie.
Umieść to w pliku tekstowym, np. GetDate.cmd
Aby kod działał bez błędów msg do stderr, musiałem dodać pojedyncze cudzysłowy do przypisań zmiennych dla %% a, %% b i %% c. Moje ustawienia narodowe (PT) powodowały błędy na jednym etapie zapętlania / parsowania, gdzie wykonywano takie rzeczy jak „set = 20”. Cytaty dają token (choć pusty) dla lewej strony instrukcji przypisania.
Minusem są niechlujne nazwy zmiennych regionalnych: „yy”, „mm” i „dd”. Ale hej, kogo to obchodzi!
źródło
dd
,mm
ayy
na wyjściuecho:^|date
.date
podajeGeben Sie das neue Datum ein: (TT-MM-JJ)
, gdzieJJ
łamie się twój skrypt (oczekujeYY
))Korzystam z tego (ponownie nie jest niezależny od regionu (Wielka Brytania))
źródło
Pierwsze cztery wiersze tego kodu podadzą wiarygodne zmienne YY DD MM RRRR HH Min Sec w systemie Windows XP Professional i nowszych.
źródło
Niestety nie jest to odporne na ustawienia regionalne, ale robi to, co chcesz.
Niesamowite rzeczy, które można znaleźć na Wikipedii .
źródło
Użyj następującego skryptu, aby uzyskać bieżący dzień w wierszu polecenia:
źródło
Inny sposób ( kredyt ):
Zauważ, że obie moje odpowiedzi są nadal zależne od kolejności dnia i miesiąca, zgodnie z ustawieniami regionalnymi - nie jestem pewien, jak to obejść.
źródło
źródło
http://www.dotnetperls.com/7-zip-examples
ma kilka dobrych punktów, które mogą być przydatne dla kogoś w przyszłości.To nie jest tak naprawdę krótsze, ale może być bardziej elastyczny sposób ( kredyt ):
źródło
Oto sposób, aby uzyskać datę i godzinę w jednym wierszu:
W USA wyświetli to „rrrr-mm-dd ggmm”. Różne ustawienia regionalne spowodują różne wyniki% data%, ale możesz zmodyfikować kolejność tokenów.
Jeśli chcesz mieć inny format, zmodyfikuj instrukcję echa, przestawiając tokeny lub używając różnych (lub nie) separatorów.
źródło
Po prostu użyj tej linii:
źródło
Krótka odpowiedź :
Długa odpowiedź
źródło
Jednoliniowe rozwiązanie Matthew Johnsona, aby uzyskać datę i godzinę jednej linijki, jest wymowne i przydatne.
Jednak wymaga prostej modyfikacji, aby działać z poziomu pliku wsadowego:
źródło
echo %date:/=-%%time::=-%
A tutaj jest podobny plik wsadowy dla części czasu.
--jeroen
źródło
z: & forfiles /m *.jpg /s /d 07/16/2015 /c “cmd /c echo @fdate @ftime @path”
ale chcę wiedzieć, jak ładować pliki zgodnie z datą utworzenia . Każda forma pomocy jest mile widziana. Pytanie zostało zadane przy przepełnieniu stosu, ale nie ma jeszcze odpowiedzi. Proszę zobaczyć link do szczegółów stackoverflow.com/q/32293517/3327081forfiles
.Zmieniłem odpowiedź za pomocą pliku wsadowego z vMax, więc działa również z językiem holenderskim.
Holendrzy - trwałe jak my - mają kilka zmian w
%date%
,date/t
idate
które rozkładają oryginalny batch-file.Byłoby miło, gdyby niektóre osoby mogły to sprawdzić również w przypadku innych lokalizacji systemu Windows i zgłosić wyniki.
Jeśli plik wsadowy nie powiedzie się w Twojej lokalizacji, dołącz wyniki tych dwóch instrukcji w wierszu polecenia:
echo:^|date
date/t
Oto próbka danych wyjściowych, które powinieneś uzyskać z pliku wsadowego:
Oto poprawiony kod z komentarzami na temat tego, dlaczego:
--jeroen
źródło
jj-mm-aaaa
do Jour, Mois, Anne? Włosi możegg/mm/aaaa
dla Giorno, Mese, Anno? Niemcytt.mm.jjjj
dla Tag, Monat, Jahr? Ale potem: Myślę, że w większości krajów używa się tylko kilku języków. Podobnie jak w Holandii, Windows często będzie językiem angielskim lub holenderskim, niewiele więcej. Wystarczająco dobrze dla mnie.jj
i nie wymusza 4-cyfrowego roku), ale używashift
do odrzucenia dnia takiego jakMon
lubma
. Po prostu inny.(TT-MM-JJ)
: danedate/t
wyjściowe to23.06.2012
. / cc @Arjanreg query "HKCU\Control Panel\International" /vShortDate
. Uważaj podczas testowania: w przypadku otwartego wiersza polecenia zmiana tego ustawienia Panelu sterowania zmienia również format używany do wyświetlania daty (zarównodate
i, jakdate /t
iecho %date%
), ale w systemie Windows 7 NIE zmienia formatu nowej daty! Jak zmienia mój krótki format daty naYY/MM/dd
, dostaje mnie:The current date is: 12/06/23 Enter the new date: (mm-dd-yy)
. Otwarcie nowego wiersza polecenia to rozwiązuje.reg query "HKCU\Control Panel\International" /v sShortDate
.Właśnie tego użyłem:
Jeśli potrzebujesz dalszych pomysłów na automatyzację tworzenia kopii zapasowych w archiwach 7-Zip, mam darmowy / otwarty projekt, z którego możesz skorzystać lub przejrzeć pomysły: http://wittman.org/ziparcy/
źródło
Miałem podobny problem. Mam automatyczne codzienne pobieranie z serwera FTP zaszyfrowanego pliku. Chciałem odszyfrować plik za pomocą gpg, zmienić nazwę pliku na bieżącą datę (format RRRRMMDD) i upuścić odszyfrowany plik w folderze dla odpowiedniego działu.
Przejrzałem kilka sugestii dotyczących zmiany nazwy pliku według daty i nie miałem szczęścia, dopóki nie natknąłem się na to proste rozwiązanie.
Działa idealnie (tzn. Nazwa pliku pojawia się jako „2011-06-14.txt”).
(Źródło)
źródło
Funkcja oparta na
wmic
:Zaleta: niezależna od regionu. Wada: tylko administratorzy systemu mogą uruchomić wmic.exe.
Stosowanie:
To echo takiego ciągu:
Zauważ, że parametry funkcji są poza parametrami - to znaczy musisz podać nazwy zmiennych zamiast wartości.
Wszystkie parametry są opcjonalne, więc
call:Now Y M
jest to prawidłowe połączenie, jeśli chcesz uzyskać tylko rok i miesiąc.źródło
http://sourceforge.net/projects/unxutils/files/
Zajrzyj do pliku ZIP, aby znaleźć coś o nazwie „Date.exe” i zmień jego nazwę na „DateFormat.exe” (aby uniknąć konfliktów).
Umieść go w folderze systemu Windows32.
Ma wiele opcji „data output”.
Aby uzyskać pomoc, użyj
DateFormat.exe --h
Nie jestem pewien, jak umieścić dane wyjściowe w zmiennej środowiskowej ... za pomocą SET.
źródło
Regionalne niezależne rozwiązanie generujące format daty ISO:
Co można jeszcze zoptymalizować: inne procesy mogą się mylić, jeśli użyjesz formatu daty w krótkim okresie czasu, gdy jest on modyfikowany. Zatem parsowanie danych wyjściowych zgodnie z istniejącym ciągiem formatu może być „bezpieczniejsze” - ale będzie bardziej skomplikowane
źródło
źródło
Biorąc pod uwagę znaną lokalizację, do odniesienia w formie funkcjonalnej. Te
ECHOTIMESTAMP
pokazy połączeń jak dostać się znacznik czasu do zmiennej (DTS
w tym przykładzie).I zapisany do pliku timestamp.bat, oto wynik:
źródło
(yy)yy年m月d日 hh:mm
- brak zer wiodących. (yy) można zignorować, ponieważ mamy 2-cyfrowy rok lub 4-cyfrowy rok. Pamiętaj jednak o jednej rzeczy: format daty i godziny można zmienić dla każdego komputera.systeminfo
w CLI i daj mi znać, co widziszSystem Locale
. Uruchomienie programu zajmuje dużo czasu, ale być może wynik ustawień regionalnych może być buforowany, a następnie użyty do indeksowania formatu znacznika czasu.W systemie Windows 7 ten kod działa dla mnie:
źródło
independent of the regional settings of the machine
Zauważam, że operatorzy nie poprosili o rozwiązanie niezależne od regionu. Moje rozwiązanie jest jednak dla Wielkiej Brytanii.
Jest to najprostsze możliwe rozwiązanie, rozwiązanie 1-liniowe, do zastosowania w pliku wsadowym:
źródło
...particularly because of the regional settings issue with using date
. Btw. Twoje rozwiązanie jest takie samo jak dwadzieścia innych odpowiedzi.echo %date:/=-%
Wiem, że wspomniano już na wiele sposobów. Ale oto mój sposób na rozbicie tego, aby zrozumieć, jak to się robi. Mam nadzieję, że jest to pomocne dla kogoś, kto lubi metodę krok po kroku.
źródło
independent of the regional settings of the machine