找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: ygqiang

[问题求助] [已解决]本机同步网络日期时间的vbs代码,以前可用。现在出现错误提示。求解决。

[复制链接]
发表于 2017-2-13 16:24:31 | 显示全部楼层
回复 15# ygqiang


    妹阿,讓你自己刪,可也得保證JS語句正常阿,你刪得 if else 都不能保持正常姿勢了。

以下是注釋掉提示的代碼:
  1. //文件名称:SyncNetTime.js
  2. //功能说明:同步本机时间与网络时间
  3. //使用方法:Cscript.exe //nologo SyncNetTime.js
  4. //测试环境:系统 Win10 x64 时间 17/2/10 23:35 用户 Yu2n
  5. //更新内容:Fix 获取网络时间,防止 eval 安全问题

  6. //以管理员运行
  7. function GetSystemVersion() {
  8.         var os = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem");
  9.         for (var e = new Enumerator(os); ! e.atEnd(); e.moveNext()) {
  10.                 var v = e.item().Version;
  11.                 var ss = v.split('.');
  12.                 return ss[0] + ss[1];
  13.         }
  14.         return - 1;
  15. }
  16. if (GetSystemVersion() >= 60) {
  17.         var cmd = WScript.ScriptFullName;
  18.         if (cmd.substring(cmd.length - 3) != ".jS") {
  19.                 var Shell = new ActiveXObject("Shell.Application");
  20.                 Shell.ShellExecute("wscript.exe", """ + cmd.substring(0, cmd.length - 3) + ".jS"", "", "runas", 1);
  21.                 WScript.Quit(0);
  22.         }
  23. }

  24. //获取网络时间,从 www.beijing-time.org 页面,使用正则验证结果,防止 eval 安全问题
  25. var getNetDate = function() {
  26.         var s='';
  27.         try{
  28.                 var http = new ActiveXObject("Microsoft.XMLHTTP");
  29.                 http.open("GET", "http://www.beijing-time.org/time15.asp?rnd=" + (new Date()), false);
  30.                 http.send();
  31.                 s = http.responseText;
  32.         }catch(e){};
  33.         var re = /^[\s\S]*(nyear\=\d+;[\r\n]+)(nmonth\=\d+;[\r\n]+)(nday\=\d+;[\r\n]+)(nwday\=\d+;[\r\n]+)(nhrs\=\d+;[\r\n]+)(nmin\=\d+;[\r\n]+)(nsec\=\d+;)[\s\S]*$/igm;
  34.         if (re.test(s) == true) {
  35.                 eval(s.replace(re,'$1$2$3$5$6$7'));        //使用正则替换结果,防止 eval 安全问题
  36.                 return new Date(nyear+'/'+nmonth+'/'+nday+' '+nhrs+':'+nmin+':'+nsec);
  37.         } else {
  38.                 //WScript.Echo("警告:获取网络时间失败!")
  39.                 WScript.Quit(0);
  40.         }
  41. };

  42. //设置时间
  43. function ChangeDate()
  44. {
  45.         var WmiService, ComputerName, OSList, OSEnum, OS, DateTime;
  46.         ComputerName = ".";
  47.         WmiService = GetObject ("winmgmts:{impersonationLevel=impersonate, (Systemtime)}!//" + ComputerName + "/root/cimv2");
  48.         OSList = WmiService.InstancesOf ("Win32_OperatingSystem");
  49.         DateTime = new ActiveXObject ("WbemScripting.SWbemDateTime");
  50.         OSEnum = new Enumerator (OSList);
  51.         for ( ; !OSEnum.atEnd(); OSEnum.moveNext())
  52.         {
  53.                 OS = OSEnum.item();
  54.                 var dtNewDate = getNetDate();        //获取网络时间
  55.                 DateTime.Value = OS.LocalDateTime;
  56.                 DateTime.Year = dtNewDate.getFullYear();
  57.                 DateTime.Month = dtNewDate.getMonth() + 1;
  58.                 DateTime.Day = dtNewDate.getDate();
  59.                 DateTime.Hours = dtNewDate.getHours();
  60.                 DateTime.Minutes = dtNewDate.getMinutes();
  61.                 DateTime.Seconds = dtNewDate.getSeconds();
  62.                 if (OS.SetDateTime(DateTime.Value) != 0) {
  63.                         //WScript.Echo("警告:设置系统时间失败!");
  64.                 } else {
  65.                         //WScript.Echo("提示:设置成功。当前时间:" + new Date(DateTime.GetVarDate()).toLocaleString());
  66.                 };
  67.         }
  68. }
  69. ChangeDate();
  70. WScript.Quit(0);
复制代码
 楼主| 发表于 2017-2-13 19:30:48 | 显示全部楼层
回复 16# yu2n


    非常感谢。
 楼主| 发表于 2017-10-16 16:12:12 | 显示全部楼层
本帖最后由 ygqiang 于 2017-10-16 16:13 编辑
  1. /*&cls
  2. @echo off
  3. rem 去掉下句中的echo;方可同步,否则只显示
  4. for /f "tokens=1*" %%i in ('cscript -nologo -e:jscript "%~f0"') do echo;date %%i&echo;time %%j
  5. for /f "tokens=1*" %%i in ('cscript -nologo -e:jscript "%~f0"') do date %%i&time %%j
  6. 1pause&exit
  7. */
  8. function az(n){return n<10?'0'+n:n}
  9. var http = new ActiveXObject('MSXML2.XMLHTTP');
  10. http.open('POST','http://www.114time.com/api/time.php', false)
  11. http.send();
  12. var dt = new Date(http.ResponseText*1);
  13. //减去12个小时上句改为var dt = new Date(http.ResponseText*1-12*3600*1000);
  14. Y = dt.getFullYear();
  15. M = dt.getMonth()+1;
  16. D = dt.getDate();
  17. h = dt.getHours();
  18. m = dt.getMinutes();
  19. s = dt.getSeconds();
  20. WSH.echo(Y+'/'+az(M)+'/'+az(D)+' '+az(h)+':'+az(m)+':'+az(s));
复制代码
 楼主| 发表于 2017-10-16 16:12:37 | 显示全部楼层
  1. @echo off
  2. (
  3.     echo;With CreateObject("Microsoft.XMLHTTP"^)
  4.     echo;   .open "GET", "http://www.114time.com/api/time.php", False
  5.     echo;   .send
  6.     echo;   ms = .responseText*1
  7.     echo;End With
  8.     echo;WSH.Echo DateAdd("s", left(ms, len(ms^)-3^)+480*60, "1970-1-1 0:0:0"^)
  9. )>%tmp%\dt.vbs

  10. for /f "tokens=1*" %%i in ('cscript -nologo %tmp%\dt.vbs') do date %%i&time %%j
  11. 1pause


  12. for /f "tokens=1*" %%i in ('cscript -nologo %tmp%\dt.vbs') do echo;date %%i&echo;time %%j
  13. 1pause

  14. for /f "tokens=1*" %%i in ('cscript -nologo %tmp%\dt.vbs') do (echo %%i|date&echo %%j|time)

  15. 1pause


  16. exit
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:49 , Processed in 0.017282 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表