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

[系统相关] 大神们,帮忙写个批处理更改系统时间

本帖最后由 tolnba122 于 2015-11-6 10:59 编辑

我有一个服务器系统,客户端时间要和此系统时间同步,此电脑时间不能出现星期日。
我想的是每到星期日时,用命令加计划任务把电脑日期改为星期六或者开机启动运行批处理执行(比如:如8月10日星期天修改成8月9日星期六)。如果不是星期天就不执行该程序,按正常日期显示

  1. ##--##
  2. """
  3. python自动修改系统日期跳过周日
  4. 题目来源 http://www.bathome.net/thread-38000-1-1.html
  5. ~~玩玩中文变量名
  6. 本文件首行必须是状态标志不能删除,状态为--表示执行任务计划调用本程序时日期减1
  7. 依山居 15:53 2015/11/15
  8. """
  9. import os
  10. import sys
  11. import datetime
  12. #任务计划名称
  13. 任务名="whosyourdaddy"
  14. 开始时间="01:01:01"
  15. 程序路径='\"'+sys.argv[0]+" "+"task\""
  16. #任务计划运行频率/sc weekly /mo 选项为weekly /mo 为1表示每周运行
  17. 频率="1"
  18. def 我是开关():
  19.     with open(sys.argv[0],"r+",encoding="utf-8") as f:
  20.         f.seek(2)
  21.         标识位=f.read(2)
  22.         if 标识位=="--":
  23.             f.close()
  24.             return False
  25.         if 标识位=="++":
  26.             f.close()
  27.             return True
  28.         
  29. def 修改开关(标识位):
  30.     with open(sys.argv[0],"r+",encoding="utf-8") as f:
  31.         if 标识位=="--":
  32.             f.seek(2)
  33.             f.write("--")
  34.             f.close()
  35.         if 标识位=="++":
  36.             f.seek(2)
  37.             f.write("++")
  38.             f.close()   
  39. 状态=我是开关()
  40. def 创建任务():
  41.     命令串="schtasks /create /ru \"system\" /F /sc weekly /mo "+频率+" "+"/d"+" "+"sun"+" "+"/st "+开始时间+" "+"/tn"+" "+任务名+" "+"/tr "+程序路径
  42.     print(命令串)
  43.     os.system(命令串)
  44.     print("已经执行创建任务计划!")
  45.    
  46. def 修改日期():
  47.     if 状态:
  48.         today=datetime.datetime.now()+datetime.timedelta(1)
  49.         today=today.strftime("%Y/%m/%d")
  50.         os.system("date "+today)
  51.         修改开关("--")
  52.         print(today)
  53.     else:
  54.         today=datetime.datetime.now()-datetime.timedelta(1)
  55.         today=today.strftime("%Y/%m/%d")
  56.         os.system("date "+today)
  57.         修改开关("++")
  58.         print(today)
  59. if len(sys.argv)>1 and sys.argv[1]=="task":
  60.     修改日期()
  61.     sys.exit(0)
  62. try:
  63.     input("回车创建任务")
  64. except SyntaxError:
  65.     pass
  66. 创建任务()
复制代码
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP



等楼上不注意的时候我再来偷楼上的代码。
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

  1. ::0
  2. @echo off
  3. for /f "eol=Etokens=5-7delims=. " %%i in ('echo.^|command /c date') do set /ay=%%i,m=1%%j-100,d=1%%k-100
  4. set /a "m=(m+9)%%12+4,y-=m/14,JD=1461*y/4+153*M/5+d,w=jd%%7,jdx=jd+15"
  5. set /p flag=<%0
  6. set flag=%flag::=%
  7. if %w% equ 2 (
  8.    if %flag% equ 0 (
  9.       set /a "JD-=1,flag=1
  10.   ) else set /a "JD+=1,flag=0"
  11.     set/a "ys=(JD*4-489)/1461,d=jd-1461*y/4,m=d*100/3061,d-=153*m/5,y+=m/14,m-=m/14*12+1"
  12. )
  13. if defined ys (
  14.    echo %ys%.%m%.%d%|command /c date
  15.    for /f "delims=" %%i in ('type %0') do (
  16.        set "str=%%i"
  17.        setlocal enabledelayedexpansion
  18.        if defined s (
  19.           >>%0 echo;!str!
  20.        ) else  >%0 echo;::%flag%
  21.        for %%j in (s) do endlocal&set s=0
  22.    )
  23. )
  24. pause
复制代码

TOP

本帖最后由 依山居 于 2015-11-13 14:20 编辑
  1. goto code
  2. ==================================================
  3. 这里是注释区,随便浪吧
  4. 系统日期自动从周6改为周日 http://www.bathome.net/thread-38000-1-1.html
  5. 依山居 8:56 2015/11/10
  6. 使用datex 命令工具计算日期 http://batch-cn.qiniudn.com/tool/DateX.exe
  7. HAT大神文章 Windows 2008任务计划执行bat脚本失败返回0x1 http://blog.chinaunix.net/uid-17176286-id-5156940.html
  8. 双击运行会自动建立任务
  9. ===================================================
  10. :code
  11. @echo off
  12. title 全自动定时修改日期为周6周1
  13. ::计划任务名
  14. set tn=whosyourdaddy
  15. ::计划运行时间
  16. set st=01:01:01
  17. set tr=%0
  18. set mo=1
  19. ::切换当前目录为脚本所在路径
  20. cd /d %~dp0
  21. ::脚本目录下需要有datex.exe
  22. if not exist %~dp0\datex.exe msg %username% 需要datex才能干活&goto :eof
  23. if not exist ver.txt echo -->%~dp0\ver.txt
  24. if "%1"=="task" goto :task
  25. ::判断计划是否已经添加
  26. chcp 437
  27. schtasks /query|find "%tn%"||goto crtask
  28. goto :eof
  29. :crtask
  30. ::建立任务
  31. schtasks /create /ru "system" /sc weekly /mo %mo% /d sun /st %st% /tn "%tn%" /tr "%0 task"
  32. goto :eof
  33. :task
  34. set /p ver=<%~dp0\ver.txt
  35. ::每周日0点的开始时候,日期减1变成周6
  36. if %ver%==-- (datex -f yyyy/mm/dd -o -1|date
  37. echo ++>%~dp0\ver.txt
  38. net stop W32Time
  39. sc config W32Time start= disable
  40. )
  41. ::再次运行时,日期加1,恢复正常日期
  42. if %ver%==++ (datex -f yyyy/mm/dd -o 1|date
  43. echo -->%~dp0\ver.txt
  44. sc config W32Time start= auto
  45. net start W32Time
  46. )
  47. ::听从HAT的教导,任务计划要使用exit /b 0退出,任务状态才显示为操作完成。
  48. exit /b 0
复制代码
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

在文件自身放个标志吧
1

评分人数

TOP

回复 11# tolnba122


    bat
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

本帖最后由 tolnba122 于 2015-11-13 08:36 编辑

回复 10# yiwuyun


谢谢   保存VBS格式吗  提示错误   还是别的格式

TOP

  1. if ($true){}# == ($true){}# goto ___yiwuyun
  2. <#BeginBatOperation#
  3. :___yiwuyun
  4. @echo off&setlocal&cls
  5. (echo $yiwuyun_fileName="%~f0"&echo $strPath="%~dp0"&type "%~f0")|powershell -command -
  6. exit/b 0
  7. #EndBatOperation#>
  8. <#StartPowerShell#>
  9. $BoolTime=$false;
  10. while($true){
  11.   if($(Get-Date).DayOfWeek.ToInt32($Null) -eq 0){
  12.     if($BoolTime){
  13.       Set-Date $($(Get-Date)+"12:00:00"+"12:00:00");
  14.       $BoolTime=$false;
  15.     }else{
  16.       Set-Date $($(Get-Date)+"-12:00:00"+"-12:00:00");
  17.       $BoolTime=$true;
  18.     }  
  19.   }
  20. }
  21. <#EndPowerShell#>
复制代码
试试这个
1

评分人数

TOP

回复 8# pcl_test


    我想到的方法是两个任务计划。第一个任务计划减时间并修改,关掉时间同步服务。删掉第一个任务计划添加第二个任务计划。第二个任务计划修改时间恢复到周一,恢复时间同步服务。添加第一个任务计划,删除第二个任务计划。
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

六 (零点触发,改日期,写注册表)六(日)(零点触发,读注册表,改日期,删注册表)一

TOP

这个应该首先要同步网络时间才行,如果网络时间是星期天,把本机改成星期一,如果是其它时间,直接同步网络时间。如果没有网络参照,本机时间怎么好确定,难道始终定位在星期六。

TOP

这个有挑战。怎么没人来试试。

TOP

你要是 有空 看看我的求助 帖子在 互相 帮忙啊 谢谢

TOP

echo off
:time
ping -n 1 -w "60000" 127 >nul
date 2015-08-08
time 08:08:08.00
goto time


60000指一分钟 即60秒
看看这个能不能帮到你

TOP

返回列表