W skrypcie wsadowym systemu Windows (Windows XP) muszę sformatować bieżącą datę i godzinę, aby później użyć ich w nazwach plików itp.
Jest to podobne do pytania Przepełnienie stosu Jak dołączyć datę w plikach wsadowych , ale z czasem też.
Mam to do tej pory:
echo %DATE%
echo %TIME%
set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
echo %datetimef%
co daje:
28/07/2009
8:35:31.01
2009_07_28__ 8_36_01
Czy jest sposób, w jaki mogę zezwolić na jednocyfrową godzinę w% TIME%, aby uzyskać następujące?
2009_07_28__08_36_01
windows
datetime
formatting
batch-file
Laurie
źródło
źródło
datetimef
zmiennej i zamiast tego wstawić 0. Na przykład:SET datetimef=%datetimef: =0%
Odpowiedzi:
Skończyło się na tym skrypcie:
:: W WIN2008R2 np. Musiałem ustawić „ustawiony miesiąc =% data: ~ 3,2%” jak poniżej :: w przeciwnym razie dla MIESIĄCA pojawi się 00
źródło
źródło
Oto jak generuję nazwę pliku dziennika (na podstawie http://ss64.com/nt/syntax-getdate.html ):
źródło
Zwykle robię to w ten sposób, ilekroć potrzebuję ciągu daty / godziny:
Dotyczy to niemieckiego formatu daty / godziny (dd.mm.rrrr gg: mm: ss). Zasadniczo konkatenuję podciągi i na koniec zastępuję wszystkie spacje zerami.
Krótkie wyjaśnienie działania podciągów:
Aby uzyskać tylko rok od daty takiej jak „29.03.2018”, użyj:
źródło
Jeśli zainstalowano PowerShell, możesz łatwo i niezawodnie uzyskać datę / godzinę w dowolnym formacie, na przykład:
Oczywiście w dzisiejszych czasach PowerShell jest zawsze zainstalowany, ale w Windows XP prawdopodobnie będziesz chciał użyć tej techniki tylko wtedy, gdy skrypt wsadowy jest używany w znanym środowisku, w którym wiesz, że PS jest dostępny (lub sprawdź w pliku wsadowym, czy PowerShell jest dostępny ...)
Możesz rozsądnie zapytać: dlaczego w ogóle używać pliku wsadowego, jeśli możesz użyć programu PowerShell, aby uzyskać datę / godzinę, ale myślę, że niektóre oczywiste powody są następujące: (a) nie znasz się na programie PowerShell i nadal wolisz robić większość rzeczy w staromodny sposób z plikami wsadowymi lub (b) aktualizujesz stary skrypt i nie chcesz przenosić całej zawartości na PS.
źródło
Dzisiaj spotkałem ten problem i rozwiązałem go za pomocą:
Zastępuje spacje zerami i zasadniczo zeruje pady na godzinę.
Po szybkim wyszukiwaniu nie dowiedziałem się, czy wymagało to rozszerzenia poleceń (nadal działało z SETLOCAL DISABLEEXTENSIONS).
źródło
:
)?echo %TIME: =:%
ale jeśli nie jest, może spróbuj uciec:
z^
podobnymecho %TIME: =^:%
(co również działa dla mnie).Jak już wspomniano, parsowanie daty i godziny jest przydatne tylko wtedy, gdy znasz format używany przez bieżącego użytkownika (na przykład MM / dd / rr lub dd-MM-rrrr, żeby wymienić tylko dwa). Można to ustalić, ale zanim wykonasz wszystkie stresujące i parsowania, nadal będziesz mieć do czynienia z sytuacją, w której użyjesz nieoczekiwanego formatu i konieczne będą dalsze poprawki.
Możesz także użyć programu zewnętrznego, który zwróci informację o błędzie daty w preferowanym formacie, ale ma to wady związane z koniecznością dystrybucji programu narzędziowego wraz ze skryptem / partią.
Istnieją również sztuczki wsadowe wykorzystujące zegar CMOS w dość surowy sposób, ale dla większości ludzi jest to zbyt blisko drutów, a także nie zawsze preferowane miejsce do pobierania daty / godziny.
Poniżej znajduje się rozwiązanie, które pozwala uniknąć powyższych problemów. Tak, wprowadza kilka innych problemów, ale dla moich celów uznałem, że jest to najłatwiejsze, najczystsze i najbardziej przenośne rozwiązanie do tworzenia znaczników danych w plikach .bat dla nowoczesnych systemów Windows. To tylko przykład, ale myślę, że zobaczysz, jak zmodyfikować dla innych formatów daty i / lub godziny itp.
źródło
reg query "HKCU\Control Panel\International" /v sShortDate
części bez zmiany ustawienia rejestru (ćwiczenie pozostaw czytelnikowi!).Poniższe informacje mogą nie być bezpośrednią odpowiedzią, ale bliższą?
Przynajmniej może być inspirujące.
źródło
Jeśli nie potrzebujesz tego formatu:
Następnie możesz użyć następujących 3 wierszy kodu, które używają% date% i% time%:
Uwaga: Znaki
/
i:
są usuwane, a znak.
i spacja są zastępowane znakiem podkreślenia.Przykładowe dane wyjściowe (wykonane w środę 8/5/15 o 12:49 z 50 sekundami i 93 milisekundami):
źródło
źródło
offset:length
Formatowanie obsługiwane zSET
polecenia w systemie Windows nie pozwoli na wkładce0
jak wydaje się być zainteresowany.Możesz jednak napisać skrypt BATCH, aby sprawdzić, czy godzina jest mniejsza niż,
10
iodpowiednio wpisać inny
echo
ciąg znaków.Znajdziesz tu trochę informacji na temat
SET
komendy na ten link .Aby to zrobić, możesz także przejść na inne metody programowania.
W uniksowym bashu (dostępnym w Cygwin w systemie Windows) jest dość proste stwierdzenie:
I zawsze prawidłowo się pada.
źródło
Zrobiłem to w ten sposób:
źródło
Pierwszy wiersz zawsze wyświetla dane wyjściowe w tym formacie:
strefa czasowa: 20150515150941.077000 + 120
To pozostawia tylko formatowanie wyjścia zgodnie z własnymi życzeniami.
źródło
Ten plik nietoperza (zapisany jako datetimestr.bat) tworzy ciąg datetime 3 razy: (1) długi ciąg datetime z dniem tygodnia i sekund, (2) krótki ciąg datetime bez nich i (3) krótką wersję kodu.
Aby odpowiednio podziękować, połączyłem koncepcje Petera Mortensena (18 czerwca o godz. 21:02) i opello (25 sierpnia o godz. 14:27).
Możesz napisać to znacznie krócej, ale ta długa wersja ułatwia czytanie i rozumienie kodu.
źródło
Naprawdę jestem nowy w tworzeniu plików wsadowych i to jest mój kod !! (Nie jestem pewien dlaczego, ale nie mogłem połączyć date / t i time / t razem i nie mogłem użyć % date% i % time% bezpośrednio bez zmiennej ...)
Jest to rodzaj ponownego wykorzystania od innych (pytanie brzmiało, aby uzyskać sformatowany czas do użycia jako nazwę pliku).
źródło
Istnieje inny prosty sposób:
źródło
Do generowania
YYYY-MM-DD hh:mm:ss
znacznika czasu (24-godzinnego) używam:źródło
%TIME%
i%DATE%
zmienne używają tego samego formatu, jakTIME
iDATE
poleceń, odpowiednio. W moim systemie zmienne nie pasują do moich ustawień regionalnych.Ten skrypt wsadowy zrobi dokładnie to, czego chce OP (testowany na Windows XP SP3).
Użyłem również tej sprytnej sztuczki rejestru opisanej wcześniej przez „jph”, którą IMHO jest najprostszym sposobem uzyskania 100% spójnego formatowania daty
"yyyy_MM_dd"
w dowolnym nowym lub starym systemie Windows. Zmiana na jedną wartość rejestru w tym celu jest chwilowa i trywialna; trwa tylko kilka milisekund, zanim zostanie natychmiast cofnięte.Kliknij dwukrotnie ten plik wsadowy, aby uzyskać natychmiastową wersję demonstracyjną, pojawi się okno wiersza polecenia i wyświetli znacznik czasu. . . . .
źródło
źródło
Utwórz plik o nazwie „search_files.bat” i umieść poniżej zawartość w pliku. Następnie kliknij dwukrotnie. Tymczasowa zmienna% THH% została wprowadzona, aby odpowiednio obsługiwać AM. Jeśli w pierwszych 2 cyfrach czasu występuje 0, system Windows ignoruje resztę nazwy pliku LOG.
źródło
Podoba mi się krótka wersja na górze @ lorax, ale dla innych ustawień językowych może być nieco inna.
Na przykład w ustawieniach języka niemieckiego (z naturalnym formatem daty: dd.mm.rrrr) zapytanie miesiąca należy zmienić z 4,2 na 3,2:
źródło
To moje 2 centy za
datetime string
. WMM DD YYYY
systemach przełącz pierwsze i drugie%DATE:~
wpisy.źródło
Próbowałem zaakceptować odpowiedź i działa całkiem dobrze. Niestety format czasu w USA wygląda na H: MM: SS.CS, a brakujące 0 z przodu powodowało problemy z analizą przed 10 rano. Aby pokonać tę przeszkodę i umożliwić analizowanie większości formatów czasu na świecie, wymyśliłem tę prostą procedurę, która wydaje się działać całkiem dobrze.
Zaletą tej procedury jest to, że przekazujesz ciąg czasu jako pierwszy parametr, a nazwę zmiennej środowiskowej, która ma zawierać czas (w centisekundach) jako drugi parametr. Na przykład:
(* Chris *)
źródło
Może coś takiego:
źródło
W takich sytuacjach skorzystaj z prostego, standardowego podejścia programistycznego: Zamiast wkładać ogromny wysiłek w analizowanie nieznanego elementu, po prostu zapisz bieżącą konfigurację, zresetuj ją do znanego stanu, wyodrębnij informacje, a następnie przywróć pierwotny stan. Używaj tylko standardowych zasobów Windows.
W szczególności formaty daty i godziny są przechowywane pod kluczem rejestru HKCU \ Control Panel \ International \ w [definicji MS] „wartości”: „sTimeFormat” i „sShortDate”. Reg to edytor rejestru konsoli dołączany do wszystkich wersji systemu Windows. Podwyższone uprawnienia nie są wymagane do modyfikowania klucza HKCU
Prosty, bezpośredni i powinien działać dla wszystkich regionów.
Z powodów, których nie rozumiem, resetowanie wartości „sShortDate” zaczyna obowiązywać natychmiast w oknie konsoli, ale resetowanie bardzo podobnej wartości „sTimeFormat” NIE działa, dopóki nie otworzy się nowe okno konsoli. Jednak jedyne, co można zmienić, to ogranicznik - pozycje cyfr są ustalone. Podobnie, token czasowy „HH” ma poprzedzać zera na początku, ale tak nie jest. Na szczęście obejścia są łatwe.
źródło
sTimeFormat
formatu czasu jest bezużyteczne . Nie. Ponieważ ma to wpływ na kolejne monity konsoli, zastosuj je za pomocąfor /f "delims=" %%G in ('cmd /C echo SET "DateTime=%%date%%__%%time%%"') do %%G
Ten skrypt używa interfejsu WMI, do którego dostęp uzyskuje się głównie za pomocą narzędzia WMIC, które jest integralną częścią systemu Windows od Windows XP Professional (edycja Home jest również obsługiwana, ale narzędzie nie jest instalowane domyślnie). Skrypt implementuje również obejście brakującego narzędzia WMIC, tworząc i wywołując skrypt WSH vbscript w celu uzyskania dostępu do interfejsu WMI i zapisywania na konsoli danych wyjściowych w tym samym formacie, jaki zapewnia narzędzie WMIC.
źródło
Przyjemnym trikiem jednoliniowym, aby uniknąć wczesnego rozszerzenia zmiennej, jest użycie
cmd /c echo ^%time^%
źródło
źródło
Aby uzyskać bardzo proste rozwiązanie dla daty numerycznej do użycia w nazwach plików, użyj następującego kodu:
źródło
Podziel wyniki polecenia daty ukośnikiem, a następnie możesz przenieść każdy z tokenów do odpowiednich zmiennych.
źródło