Я пытаюсь создать zip-файл из сценария пакетной обработки. Мне нужен он, чтобы быть названным как archive_.zip
К сожалению, это не работает над системами с датой, отформатированной как y/m/d из-за наклонных черт:
zip some_options "archive_%DATE%.zip"
%DATE%
переменная расширяется до чего-то как
Mon 09/28/2009
У меня есть доступ к gnuwin32 пакету, таким образом, я мог использовать, скажем, sed
заменять пробелы и наклонные черты тире. Проблема, как я использовал бы вывод sed
создать имя файла архива zip?
В Unix (удар) можно использовать одинарные левые кавычки для оценивания на месте команда и использовать ее вывод в другой команде, чем-то как:
zip [...] archive_`echo %DATE% | sed -e s/.../.../`.zip
Действительно ли там что-нибудь подобно доступный в Windows?
Или возможно существует способ установить переменную на возвращенное значение sed
и используйте это для построения имени файла?
Можно заменить символы в переменных при помощи:
set _date=%DATE:/=-%
Я всегда использую:
For /f "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDate=%%a%%b%%c%%d
Затем CDate будет Sat02182012. Если Вы хотите сделать это большим количеством поддающегося сортировке набора CDate к %% d-%% b-%% c, таким образом, это будет 18.02.2012
For /f "tokens=1,2 delims=:" %%f in ('time /t') do set CTime=%%f%%g
Сделать папку/файл даты и времени дружественной.
Я отправил ответ на очень похожий вопрос здесь. Плевание даты в полях сделано в 1 строке вместо нескольких строк в ответе harrymc.
Интересная часть:
@echo off
for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd=%%k%%j%%i
echo Date: %yyyymmdd%
И предупреждение все еще релевантно:
Предупреждение: формат даты (yyyymmdd = %% k %% j %% i) зависит от Ваших региональных настроек. Поскольку я использую французский формат даты (dd/mm/yyyy), я должен использовать "%% k %% j %% я" как формат (%% я = день, %% j = месяц, %% j = год).
Если Ваши региональные настройки установлены на американский стиль (mm/dd/yyyy), необходимо использовать "%% k %% я %% j" (%% я = месяц, %% j = день, %% j = год).
Так как Ваш вопрос отмечен как Windows, я нашел это решение, которое работает в старых добрых .bat файлах:
"Windows Batch File (.bat) для получения текущей даты в формате MMDDYYYY",
и может, вероятно, быть адаптирован к Вашему случаю:
эхо на
@REM быстрый пакет даты Seamonkey (формат MMDDYYYY)
Установки @REM %date переменная
@REM Сначала анализирует месяц, день и год в мм, dd, yyyy форматы и затем объединяется, чтобы быть MMDDYYYYДЛЯ/F “TOKENS=1* DELIMS =” %% В (’DATE/T’) ДЕЙСТВИТЕЛЬНО УСТАНАВЛИВАЮТ CDATE = %% B
ДЛЯ/F “TOKENS=1,2 eol =/DELIMS =/” %% В (’DATE/T’) ДЕЙСТВИТЕЛЬНО УСТАНАВЛИВАЮТ мм = %% B
ДЛЯ/F “TOKENS=1,2 DELIMS =/eol = /” %% В (’повторяют %CDATE %’) ДЕЙСТВИТЕЛЬНО УСТАНАВЛИВАЕТ dd = %% B
ДЛЯ/F “TOKENS=2,3 DELIMS =/” %% В (’повторяют %CDATE %’) ДЕЙСТВИТЕЛЬНО УСТАНАВЛИВАЕТ yyyy = %% дата Bv vSET = мм % %% dd %% yyyy %
это действительно только устанавливает %date переменную, чтобы быть сегодняшней датой в формате MMDDYYYY, таким образом, это можно назвать позже в сценарии.
Править
Найденный лучшим синтаксисом. Учитывая, что моя дата сегодня "понедельник 28.09.2009":
день набора = Дата %: ~ 0,2%
месяц набора = Дата %: ~ 7,2%
год набора = Дата %: ~ 10,4%
Для/f "tokens=1,2,3,4,5 обеззоливает =/". %% в ('date/T') действительно устанавливают CDate = %% d-%% b-%% c
Данные @echo = %CDate %
Это находится в День месяца года, который наиболее распространен теперь дни
zip [...] archive_`echo %DATE% | tr / -`.zip
Должен работать.
С другой стороны - возможно, Вы имеете date
управляйте доступный (я не знаю Windows). Если да, то просто сделайте:
zip [...] archive_`date +'%Y-%m-%d'`.zip