标题: [问题求助] [已解决]本机同步网络日期时间的vbs代码,以前可用。现在出现错误提示。求解决。 [打印本页]
作者: ygqiang 时间: 2017-2-9 18:07 标题: [已解决]本机同步网络日期时间的vbs代码,以前可用。现在出现错误提示。求解决。
本帖最后由 pcl_test 于 2017-3-20 14:24 编辑
[已解决]网络时间同步vbs代码,以前可用。现在出现错误提示。求解决。谢谢
错误提示如下。
getTime.vbs(6,1)vbscript运行时错误:类型不匹配:‘s’- @echo off&setlocal enabledelayedexpansion
-
- ping 127.0.0.1 -n 2 >nul 2>nul
-
- title 获取网络时间,同步到本机(需联网)
- cd /d "%tmp%"
- (
- echo With CreateObject("Microsoft.XMLHTTP"^)
- echo .open "GET", "http://time.tianqi.com/", False
- echo .send
- echo s = Split(Split(.responseText, "new Date(("^)(1^), "+"^)(0^)
- echo End With
- echo WSH.Echo DateAdd("s", s * 1, "1970-1-1 8:00"^)
- )>getTime.vbs
-
-
- ——————————————————————————
- cls
- for /l %%m in (1,1,180) do (
-
- ping 127.0.0.1 -n 2 >nul 2>nul
-
- ping time.tianqi.com -n 1 >nul 2>nul
-
- echo !errorlevel!
- if !errorlevel! equ 0 goto :neta
-
- echo 外网不通
- )
-
- echo 外网不通,持续30分钟
-
- exit
-
-
- :neta
- echo 外网通,同步本机时间
- pause
- for /f "tokens=1*" %%i in ('cscript //nologo gettime.vbs') do date %%i & time %%j
- echo 本机系统时间设置完成!
-
- pause
-
-
- exit
复制代码
getTime.vbs代码如下:- With CreateObject("Microsoft.XMLHTTP")
- .open "GET", "http://time.tianqi.com/", False
- .send
- s = Split(Split(.responseText, "new Date((")(1), "+")(0)
- End With
- WSH.Echo DateAdd("s", s * 1, "1970-1-1 8:00")
复制代码
作者: hlzj88 时间: 2017-2-9 23:00
也许是原网页改版了,,源码里只有一个时间,或许不是vbs提取的位置。vbs不懂,其他高手看看。
作者: zhanglei1371 时间: 2017-2-10 06:01
vbs是获取javascript中的代码tt:( tt = parseInt(timestamp.substring(0, 10));)但是只能获取变量tt名,而非tt代表的时间。
js不懂,等待高手解决。
作者: 老刘1号 时间: 2017-2-10 17:19
S内包含非数字,无法乘以1变为数字,故出此错误提示。
作者: codegay 时间: 2017-2-10 18:23
吐槽
首先,时间同步的问题,是有这个叫NTP的专门协议和标准来解决的。
很多系统和网络设备,比如路由器,一般都是支持NTP网络时间同步。
然后,楼主偏偏爱用各种脚本,然后自己又没有能力写,会发帖子让别人写。
出了问题,自己又没能力解决。
网络时间协议:
https://zh.wikipedia.org/zh-cn/% ... 3%E5%8D%94%E5%AE%9A
作者: yu2n 时间: 2017-2-10 21:35
如何用一个.bat文件运行一下快速与Internet同步计算机时间?
https://zhidao.baidu.com/question/625946177689115404.html
如果想要立刻与新的时间服务器同步,一个.bat的文件
则执行下面的命令:- w32tm /register
- net start w32time
- w32tm /config /update
- w32tm /resync /rediscover
复制代码
作者: codegay 时间: 2017-2-11 06:24
NetTime
http://www.timesynctool.com/
作者: codegay 时间: 2017-2-11 06:26
Setting up NTP on Windows
http://www.satsignal.eu/ntp/setup.html
作者: ygqiang 时间: 2017-2-11 14:20
回复 6# yu2n
win7 64系统。修改系统日期和时间。
运行你的这个bat,无效果。
作者: ygqiang 时间: 2017-2-11 17:31
本帖最后由 ygqiang 于 2017-2-11 17:32 编辑
回复 6# yu2n
w32tm /unregister
w32tm /register
先后运行上面2个命令,6楼bat命令可用了。但是:
win7 64系统,本地时间修改了,本地日期也修改为2016/12/1
运行到下面命令,提示:此计算机没有重新同步,因为要求的时间更改太大。
w32tm /resync /rediscover
作者: yu2n 时间: 2017-2-11 18:20
回复 10# ygqiang
JS 同步本机时间与网络时间
http://www.bathome.net/thread-43147-1-1.html
作者: yu2n 时间: 2017-2-11 18:42
回复 10# ygqiang
那是微软的作品,找微软改改就好了。
作者: ygqiang 时间: 2017-2-11 21:07
回复 11# yu2n
WScript.Echo("提示:设置成功。当前时间:" + new Date(DateTime.GetVarDate()).toLocaleString());
你好,能否修改设置为:不弹出任何设置“成功”或“不成功”的窗口提示。
作者: yu2n 时间: 2017-2-11 22:34
回复 13# ygqiang
很简单。你删掉 WScript.Echo 开头的行。
作者: ygqiang 时间: 2017-2-13 07:17
回复 14# yu2n
多谢。。
WScript.Echo("提示:设置成功。当前时间:" + new Date(DateTime.GetVarDate()).toLocaleString());
这一行,全删除。没效果啊。不弹出窗口提示了,但也不能同步了。
作者: yu2n 时间: 2017-2-13 16:24
回复 15# ygqiang
妹阿,讓你自己刪,可也得保證JS語句正常阿,你刪得 if else 都不能保持正常姿勢了。
以下是注釋掉提示的代碼:- //文件名称:SyncNetTime.js
- //功能说明:同步本机时间与网络时间
- //使用方法:Cscript.exe //nologo SyncNetTime.js
- //测试环境:系统 Win10 x64 时间 17/2/10 23:35 用户 Yu2n
- //更新内容:Fix 获取网络时间,防止 eval 安全问题
-
- //以管理员运行
- function GetSystemVersion() {
- var os = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem");
- for (var e = new Enumerator(os); ! e.atEnd(); e.moveNext()) {
- var v = e.item().Version;
- var ss = v.split('.');
- return ss[0] + ss[1];
- }
- return - 1;
- }
- if (GetSystemVersion() >= 60) {
- var cmd = WScript.ScriptFullName;
- if (cmd.substring(cmd.length - 3) != ".jS") {
- var Shell = new ActiveXObject("Shell.Application");
- Shell.ShellExecute("wscript.exe", "\"" + cmd.substring(0, cmd.length - 3) + ".jS\"", "", "runas", 1);
- WScript.Quit(0);
- }
- }
-
- //获取网络时间,从 www.beijing-time.org 页面,使用正则验证结果,防止 eval 安全问题
- var getNetDate = function() {
- var s='';
- try{
- var http = new ActiveXObject("Microsoft.XMLHTTP");
- http.open("GET", "http://www.beijing-time.org/time15.asp?rnd=" + (new Date()), false);
- http.send();
- s = http.responseText;
- }catch(e){};
- 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;
- if (re.test(s) == true) {
- eval(s.replace(re,'$1$2$3$5$6$7')); //使用正则替换结果,防止 eval 安全问题
- return new Date(nyear+'/'+nmonth+'/'+nday+' '+nhrs+':'+nmin+':'+nsec);
- } else {
- //WScript.Echo("警告:获取网络时间失败!")
- WScript.Quit(0);
- }
- };
-
- //设置时间
- function ChangeDate()
- {
- var WmiService, ComputerName, OSList, OSEnum, OS, DateTime;
- ComputerName = ".";
- WmiService = GetObject ("winmgmts:{impersonationLevel=impersonate, (Systemtime)}!//" + ComputerName + "/root/cimv2");
- OSList = WmiService.InstancesOf ("Win32_OperatingSystem");
- DateTime = new ActiveXObject ("WbemScripting.SWbemDateTime");
- OSEnum = new Enumerator (OSList);
- for ( ; !OSEnum.atEnd(); OSEnum.moveNext())
- {
- OS = OSEnum.item();
- var dtNewDate = getNetDate(); //获取网络时间
- DateTime.Value = OS.LocalDateTime;
- DateTime.Year = dtNewDate.getFullYear();
- DateTime.Month = dtNewDate.getMonth() + 1;
- DateTime.Day = dtNewDate.getDate();
- DateTime.Hours = dtNewDate.getHours();
- DateTime.Minutes = dtNewDate.getMinutes();
- DateTime.Seconds = dtNewDate.getSeconds();
- if (OS.SetDateTime(DateTime.Value) != 0) {
- //WScript.Echo("警告:设置系统时间失败!");
- } else {
- //WScript.Echo("提示:设置成功。当前时间:" + new Date(DateTime.GetVarDate()).toLocaleString());
- };
- }
- }
- ChangeDate();
- WScript.Quit(0);
复制代码
作者: ygqiang 时间: 2017-2-13 19:30
回复 16# yu2n
非常感谢。
作者: ygqiang 时间: 2017-10-16 16:12
本帖最后由 ygqiang 于 2017-10-16 16:13 编辑
- /*&cls
- @echo off
- rem 去掉下句中的echo;方可同步,否则只显示
- for /f "tokens=1*" %%i in ('cscript -nologo -e:jscript "%~f0"') do echo;date %%i&echo;time %%j
- for /f "tokens=1*" %%i in ('cscript -nologo -e:jscript "%~f0"') do date %%i&time %%j
- 1pause&exit
- */
- function az(n){return n<10?'0'+n:n}
- var http = new ActiveXObject('MSXML2.XMLHTTP');
- http.open('POST','http://www.114time.com/api/time.php', false)
- http.send();
- var dt = new Date(http.ResponseText*1);
- //减去12个小时上句改为var dt = new Date(http.ResponseText*1-12*3600*1000);
- Y = dt.getFullYear();
- M = dt.getMonth()+1;
- D = dt.getDate();
- h = dt.getHours();
- m = dt.getMinutes();
- s = dt.getSeconds();
- WSH.echo(Y+'/'+az(M)+'/'+az(D)+' '+az(h)+':'+az(m)+':'+az(s));
复制代码
作者: ygqiang 时间: 2017-10-16 16:12
- @echo off
- (
- echo;With CreateObject("Microsoft.XMLHTTP"^)
- echo; .open "GET", "http://www.114time.com/api/time.php", False
- echo; .send
- echo; ms = .responseText*1
- echo;End With
- echo;WSH.Echo DateAdd("s", left(ms, len(ms^)-3^)+480*60, "1970-1-1 0:0:0"^)
- )>%tmp%\dt.vbs
-
- for /f "tokens=1*" %%i in ('cscript -nologo %tmp%\dt.vbs') do date %%i&time %%j
- 1pause
-
-
- for /f "tokens=1*" %%i in ('cscript -nologo %tmp%\dt.vbs') do echo;date %%i&echo;time %%j
- 1pause
-
- for /f "tokens=1*" %%i in ('cscript -nologo %tmp%\dt.vbs') do (echo %%i|date&echo %%j|time)
-
- 1pause
-
-
- exit
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |