2

В командной строке Windows я могу напечатать год текущей даты, выполнив это:

echo %date:~10,4%

результат: 2016

Конечно, в зависимости от того, как даты отображаются на вашем языке, вам нужно изменить 10 или 4 чтобы получить правильную подстроку. Но это нормально.

То, что я хочу напечатать, это 2015 , то есть 2016 - 1 . Итак, как мне вычесть 1 из только что захваченной строки? Нет проблем в использовании вспомогательных переменных.

2 ответа2

3

Как вы заявили, нет проблем с использованием другой переменной, вы можете сделать это следующим образом (в настройках моей среды используется другая подстрока)

set /a "yearminus1=%date:~6,10%-1"

Для вас, я предполагаю, что это будет set /a "yearminus1=%date:~10,4%-1" , но я не могу проверить это.

Использование параметра /a с set указывает, что вы будете давать выражение для оценки, а не просто сохранять выражение в переменной как есть.

Можно использовать следующие операторы:

   +   Add                set /a "_num=_num+5"
   +=  Add variable       set /a "_num+=5"
   -   Subtract (or unary)set /a "_num=_num-5"
   -=  Subtract variable  set /a "_num-=5"
   *   Multiply           set /a "_num=_num*5"
   *=  Multiply variable  set /a "_num*=5"
   /   Divide             set /a "_num=_num/5"
   /=  Divide variable    set /a "_num/=5"
   %   Modulus            set /a "_num=5%%2"
   %%= Modulus            set /a "_num%%=5" 
   !   Logical negation  0 (FALSE) ⇨ 1 (TRUE) and any non-zero value (TRUE) ⇨ 0 (FALSE)
   ~   One's complement (bitwise negation) 
   &   AND                set /a "_num=5&3"    0101 AND 0011 = 0001 (decimal 1)
   &=  AND variable       set /a "_num&=3"
   |   OR                 set /a "_num=5|3"    0101 OR 0011 = 0111 (decimal 7)
   |=  OR variable        set /a "_num|=3"
   ^   XOR                set /a "_num=5^3"    0101 XOR 0011 = 0110 (decimal 6)
   ^=  XOR variable       set /a "_num=^3"
   <<  Left Shift.    (sign bit ⇨ 0)
   >>  Right Shift.   (Fills in the sign bit such that a negative number always remains negative.)
                       Neither ShiftRight nor ShiftLeft will detect overflow.
   <<= Left Shift variable     set /a "_num<<=2"
   >>= Right Shift variable    set /a "_num>>=2"

  ( )  Parenthesis group expressions  set /a "_num=(2+3)*5"
   ,   Commas separate expressions    set /a "_num=2,_result=_num*5"

Отсюда

0

Как мне установить переменную, которая является годом прошлого года?

Используйте следующий пакетный файл (test.cmd):

@echo off
setlocal
setlocal enabledelayedexpansion
for /f "usebackq delims=/ tokens=3 " %%i in (`date /t`) do (
  echo Current year is %%i
  set /a "_lastyear=%%i-1"
  echo Last year is !_lastyear!
  )
endlocal

Выход:

F:\test>test
Current year is 2016
Last year is 2015

В вашем конкретном случае вы сможете использовать следующее:

set_year=%date:~10,4%
set /a "_lastyear=%%i-1"
echo %_lastyear%

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • дата - отображение или изменение даты.Показать или изменить дату.
  • for /f - Циклическая команда против результатов другой команды.
  • set - отображать, устанавливать или удалять переменные окружения CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.

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