在 Windows 命令行中,我可以通过执行以下操作来打印当前日期的年份:
echo %date:~10,4%
成绩:2016
当然,根据您语言中日期的显示方式,您需要更改10
或4
以获取正确的子字符串。但没关系。
我想要它打印的是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 会话期间保留。