1

我需要修改一个已退出的开发人员编写的 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。但我还需要小时和秒。我一直在猜测和谷歌搜索太久了,我需要专业的帮助。

任何指针?

谢谢!

4

2 回答 2

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"
于 2012-08-18T14:44:13.180 回答
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)
于 2012-08-17T17:39:54.840 回答