使用 WMIC 设置日期(无效动词开关)

Set date with WMIC (Invalid Verb Switch)

我修改了我对下面的评论的问题,为我指明了新的方向。我试过 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

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

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

现在,

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

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

您的代码是正确的。请注意,为了通过 wmic 设置 date/time,您需要 运行 具有提升权限的命令,例如 Windows-开始-"cmd"-右键单击-"Run as Administrator"。

编辑:
不,你看到的是 cmd.exe 在处理 wmic 的 Unicode 输出后留下的东西。它需要一些沉重的字符串拉动来摆脱输出中额外的'\r'。
现在 运行ning 在我的 PC 上没有错误:

    @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 中它报告已设置新日期。但是,我的 PC 上没有任何变化 - wmic OS set localdatetime 只是日期没有改变。 YMMV.