免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5340 | 回复: 3
打印 上一主题 下一主题

[SCO UNIX] 怎么样取系统前一天的日期 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-24 22:33 |只看该作者 |倒序浏览
怎么样取系统前一天的日期
YEA=date:%~0,4%
MON=date:%~6,2%
DAT=date:%~8,2%   

DATE1=date:%YEA%%MON%%DAT%

这样的格式

我是用来FTP传送的RAR压缩包,WIN XP系统中的计划任务,自动执行的传输

所以我要取的这个DATE1是系统前一天的日期
那么这个变量DATE1怎么设?

[ 本帖最后由 ellenrobbien 于 2009-2-26 11:19 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-02-25 14:09 |只看该作者
论坛以前问过这个问题,自己搜索一下

论坛徽章:
0
3 [报告]
发表于 2009-02-25 19:53 |只看该作者
你参考一下这个  求N天前日期的批处理

代码1:

  1. --------------------------------------------------------------------------------

  2. @echo off
  3. :: 求N天前的日期
  4. :: 思路:
  5. ::   模拟手工运算,用日期数减去天数,差值为负时向高位借1。
  6. :: 特点:
  7. ::   代码简洁,容易理解,速度快慢取决于指定的天数大小

  8. setlocal enabledelayedexpansion

  9. :Main
  10. cls
  11. :: 日期可以带星期,但是,必须以年月日的顺序排列
  12. :: 年份必须是四位,否则会出错
  13. set day=%date%
  14. set days=0
  15. echo.&echo.
  16. echo       指定的日期是:%day%
  17. echo.
  18. set /p input=      请指定要追溯的天数:

  19. :: 提取日期
  20. for /f "tokens=1-3 delims=-/. " %%i in ("%day%") do (
  21.     set /a sy=%%i, sm=100%%j %% 100, sd=100%%k %% 100
  22. )

  23. set /a sd-=input

  24. if %sd% leq 0 call :count

  25. cls
  26. echo.&echo.
  27. echo       指定的日期是:%day%
  28. echo.
  29. set sm=0%sm%
  30. set sd=0%sd%
  31. echo       %input% 天前的日期是:%sy%-%sm:~-2%-%sd:~-2%
  32. pause>nul
  33. goto Main

  34. :count
  35. set /a sm-=1
  36. if !sm! equ 0 set /a sm=12, sy-=1
  37. call :days
  38. set /a sd+=days
  39. if %sd% leq 0 goto count
  40. goto :eof

  41. :days
  42. :: 获取指定月份的总天数
  43. set /a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)"
  44. set /a max=28+leap
  45. set num=0
  46. set str=31 %max% 31 30 31 30 31 31 30 31 30 31
  47. for %%i in (%str%) do (
  48.     set /a num+=1
  49.     if %sm% equ !num! set days=%%i&goto :eof
  50. )
  51. goto :eof
复制代码
  
代码2:

  1. --------------------------------------------------------------------------------

  2. @echo off
  3. :: 求N天前的日期
  4. :: 思路:
  5. ::   把当前日期转换为天数
  6. ::   用当前天数减去N天
  7. ::   把结果再转换为日期
  8. :: 具体操作是:
  9. ::   逐年计算天数
  10. :: 特点:
  11. ::    代码简洁,容易理解,速度较慢,但是不受指定天数大小的影响

  12. setlocal enabledelayedexpansion

  13. :Main
  14. cls
  15. :: 日期可以带星期,但是,必须以年月日的顺序排列
  16. :: 年份必须是四位,否则会出错
  17. set day=%date%
  18. set days=0
  19. echo.&echo.
  20. echo       指定的日期是:%day%
  21. echo.
  22. set /p input=      请指定要追溯的天数:

  23. rem ========把指定日期转换为天数========
  24. :: 提取日期
  25. for /f "tokens=1-3 delims=-/. " %%i in ("%day%") do (
  26.     set /a sy=%%i, sm=100%%j %% 100, sd=100%%k %% 100
  27. )
  28. :: 把年份转化为天数
  29. for /l %%i in (1,1,%sy%) do (
  30.     set /a leap="^!(%%i %% 4) & ^!(^!(%%i %% 100)) | ^!(%%i %% 400)"
  31.     set /a days=days+365+leap
  32. )
  33. :: 把月份转化为天数
  34. set /a num=0, mday=0, max=28+leap
  35. set str=0 31 %max% 31 30 31 30 31 31 30 31 30
  36. for %%i in (%str%) do (
  37.     set /a num+=1
  38.     if !num! leq !sm! set /a mday+=%%i
  39. )

  40. set /a days=days+mday+sd

  41. set /a days-=input


  42. rem ========把天数转换为日期========
  43. :: 获取年份
  44. for /l %%i in (1,1,%sy%) do (
  45.     set /a leap="^!(%%i %% 4) & ^!(^!(%%i %% 100)) | ^!(%%i %% 400)"
  46.     set /a days_tmp=365+leap
  47.     if !days! gtr !days_tmp! (
  48.         set /a days-=days_tmp
  49.         set y=%%i
  50.     )
  51. )
  52. :: 获取月份及日期
  53. set /a m=1, max=28+%leap%
  54. set str=31 %max% 31 30 31 30 31 31 30 31 30
  55. for %%i in (%str%) do (
  56.     if !days! gtr %%i (
  57.         set /a days-=%%i
  58.         set /a m+=1
  59.     ) else goto next
  60. )
  61. :next
  62. set m=0%m%
  63. set d=0%days%

  64. cls
  65. echo.&echo.
  66. echo       指定的日期是:%day%
  67. echo.
  68. echo       %input% 天前的日期是:%y%-%m:~-2%-%d:~-2%
  69. pause>nul
  70. goto Main
复制代码
 
代码3:

  1. --------------------------------------------------------------------------------

  2. @echo off
  3. :: 求N天前的日期
  4. :: 思路:
  5. ::   把当前日期转换为天数
  6. ::   用当前天数减去N天
  7. ::   把结果再转换为日期
  8. :: 具体操作是:
  9. :    先按照每年365天计算,然后再计算闰年的个数
  10. ::   最后再做转换
  11. :: 特点:
  12. ::   代码复杂,不便于理解,但是速度很快
  13. :: 计算上还存在bug,可以用 11111 来和头两个做对比测试,暂时没时间更新

  14. setlocal enabledelayedexpansion

  15. :Main
  16. cls
  17. :: 日期可以带星期,但是,必须以年月日的顺序排列
  18. :: 年份必须是四位,否则会出错
  19. set day=2007-01-02
  20. set /a days=0, sum=0
  21. echo.&echo.
  22. echo       指定的日期是:%day%
  23. echo.
  24. set /p input=      请指定要追溯的天数:

  25. rem =======把日期转换为天数=======
  26. :: 提取日期
  27. for /f "tokens=1-3 delims=/-. " %%i in ("%day%") do (
  28.     set /a sy=%%i, sm=100%%j %% 100, sd=100%%k %% 100, y=%%i
  29. )

  30. :: 把年份抓换为天数
  31. set num=0
  32. if %sy% lss 400 goto next1
  33. call :leap_num
  34. :next1
  35. set /a leap_num=sy/4-num

  36. :: 把月份转换为天数
  37. set /a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)"
  38. set /a max=28+leap
  39. set num=0
  40. set str=31 %max% 31 30 31 30 31 31 30 31 30 31
  41. for %%i in (%str%) do (
  42.     set /a num+=1
  43.     if !num! lss %sm% set /a sum+=%%i
  44. )

  45. set /a days=365*sy+leap_num+sum+sd

  46. set /a days-=input

  47. rem =======把天数转换为日期=======

  48. :: 获取年份
  49. set /a y=days/365
  50. set /a mod1=days %% 365
  51. call :leap_num
  52. set /a mod2=mod1-leap_num
  53. :loop2
  54. if %mod2% lss 0 (
  55.     set /a y-=1
  56.     set /a mod2=365+mod2
  57. ) else goto next2
  58. goto loop2

  59. :: 获取月份及日期
  60. :next2
  61. set /a m=1, days=mod2+1, max=28+%leap%
  62. set str=31 %max% 31 30 31 30 31 31 30 31 30
  63. for %%i in (%str%) do (
  64.     if !days! gtr %%i (
  65.         set /a days-=%%i
  66.         set /a m+=1
  67.     ) else goto next3
  68. )
  69. :next3
  70. set m=0%m%
  71. set d=0%days%

  72. cls
  73. echo.&echo.
  74. echo       指定的日期是:%day%
  75. echo.
  76. echo       %input% 天前的日期是:%y%-%m:~-2%-%d:~-2%
  77. pause>nul
  78. goto Main

  79. :leap_num
  80. :: 计算能被100整除但是不能被400整除的年次
  81. set /a y_tmp=(%y:~0,1%%y%-%y%)/10
  82. set num=0
  83. :loop1
  84. set /a mod=y_tmp %% 400
  85. if %mod% neq 0 set /a num+=1
  86. set /a y_tmp-=100
  87. if %y_tmp% geq 100 goto loop1
  88. set /a leap_num=y/4-num
  89. goto :eof
复制代码

[ 本帖最后由 wangdonsy 于 2009-2-25 20:03 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-02-26 11:02 |只看该作者

回复 #1 ellenrobbien 的帖子

我的建议, 也是我的经验:
1  在DATE1日生成 ftp 脚本(例如: ftp.txt),脚本中的所有日期都是当天日期,不用计算。
2  计划任务在DATE日执行的脚本内容为:
        1)取得 DATE1生成的ftp脚本文件 ftp.txt
            2)ftp -s  ftp.txt  x.x.x.x
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP