1

Я ничего не знаю о пакетных файлах, и мне нужно автоматизировать приложение. Приложение имеет два поля

  1. Сегодняшняя дата
  2. Вчерашняя дата

В командном файле у меня есть местоположение приложения и мой логин.
И дополнительно мне нужны эти две даты. Как я могу получить даты через командный файл?

2 ответа2

1

В системе Microsoft Windows текущую дату можно получить с помощью команды date /t (параметр /t запрещает команде запрашивать изменение даты) или с помощью echo %date% для отображения содержимого даты переменная окружения. Тем не менее, оба из них отображают дату в виде DDD mm/dd/yyyy , если система использует формат даты США для отображения дат, где ДДД - это день недели, представленный трехбуквенным сокращением, например, «Чт ", mm - двузначное представление месяца, например," 08 "для августа, dd - день, а yyyy - год.

C:\>date /t
Thu 08/06/2015

C:\>echo %date%
Thu 08/06/2015

Вы можете переформатировать представление даты, которая хранится в переменной среды %date% . Например, если вы хотите указать дату в виде ггггммдд, вы можете использовать команду, подобную приведенной ниже, где переменная YYYYMMDD установлена для хранения переформатированной даты; имя переменной может быть любым, например mydate и т. д.

C:\>set YYYYMMDD=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%

C:\>echo %YYYYMMDD%
20150806

Аргументы подстроки для извлечения элементов строки даты находятся в переменной формата %variable:~startposition,numberofchars% , поэтому, если "T" в четверг в строке "чт 08/06/2015" находится в позиции 0, 10-е число символ "2" 2015 года, и я хочу 4 символа, то есть "2015", поэтому %DATE:10,4% дадут мне эти символы. Или же вы можете думать о первом числе как о количестве пропускаемых символов, т. %variable:~num_chars_to_skip,numberofchars% . Затем я могу добавить %DATE:~4,2% чтобы получить "08" для месяца, за которым следует %DATE:~7,2% чтобы извлечь день, т. Е. "06", если дата - 6 августа 2015 г., представленная в переменная %DATE% как «чт 08/06/2015». Ссылка с дополнительными ссылками

Если ваш пакетный файл может использоваться в системах других стран, вам может потребоваться внести изменения в другой стиль отображения даты, отличный от месяца / дня / года, если вы переформатируете дату, а не просто отображаете ее в каком-либо формате. по умолчанию для системы. Если вы выполните команду reg query , вы увидите формат по умолчанию для системы. Например:

C:\>reg query "HKCU\Control Panel\International" /v sShortDate

HKEY_CURRENT_USER\Control Panel\International
    sShortDate    REG_SZ    M/d/yyyy

В приведенном выше примере я вижу, что система использует формат месяц / день / год. Настройки для страны можно увидеть с помощью reg query "HKCU\Control Panel\International" /v sCountry , но это может быть не то, о чем вам следует беспокоиться, если вы знаете, что локальные системы используют представление даты по умолчанию.

Для получения способов получения вчерашней даты существует несколько сообщений о переполнении стека, в том числе упомянутое DavidPostill:

Как получить вчерашнюю дату в командном файле?

как получить вчерашнюю дату в DOS

Пакетное программирование DOS: как получить и отобразить вчерашнюю дату

0

Немного ОТ, но если вы можете использовать PowerShell вместо CMD.EXE, все становится намного проще, например, вы можете использовать выражение Get-Date и спецификатор UFormat , как описано здесь , чтобы делать именно то, что вы хотите. Powershell также облегчает выполнение разумной арифметики в отношении дат, например, он знает, что день до 1 января 2025 года - это не 0 января 2025 года.

PowerShell является стандартной версией Windows, по крайней мере, до Windows 7.

Примеры (здесь PS > это приглашение в интерактивном окне PowerShell ISE):

PS > $oldfile = "backup." + (get-date (get-date).addDays(-1) -UFormat "%Y%m%d")
PS > $newfile = "backup." + (get-date -UFormat "%Y%m%d")

PS > echo $oldfile
backup.20171027
PS > echo $newfile
backup.20171028

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .