0

我正在编写一个脚本,我需要以秒而不是毫秒从系统中读取时间。我注意到某些计算机的区域设置不同,这确实给我带来了一些问题,例如一台计算机的日期显示为01/01/2020,另一台计算机01.01.2020使用命令%date%等。

如果我使用命令,同样的事情%time%,一些计算机显示时间喜欢12:13:14,15,一些喜欢12:13:14.16

现在,为了解决这个问题,我必须创建一个变量来读取分隔符号并输出正确的符号。对于命令 date 这很简单。

有时间我有这个命令:

FOR /F "tokens=3 delims=0123456789" %%A IN ('echo %time%') DO set timeSeparatorSymbol=%%A

如果计算机具有毫秒分隔符符号,.则输出为:

timeSeparatorSymbol=.

哪个好。

如果计算机具有毫秒分隔符符号,,则输出为:

timeSeparatorSymbol=

如您所见,未创建变量,我正在努力弄清楚为什么逗号不接受它作为变量。

无论区域设置如何,我都需要此脚本才能使以下脚本适用于所有计算机:

for /f "tokens=3 delims=:%timeSeparatorSymbol%" %%A in ('echo %time%') do set second=%%A

先感谢您。

4

3 回答 3

0

如果您搜索过这个网站,您会发现大量的问题和答案需要一种以一致格式返回日期和/或时间的方法。

下面的方法显示了一种以hh:mm:ss格式获取当前时间的方法,它使用@Mofi在他们最近的评论robocopy.exe中链接:

@Set "TimeStamp="
@For /F "Tokens=2" %%A In (
    '^""%__AppDir__%Robocopy.exe" /NJH /L "\|" Null^"'
) Do @If Not Defined TimeStamp Set "TimeStamp=%%A"
@Echo=%TimeStamp%
@Timeout 5

如果您不希望变得健壮的“复杂性”,请尝试以下操作:

For /F "Tokens=2" %%A In ('RoboCopy /NJH /L "\|" Null^|Find ":"') Do Set "TimeStamp=%%A"


如果您只想检索秒数,即ss您的问题不清楚)

@Set "Seconds="
@For /F "Tokens=4Delims=: " %%A In (
    '^""%__AppDir__%Robocopy.exe" /NJH /L "\|" Null^"'
) Do @If Not Defined Seconds Set "Seconds=%%A"
@Echo=%Seconds%
@Timeout 5

……再一次没有“并发症”:

For /F "Tokens=4Delims=: " %%A In ('RoboCopy /NJH /L "\|" Null^|Find ":"') Do Set "Seconds=%%A"
于 2020-01-27T11:30:22.717 回答
0

重新阅读您的问题后,根据我的解释,您唯一的问题是秒和毫秒之间分隔符类型的差异,并且它们始终是,or .,我将提供以下替代方案:

For /F "Tokens=3 Delims=:" %%A In ("%TIME:,=.%") Do Set "second=%%~nA"

如果您希望时间戳为 hms,那么这可能就足够了:

For %%A In ("%TIME:,=.%") Do Set "TimeStamp=%%~nA"

如果您只想确保%TIME%始终使用 a.而不是,直接使用变量,如下所示:%TIME:,=.%

于 2020-01-27T13:32:19.097 回答
0

你的问题有很大的猜测和解释空间。

据我了解,您需要日期/时间分隔符来构建有效的日期/时间字符串。

您声称格式始终hh:mm:ss?xx如此,因此您可以使用以下命令轻松提取所需的分隔符 ( ?):

set "timeSeparatorSymbol=%time:~8,1%"

你也一样date声称它是“总是” DD?MM?YYYY

set "dateSeparatorSymbol=%date:~2,1%"

当然,当日期格式与您的声明不同时,这不起作用(例如Mon, 27.01.2020.%date:~-5,1%只要日期字符串以 4 位年份结尾并且之前有分隔符就可以工作)

于 2020-01-27T13:55:51.647 回答