如何在 Windows 命令行中从数字字符串中减去值?

如何在 Windows 命令行中从数字字符串中减去值?

在 Windows 命令行中,我可以通过执行以下操作来打印当前日期的年份:

echo %date:~10,4%

成绩:2016

当然,根据您语言中日期的显示方式,您需要更改104以获取正确的子字符串。但没关系。

我想要它打印的是2015,也就是2016 - 1。那么,如何从我刚刚捕获的子字符串中减去 1?使用辅助变量没有问题。

答案1

正如您所说,使用另一个变量没有问题,您可以按如下方式执行操作(我的环境设置使用不同的子字符串)

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"

这里

答案2

如何设置去年年份的变量?

使用以下批处理文件(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%

进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 日期- 显示或更改日期。显示或更改日期。
  • 对于/f- 循环命令以执行另一个命令的结果。
  • - 显示、设置或删除 CMD 环境变量。使用 SET 所做的更改将仅在当前 CMD 会话期间保留。

相关内容