Próbuję utworzyć plik zip ze skryptu wsadowego. Potrzebuję go nazwać jak archive_.zip
Niestety nie działa to w systemach z datą sformatowaną jak r / m / d z powodu ukośników:
zip some_options "archive_%DATE%.zip"
%DATE%
Zmienna rozszerza się na coś podobnego
Mon 09/28/2009
Mam dostęp do pakietu gnuwin32, więc mogę użyć, powiedzmy, sed
zastąpić spacje i ukośniki myślnikami. Problem polega na tym, w jaki sposób użyłbym danych wyjściowych sed
do utworzenia nazwy pliku archiwum zip?
W Uniksie (bash) można używać cudzysłowów, aby oceniać polecenie w miejscu i używać jego wyniku w innym poleceniu, na przykład:
zip [...] archive_`echo %DATE% | sed -e s/.../.../`.zip
Czy w systemie Windows jest coś podobnego?
A może istnieje sposób na ustawienie zmiennej zwracanej wartości sed
i użycie jej do skonstruowania nazwy pliku?
źródło
%date:~-10,2%-%date:~-7,2%-%date:~-4,4%
:!Zawsze używam:
Następnie CDate będzie Sat02182012. Jeśli chcesz, aby było to łatwiejsze do sortowania, ustaw CDate na %% d - %% b - %% c, więc będzie to 2012-02-18
Aby folder i plik były przyjazne dla daty i godziny.
źródło
Tutaj zamieściłem odpowiedź na bardzo podobne pytanie . Dzielenie daty w polach odbywa się w 1 linii, zamiast kilku linii w odpowiedzi Harrymca.
Interesująca część to:
Ostrzeżenie jest nadal aktualne:
źródło
/=-
zastępuje/
ze znakiem minus.źródło
Ten dość okropny fragment kodu powinien zrobić coś, co chcesz
Jeśli odpowiednio zmienisz nazwę pliku.
źródło
echo %date:~6,4%%date:~3,2%%date:~0,2%
powraca9-289-20
na moim komputerze, ponieważ mam ustawioną datę użycia rrrr-MM-dd (więc dzisiaj jest 28.09.2009).Ponieważ twoje pytanie jest oznaczone jako Windows, znalazłem to rozwiązanie, które działa w starych dobrych plikach .bat:
„Plik wsadowy Windows (.bat), aby uzyskać bieżącą datę w formacie MMDDYYYY” ,
i prawdopodobnie można go dostosować do Twojego przypadku:
powoduje to jedynie ustawienie zmiennej% date na dzisiejszą datę w formacie MMDDRRRR, aby można ją było wywołać później w skrypcie.
Edytuj
Znaleziono lepszą składnię. Biorąc pod uwagę, że moją datą jest dziś „Pon 28/09/2009”:
ustaw dzień =% Data: ~ 0,2%
ustaw miesiąc =% Data: ~ 7,2%
ustaw rok =% Data: ~ 10,4%
źródło
czysta wersja cmd.exe w połączeniu z gnuwin32-„data”:
źródło
co z użyciem cscript + vbasic:
zadzwoń przez
źródło
Dla / f "tokenów = 1,2,3,4,5 delims = /." %% a in ('date / T') ustaw CDate = %% d - %% b - %% c
Dane @echo =% CDate%
Dzieje się tak w Dniu-Miesiącu-Dniu, który jest obecnie najczęstszym dniem
źródło
Każde rozwiązanie, które korzysta z któregokolwiek
%DATE%
z danych wyjściowych,date /t
może się zepsuć, jeśli użytkownik zmodyfikuje swoje ustawienia regionalne. Na przykład ustawiłem format „krótkiej daty” na"yyyy-MM-dd"
, więc jestem%DATE%
równy"2012-02-18"
idate /t
generuję ten sam wynik. (Dotyczy to systemu Windows 7; zakładam, że jest tak samo we wcześniejszych wersjach systemu Windows).Zbuduj plik wsadowy, a następnie uruchom go.
Ponieważ masz
date
dostępne polecenie GNU , możesz zrobić coś takiego:tmp.bat
będzie zawierać coś takiego:Zauważ, że tworzy się to
tmp.bat
w bieżącym katalogu, co może stanowić problem; może być lepiej stworzyć%TEMP%\tmp.bat
. Później też nie usunąłem pliku; to dość łatwe do zrobienia.date +FORMAT
pozwala określić format wyjściowydate
polecenia, podobny do ciąguprintf
formatu; szczegóły w dokumentacji daty coreutils . Format może zawierać dowolny tekst, więc w tym przypadku nawet nie musisz go używaćsed
.źródło
Myślę, że jeśli połączysz wszystkie drobiazgi razem, dostaniesz coś, co działa dla ciebie. Jest to system Windows 2003, który daje mi migawkę uruchomionych procesów w odpowiedzi na wyzwalacz z monitora wydajności:
Plik wyjściowy jest nazywany jednym ciągiem bez ograniczników.
źródło
Powinno działać.
Z drugiej strony - być może masz
date
dostępne polecenie (nie znam systemu Windows). Jeśli tak, po prostu wykonaj:źródło
nie jestem pewien, czy ci pasuje, ale mój kod jest
źródło