Переменная предыдущего дня в командном файле - PullRequest
3 голосов
/ 15 августа 2011

Мне нужно написать командный файл, который вызывает команду и передает параметр даты за предыдущий день.

Пример:

[функция] CCYYMMDD

Я не могу найти ни одного примера этого. И моя компания не любит, чтобы мы использовали бесплатное программное обеспечение, поэтому мне действительно нужно, чтобы решение было чисто на основе DOS.

Ответы [ 2 ]

2 голосов
/ 15 августа 2011

Вы можете начать с Достижения: дата и время
Существуют функции для вычисления даты по порядковому количеству дней и наоборот.
Таким образом, это приводит к

call :jdate "%date%" JD_result
set /a prev_day=JD_result-1
call :jdate2date %prev_day% YYYY MM DD
echo Previous day is %DD%.%MM%.%YYYY%
0 голосов
/ 15 августа 2011

Я не могу найти оригинальное решение, которое у меня было для этого, но я нашел что-то на сайте Роба Ван Дер Вуде , которое прекрасно справится с этой задачей.

Существует ошибка вфайл, размещенный там, из-за того факта, что SET /A будет обрабатывать строки, начинающиеся с нуля, как восьмеричные, и это вызывает проблемы, когда даты дня / месяца начинаются с нуля.

Если файлы связанывыше, но измените код процедуры: JDate (строка 157) на:

SET MonthChecker1=%2
SET MonthChecker2=%MonthChecker1:~0,1%
IF %MonthChecker2%==0 (
  SET MonthChecker3=%MonthChecker1:~1,1%
) ELSE (
  SET MonthChecker3=%MonthChecker1%
)
SET DayChecker1=%3
SET DayChecker2=%DayChecker1:~0,1%
IF %DayChecker2%==0 (
  SET DayChecker3=%DayChecker1:~1,1%
) ELSE (
  SET DayChecker3=%DayChecker1%
)
SET /A Month1 = ( %MonthChecker3% - 14 ) / 12
SET /A Year1  = %1 + 4800
SET /A JDate  = 1461 * ( %Year1% + %Month1% ) / 4 + 367 * ( %MonthChecker3% - 2 -12 * %Month1% ) / 12 - ( 3 * ( ( %Year1% + %Month1% + 100 ) / 100 ) ) / 4 + %DayChecker1% - 32075
FOR %%A IN (Month1 Year1) DO SET %%A=
GOTO:EOF

Это проверено и работает на коробке 2K8R2.Это определенно стоит использовать по сравнению с другими решениями, поскольку у него есть возможность определить, какой формат даты в хост-системе взят из реестра, чего не может найти ни одно другое решение, которое я нашел.

...