使用WMIC(无效动词切换)设置日期

时间:2015-04-23 01:50:55

标签: date batch-file wmic

我已将我的问题修改为以下评论指向新方向。我试过date.exe但它无法在所有实例中设置命令,即使它返回了时间戳。

所以我转到了WMIC。但是,我似乎也无法设定日期。但我相信这可能是我对WMIC的理解。谁能发现我的方法中的任何错误?

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "trail=%dt:~8%" & set "backdt=%dt:~0,8%"
set "targetstamp=20150419%trail%"
echo %targetstamp%
targetstamp
wmic OS Set localdatetime=%targetstamp%
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "ndt=%%a"
set "newtrail=%ndt:~8%"
echo %backdt&&newtrail%
wmic OS Set localdatetime=%backdt%%newtrail%
pause

2 个答案:

答案 0 :(得分:1)

代码中的一个偏移量不正确:

set BackupDate=%date:~0,6%%date:~10,2%

现在,

C:\>set bd=%date:~0,6%%date:~10,2% && echo %bd%
23.04.15

答案 1 :(得分:1)

好的,所以你得到当前时间,在保持时间和TZ偏移的同时替换日期,设置日期时间,然后在wmic os set命令之后立即执行一些工作,然后恢复当前时间。

您的代码是正确的。请注意,为了通过wmic设置日期/时间,您需要使用提升的权限运行命令,例如在Windows-Start-“cmd”中 - 右键单击​​ - “以管理员身份运行”。

修改
不,你看到的是cmd.exe在处理wmic的Unicode输出后留下的内容。它需要一些重的拉线来摆脱输出中额外的'\ r' 这现在在我的电脑上运行没有错误:

    @echo off
    setlocal

    set dt=
    for /f "tokens=*" %%A in ('wmic OS Get localDateTime /value ^| findstr "."') do @set dt=%%A
    set dt=%dt:~14,-1%
    set "trail=%dt:~8%"
    set "saveddt=%dt:~0,8%"
    set targetstamp=20150419%trail%
    wmic OS Set localdatetime=%targetstamp%

    REM do some work...
    pause

    set dt=
    for /f "tokens=*" %%A in ('wmic OS Get localDateTime /value ^| findstr "."') do @set dt=%%A
    set dt=%dt:~14,-1%
    set "newtrail=%dt:~8%"
    wmic OS Set localdatetime=%saveddt%%newtrail%

在特权CMD中运行,它报告已设置新日期。但是,我的电脑上没有任何变化 - wmic OS set localdatetime只是不改变日期。 YMMV。