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

时间:2012-08-17 17:19:52

标签: 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,如果2012年是fyear。但我还需要的是小时和秒。我一直在猜测和谷歌搜索太久了,我需要专业的帮助。

任何指针?

谢谢!

2 个答案:

答案 0 :(得分:2)

rene答案不适用于所有语言环境。有些使用逗号,有些使用句号作为小数点。此外,该解决方案可以压缩为单个FOR语句。以下内容适用于所有语言环境。小数秒实际上是厘秒(1/100),而不是毫秒(1/1000)。

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

如果您想使用这些值进行数学计算,那么您还有其他工作要做。小于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 :(得分:0)

根据%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)