Mamy zadanie wsadowe, które jest uruchamiane codziennie i kopiuje plik do folderu odbioru. Chcę też zrobić kopię tego pliku i wrzucić ją do folderu archiwum z nazwą pliku
yyyy-MM-dd.log
Jaki jest najłatwiejszy sposób wykonania tego zadania wsadowego systemu Windows?
Zasadniczo szukam odpowiednika tego polecenia Unix:
cp source.log `date +%F`.log
windows
batch-file
cmd
timestamp
Eoin Campbell
źródło
źródło
Odpowiedzi:
Ale to zależy od lokalizacji. Nie jestem pewien, czy
%DATE%
jest zlokalizowany, czy też zależy od formatu określonego dla krótkiej daty w systemie Windows.Oto niezależny od lokalizacji sposób wyodrębnienia bieżącej daty z tej odpowiedzi , ale zależy to od
WMIC
iFOR /F
:źródło
2014-5.-01
(kiedy by to było2014-05-26
). Więc bądź bardzo ostrożny, jeśli publikujesz skrypty zawierające to!%time:~-11,2%-%time:~-8,2%-%time:~-5,2%
To zadziałało dla mnie i było rozwiązaniem bezpiecznym dla nazwy pliku (chociaż generuje format MM-dd-RRRR):
Pierwsze polecenie wykonuje się na randkę i zastępuje
/
się-
, ma czas i zastępuje:
się-
i łączy je w DATE @ format czasu. Drugaset
instrukcja usuwa żadnych spacji, a trzeciset
zostaje zastąpiony przez,
z.
i dołącza.jpg
rozszerzenie.Powyższy kod jest używany w małym skrypcie, który pobiera obrazy z kamery IP bezpieczeństwa do dalszego przetwarzania:
źródło
10-12-2014@14-22-59,44.jpg
przecinek przed milisekundamiset SAVESTAMP=%SAVESTAMP:,=.%.jpg
przedecho
stwierdzeniem. Jeśli to zadziała, zaktualizuję odpowiedź.08.06.2016@15-42-20,33.jpg
na moim niemieckim laptopie i[email protected]
na moim angielskim.yyyy-MM-dd
TYLKO dla French Locale (France) , bądź ostrożny, ponieważ
/
pojawia się w dacie:W przypadku naszego problemu z plikiem dziennika, oto moja propozycja TYLKO dla języka francuskiego :
źródło
"_0:00"
(podkreślony znak jest spacją)Oto rozwiązanie niezależne od ustawień regionalnych (skopiuj do pliku o nazwie SetDateTimeComponents.cmd):
Umieściłem wszystkie moje skrypty .cmd w tym samym folderze (% SCRIPTROOT%); każdy skrypt, który potrzebuje wartości daty / godziny, wywoła SetDateTimeComponents.cmd, jak w poniższym przykładzie:
Jak pokazuje przykład, możesz wywołać SetDateTimeComponents.cmd zawsze, gdy musisz zaktualizować wartości daty / godziny. Ukrywanie skryptu analizującego czas w jego własnym pliku SetDateTimeComponents.cmd to dobry sposób na ukrycie brzydkich szczegółów i, co ważniejsze, uniknięcie literówek.
źródło
prompt $d $t
zwraca 30.05.2016 15: 35: 56,93 w moim systemie.Ponieważ idea rozdarcia
%DATE%
i%TIME%
od siebie i zacierania je z powrotem razem wydaje się kruchy w najlepszym razie, oto alternatywa, która używa powershell oneliner:Odniesienie do
get-date
znajduje się tutaj , z opcjami formatowania zarówno w stylu .NET, jak i w stylu UNIX.źródło
Często tego używam i umieszczam wszystko w jednym poleceniu kopiowania. Poniższe kopiuje przykład.txt jako przykład_RRRRMMDD_HHMMSS.txt i oczywiście możesz go zmodyfikować, aby dopasować go do preferowanego formatu. Cudzysłowy są konieczne tylko wtedy, gdy w specyfikacji pliku są spacje. Jeśli chcesz ponownie użyć dokładnie tej samej daty / sygnatury czasowej, musisz zapisać je w zmiennej.
źródło
Zapewni to, że dane wyjściowe będą miały wartość 2-cyfrową ... możesz zmienić ustawienie wyjścia zgodnie z własnymi upodobaniami i przetestować, usuwając komentarz z sekcji diagnostycznej. Cieszyć się!
(Wiele z tego pożyczyłem z innych forów ...)
źródło
Utwórz plik z bieżącą datą jako nazwą pliku (np. 2008-11-08.dat)
Z aktualną datą, ale bez „-” (np. 20081108.dat)
źródło
Może to pomoże:
lub
źródło
Złożyłem mały program w C, aby wydrukować aktualny znacznik czasu (bezpieczny dla języka, bez złych znaków ...). Następnie używam polecenia FOR, aby zapisać wynik w zmiennej środowiskowej:
Oto link:
https://github.com/HarryPehkonen/dos-timestamp
źródło
Wiem, że ten wątek jest stary, ale chcę go tutaj dodać, ponieważ pomogło mi to dużo próbować to wszystko rozgryźć i jest czyste. Fajną rzeczą w tym jest to, że możesz umieścić to w pętli dla pliku wsadowego, który zawsze działa. Dziennik czasu działania serwera czy coś w tym stylu. W każdym razie do tego go używam. Mam nadzieję, że kiedyś komuś to pomoże.
źródło
ERROR : Invalid Parameter #12 : "/LOG:C:\opt\Sync_08.10.2020_16:27:39.log"
Zamiast tego użyłem myślników:set FreshTime=%hour%-%min%-%secs%
Możesz po prostu wykryć aktualny format lokalny i uzyskać datę w swoim formacie, na przykład:
źródło
Wiem, że to stary post, ale jest O wiele prostsza odpowiedź (chociaż może działa tylko w nowszych wersjach systemu Windows). Po prostu użyj parametru / t dla poleceń DATA i CZAS, aby wyświetlić tylko datę lub godzinę i nie monitować o ich ustawienie, na przykład:
źródło
1) Możesz pobrać coreutils GNU z datą GNU
2) możesz użyć VBScript , który ułatwia manipulowanie datami w systemie Windows:
Uruchom skrypt jako:
źródło
Działa to dobrze z (moim) niemieckim językiem, powinno być możliwe dostosowanie go do twoich potrzeb ...
źródło
%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
działa również w portugalskiej lokalizacji! Mam na myśli RRRRMMDDW przypadku dużych plików zip do wdrożenia używam kwadransa. Nikt inny na tej stronie nie wspomniał o tym wcześniej, więc umieszczę tutaj mój mały skrypt:
Nie zeruje jeszcze kwadrans od północy do 5 rano, ale nadal sprawia, że możesz mieć stemplowane zwolnienie wiele razy dziennie z kilkoma kolizjami.
Mam nadzieję, że to pomoże.
źródło
wykorzystał sugestię Martina z niewielką poprawką, aby dodać znacznik czasu do nazwy pliku:
Na 23.10.2019 10:17:21 Wynik to:
źródło