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