我希望使用批处理命令来parsing%date%variables,得到年/月/日,如下所示:
>echo %date Tue 08/18/2015
我想parsing%a = 2015,%b = 08,%c = 18,所以我有如下的.bat:
@echo off rem Get current date and calculate DayOfWeek for /F "tokens=1-3 delims=/" %%a in ("%date%") do ( set /A mm=%%a, dd=%%b, yy=%%c )
但它没有执行,说:
Missing operator.
如何解决我的.bat文件? 非常感谢。
使用"delims=/"
, "Tue 08/18/2015"
Tue 08
"Tue 08/18/2015"
"delims=/"
中的第一个标记结果显示为Tue 08
。 使用
@echo off rem Get current date and calculate DayOfWeek for /F "tokens=2-4 delims=/ " %%a in ("%date%") do ( set /A "_mm=1%%a %% 100" set /A "_dd=1%%b %% 100" set /A _yy=%%c ) set _
输出:
==>D:\bat\SO\32062701.bat _dd=18 _mm=8 _yy=2015
set /A "mm=1%%a %% 100"
技巧防止Invalid number. Numeric constants are either decimal (17), hexadecimal (0x11), or octal (021)
Invalid number. Numeric constants are either decimal (17), hexadecimal (0x11), or octal (021)
错误。 读整个 set /?
或http://ss64.com/nt/set.html来解释相同数字的十进制( 17
)与十六进制( 0x11
)与八进制( 021
)的表示。
八进制表示法可能会引起混淆 – 所有以零开头的数字值被视为八进制数,但
08
和09
不是有效的八进制数字。 例如,SET /a _month=07
将返回值7
,但SET /a _month=09
将返回一个错误。
1%%a
意味着字符串1
和(评估)的连接。 %%a
:如果%%a
计算结果为08
则结果为108
。 %%
是模数运算符的批处理表示法。 因此, 1%%a %% 100
意味着除以(整数)除以108
之后的余数,即8
。
要使脚本语言环境独立,请从WMIC输出中提取值:
wmic os get LocalDateTime | find "."
或尝试
wmic path Win32_LocalTime get /value
解析%date%
变量是不可靠的,因为格式会根据机器上的区域/区域/用户设置而变化。
这是获得可靠的日期字符串的一种方法。
@echo off rem The four lines below will give you reliable YY DD MM YYYY HH Min Sec MS variables in XP Pro and higher. for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" & set "MS=%dt:~15,3%" set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%" & set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%-%MS%" echo datestamp: "%datestamp%" echo timestamp: "%timestamp%" echo fullstamp: "%fullstamp%" pause
如果你只是想在你的电脑上获得DayOfWeek,你有两个简单的解决方案。 第一个是直接从%date%变量“Tue 08/18/2015” :)
的第一个单词中获取:
for /F %%a in ("%date%") do set dow=%%a
但是如果你想执行数字计算,你可以使用该方法将日期转换为这个答案中显示的Julian Day Number:
@echo off setlocal rem Modify next line accordingly to your locale format (this one use "Dow MM/DD/YYYY") for /F "tokens=2-4 delims=/ " %%a in ("%date%") do set /A mm=1%%a-100, dd=1%%b-100, yyyy=%%c rem Convert the Date to Julian Day Number, and get its Day Of Week (0=Sunday, ..., 6=Saturday) set /A a=(mm-14)/12, jdn=(1461*(yyyy+4800+a))/4+(367*(mm-2-12*a))/12-(3*((yyyy+4900+a)/100))/4+dd-32075, dow=(jdn+1)%%7 rem Show the result echo Day of week: %dow%
set
命令使用其他答案中解释的技巧来正确获取大于07的以0开头的数字。 例如,如果mont是08
,那么set /A mm=1%%a-100
被set /A mm=108-100
, set /A mm=108-100
给出了8。
但是,如果您想在不同的计算机上使用这种方法,可能会有不同的区域设置日期格式,那么您必须使用foxidrive建议的方法。