我已将我的问题修改为以下评论指向新方向。我试过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
答案 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。