Datetime 修改批处理脚本以从%currentdate%获取小时和分钟

Datetime 修改批处理脚本以从%currentdate%获取小时和分钟,datetime,batch-file,Datetime,Batch File,我需要修改一个Windows批处理文件,该文件是由一名已退出的开发人员编写的。以下是已经存在的部分内容: set date/t=%currentdate% for /f "tokens=2-4 delims=/ " %%a in ('date/t') do ( set fmonth=%%a) & (set fdate=%%b) & (set fyear=%%c) 我有点,几乎不理解它是如何工作的,它确实按照设计工作。如果今天运行,则fmonth为08,fdate为17,fyea

我需要修改一个Windows批处理文件,该文件是由一名已退出的开发人员编写的。以下是已经存在的部分内容:

set date/t=%currentdate%
for /f "tokens=2-4 delims=/ " %%a in ('date/t') do (
set fmonth=%%a) & (set fdate=%%b) & (set fyear=%%c)
我有点,几乎不理解它是如何工作的,它确实按照设计工作。如果今天运行,则fmonth为08,fdate为17,fyear为2012。但我需要的是时间和秒。我已经猜测和谷歌搜索太久了,我需要专业的帮助

有什么建议吗


谢谢

基于%time%的分割

set time=%time%:
for /f "tokens=1-3,* delims=:" %%k in ("%time%") do (set fhour=%%k) & (set fminute=%%l) & (set fsecfrac=%%m)
for /f "tokens=1-3,* delims=," %%k in ("%fsecfrac%") do (set fsecond=%%k) & (set fmsec=%%l)

答案并非适用于所有地区。有些使用逗号,有些使用句点作为小数点。另外,该解决方案可以压缩为一个FOR语句。以下内容应适用于所有地区。分数秒实际上是厘米秒(1/100),而不是毫秒(1/1000)

若你们想用这些值进行数学计算,那个么你们还有额外的工作要做。小于10的值将以零为前缀,这似乎不是问题。但SET将任何以零为前缀的数字视为八进制表示法,08和09不是有效的八进制数字

有几种方法可以去掉前导零,但最方便的方法是使用一些数学知识。只需在值前面加上100,然后取模100(除以100后的余数)。所有赋值都可以用一个SET/a语句完成

for /f "tokens=1-4 delims=:.," %%A in ("%time%") do set /a "fhour=100%%A%%100, fmin=100%%B%%100, fsec=100%%C%%100, fcsec=100%%D%%100"

前缀可以是
1
,除非我遗漏了什么。除此之外,我完全同意。@AndriyM-我考虑过这个问题,我相信这在几分钟和几秒钟内都是正确的。但我不确定小时是否总是以0为前缀。无论哪种方式,它的前缀都可以是10而不是100。我相信100来自我见过的一个通用解决方案,其中可能有0、1或2个数字,可能有0个前缀,可能没有。我现在明白了,谢谢你的解释,它非常有意义。
for /f "tokens=1-4 delims=:.," %%A in ("%time%") do set /a "fhour=100%%A%%100, fmin=100%%B%%100, fsec=100%%C%%100, fcsec=100%%D%%100"