Ошибка вывода даты в пакетном скрипте только 8-го числа - PullRequest
0 голосов
/ 07 сентября 2018

Я сейчас запускаю скрипт ниже, чтобы получить текущий день минус 1 и текущий месяц. Он прекрасно работает для всех дней и месяцев, кроме 8 числа каждого месяца и августа каждого года. Я должен изменить сценарий, чтобы установить его вручную на август. Кто-нибудь знает почему и есть ли исправление.

SET m=%date:~4,2%
SET /A m -= 1

SET m=0%m%

REM ****** SET m=08 this was used because the date was not right ******

REM SET m=08

SET currMon=%date:~4,2%/%date:~10,4%

REM ****** SET PriorMon=12/2017 this was used for Year End because the date was not right ******

REM SET PriorMon=08/2018

SET PriorMon=%m:~-2%/%date:~10,4%

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Расчет правильной даты в чистой партии возможен , но утомителен. Ваш подход основан на возможном неизвестном языковом стандарте / формате, зависящем от пользовательских настроек.

Из Win7 на Powershell доступен в качестве инструмента:

В строке cmd:

For /f "usebackq" %A in (`powershell -Nop -C "(Get-Date).AddDays(-1).ToString('MM\/yyyy')"`) Do Set Yesterday=%A

В пакетном файле:

For /f "usebackq" %%A in (`
    powershell -Nop -C "(Get-Date).AddDays(-1).ToString('MM\/yyyy')"
`) Do Set Yesterday=%%A
Echo Yesterday=%Yesterday%

Измените строку формата по своему вкусу:

dd   = day   2 places
MM   = month 2 places
yyyy = year  4 places

Другие символы должны быть экранированы обратной косой чертой.

0 голосов
/ 07 сентября 2018

Это гибридный vb / batch скрипт. Это правильный способ получить дату -1 или любое количество дней, которое вы хотите:

@echo off
set day=-1
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\*%~n0.vbs"
set "yyyy=%result:~0,4%"
set "mm=%result:~4,2%"
set "dd=%result:~6,2%"
set "final=%dd%-%mm%-%yyyy%"
echo %final%

Я просто повторяю окончательный результат, который до сегодняшней даты (для меня, как и 7-го числа) должен повторяться 06-09-2018

Вы можете изменить формат %final% по своему усмотрению в соответствии с вашей датой.

...