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

[数值计算] [已解决]批处理搭配curl命令如何实现:同步日期和时间到本地电脑?

[复制链接]
发表于 2016-7-19 12:54:23 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-19 14:00 编辑

[已解决]批处理,搭配curl命令,如何实现:年代、日期、时间,一起同步到本地电脑?


  1. @echo off&setlocal enabledelayedexpansion&cls

  2. echo 同步年代、日期、时间到本地电脑

  3. ::==============================================================
  4. for /f "tokens=2,3 delims= " %%a in ('curl time.nist.gov:13') do (
  5. set "riqi=%%a"
  6. set "hh=1%%b"
  7. set /a "h=(!hh:~0,3!%%100+8)%%24"
  8. echo !riqi!
  9. echo !h!!hh:~-6!
  10. 1pause
  11. echo !riqi!|date
  12. echo !h!!hh:~-6!|time
  13. )
  14. ::==============================================================

  15. echo 按任意键退出&pause>nul

  16. exit


  17. curl time.nist.gov:13>1.txt

复制代码
发表于 2016-7-19 13:34:15 | 显示全部楼层
date %格式化后的日期%&time %格式化后的时间%
 楼主| 发表于 2016-7-19 13:50:50 | 显示全部楼层
本帖最后由 pcl_test 于 2016-7-19 13:54 编辑

回复 2# pcl_test


    多谢。。搞定了。修改在顶楼

评分

参与人数 1PB -4 收起 理由
pcl_test -4 不要重复贴码

查看全部评分

发表于 2016-7-19 17:00:00 | 显示全部楼层
回复 3# ygqiang

如果同步发生在凌晨,你不需要解决日期的更替问题?
 楼主| 发表于 2016-7-19 18:10:33 | 显示全部楼层
回复 4# pcl_test


    嗯?这个情况,是啥意思?没考虑到。
发表于 2016-7-20 14:21:03 | 显示全部楼层
  1. /*&cls
  2. @echo off
  3. set "netpath=%systemroot%\Microsoft.NET\Framework"
  4. for /f "delims=" %%a in ('dir /ad /b "%netpath%\v?.*"') do (
  5. if exist "%netpath%\%%a\csc.exe" (
  6.     set "cscpath=%netpath%\%%a\csc.exe"
  7.     goto :0
  8. )
  9. )
  10. echo;未安装.Net Framework 2.0及其上版本组件或相关程序丢失&pause&exit
  11. :0
  12. if not exist $SetDateTime.exe ("%cscpath%" /out:$SetDateTime.exe "%~f0")
  13. echo;
  14. echo;手动运行$SetDateTime.exe
  15. ping -n 4 0 >nul&exit
  16. */
  17. using System;
  18. using System.Net;
  19. using System.Net.Sockets;
  20. using System.Text;
  21. using System.Text.RegularExpressions;
  22. using System.Diagnostics;
  23. using System.Threading;
  24. class SetDateTime
  25. {
  26.     private static byte[] result = new byte[512];
  27.     static void Main(string[] args)
  28.     {
  29.         IPAddress ip = IPAddress.Parse(Dns.GetHostAddresses("time.nist.gov")[0].ToString());
  30.         Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  31.         try
  32.         {
  33.             clientSocket.Connect(new IPEndPoint(ip, 13));
  34.         }
  35.         catch
  36.         {
  37.             Console.WriteLine("连接服务器失败,程序将自动退出!");
  38.             Thread.Sleep(3000);
  39.             return;
  40.         }
  41.         int receiveLength = clientSocket.Receive(result);
  42.         Match dtstr = Regex.Match(Encoding.ASCII.GetString(result, 0 ,receiveLength), @"\d+(-\d+){2}\s\d+(:\d+){2}");
  43.         DateTime dt = DateTime.ParseExact(dtstr.ToString(), "yy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture).AddHours(8);
  44.         Console.WriteLine("服务器当前日期时间为:{0}", dt.ToString());
  45.         Process proc = new Process();
  46.         proc.StartInfo.FileName = "cmd.exe";
  47.         proc.StartInfo.Arguments = "/c date "+dt.ToShortDateString().ToString()+"&time "+dt.ToLongTimeString().ToString();
  48.         proc.StartInfo.UseShellExecute = false;
  49.         proc.StartInfo.RedirectStandardError = true;
  50.         proc.Start();
  51.         string err = proc.StandardError.ReadToEnd();
  52.         Console.WriteLine(err != ""?err:"同步日期时间完成,请按任意键退出!");
  53.         Console.ReadKey(true);
  54.     }
  55. }
复制代码
发表于 2016-7-20 14:51:17 | 显示全部楼层
如果条件允许的话,建议用系统自带的时间同步功能跟时间服务器之间保持时间同步。
也可以自己尝试搭建一个NTP服务器,将来找工作的时候说不定还是一个加分项。
企业里面一般不会采用你这样的脚本同步方案。
 楼主| 发表于 2016-7-20 15:06:33 | 显示全部楼层
本帖最后由 ygqiang 于 2016-7-20 15:15 编辑

回复 6# pcl_test


    echo;手动运行$SetDateTime.exe
ping -n 8 0 >nul
start "" "$SetDateTime.exe"
ping -n 4 0 >nul&exit
发表于 2016-7-20 15:11:02 | 显示全部楼层
回复 8# ygqiang

“手动”是告诉你批处理只是为了生成程序,以后直接运行程序即可
 楼主| 发表于 2016-7-20 15:17:05 | 显示全部楼层
本帖最后由 ygqiang 于 2016-7-20 15:22 编辑

回复 9# pcl_test


    Console.WriteLine("连接服务器失败,程序将自动退出!");

Console.WriteLine(err != ""?err:"同步日期时间完成,请按任意键退出!");

Console.WriteLine("服务器当前日期时间为:{0}", dt.ToString());


多谢。这3个地方,如何去掉这种窗口提示信息。
需要的效果是:后台运行,后台静默同步。不显示任何窗口提示信息。
发表于 2016-7-20 15:20:20 | 显示全部楼层
回复 10# ygqiang
Console.ReadKey(true);改为Thread.Sleep(3000);
 楼主| 发表于 2016-7-20 15:23:35 | 显示全部楼层
回复 11# pcl_test


运行$SetDateTime.exe,
需要的效果是:后台运行,后台静默同步。不显示任何窗口提示信息。
 楼主| 发表于 2016-7-20 16:42:30 | 显示全部楼层
回复 11# pcl_test

而且$SetDateTime.exe同步的时候,有时候几秒钟就同步成功。
也有很多时候,好几十秒也无法同步,提示连接服务器失败。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 11:28 , Processed in 0.021550 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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