@echo off
setlocal enabledelayedexpansion
:begin
cls
rem 判断操作系统
ver | find /i "5.0" > nul && goto 2k || goto xp
:xp
for /f "tokens=1-3 delims=-/. " %%i in ("%date%") do (
set /a yy=%%i, mm=%%j, dd=%%k
)
goto nornal
:2k
for /f "tokens=2-4 delims=-/. " %%i in ("%date%") do (
set /a yy=%%i, mm=%%j, dd=%%k
)
goto nornal
:nornal
rem 算出%yy%是否是闰年
set /a leap="^!(%yy% %% 4) & ^!(^!(%yy% %% 100)) | ^!(%yy% %% 400)"
::请输入天数(N天前正数,N天后负数):
set /a days=2
rem 计算日期相差的天数
set /a nd=!dd!-!days!
::echo [nd]=%nd%
rem 计算当月的天数
set /a num=0, mday=0, max=28+leap
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do (
set /a num+=1
if !num! equ !mm! set /a mday=%%i
)
rem 如果小于等于0则转到xiaoyu块处理
if !nd! leq 0 goto xiaoyu
rem 如果大于当月天数则转到dayu块处理
if !nd! gtr !mday! goto dayu
set nm=%mm%
goto println
rem 处理日期相差天数大于当月天数的情况
:dayu
set /a nm=!mm!+1
set /a nd=!nd!-!mday!
if !nm! gtr 12 (
set /a yy=!yy!+1
set /a nm-=12
)
set /a leap="^!(%yy% %% 4) & ^!(^!(%yy% %% 100)) | ^!(%yy% %% 400)"
set /a num=0, mday=0, max=28+leap
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do (
set /a num+=1
if !num! equ !nm! set /a mday=%%i
)
set mm=%nm%
if !nd! gtr !mday! goto dayu
goto println
rem 处理日期相差天数小于等于0的情况
:xiaoyu
set /a nm=!mm!-1
if !nm! lss 1 (
set /a yy=!yy!-1
set /a nm+=12
)
set /a leap="^!(%yy% %% 4) & ^!(^!(%yy% %% 100)) | ^!(%yy% %% 400)"
set /a num=0, mday=0, max=28+leap
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do (
set /a num+=1
if !num! equ !nm! set /a mday=%%i
)
set /a nd=!mday!+!nd!
set mm=%nm%
if !nd! leq 0 goto xiaoyu
goto println
:println
set mm=0%nm%
set dd=0%nd%
set mm=%mm:~-2%
set dd=%dd:~-2%
if !days! leq 0 echo 删除一天前的数据:d:\qy_bak\yswms_%yy%%mm%%dd%*.dmp
if !days! gtr 0 echo 删除一天前的数据:d:\qy_bak\yswms_%yy%%mm%%dd%*.dmp
if !days! leq 0 del d:\qy_bak\yswms_%yy%%mm%%dd%*.dmp
if !days! gtr 0 del d:\qy_bak\yswms_%yy%%mm%%dd%*.dmp
echo 开始导出数据库……
setlocal enabledelayedexpansion
:begin
cls
rem 判断操作系统
ver | find /i "5.0" > nul && goto 2k || goto xp
:xp
for /f "tokens=1-3 delims=-/. " %%i in ("%date%") do (
set /a yy=%%i, mm=%%j, dd=%%k
)
goto nornal
:2k
for /f "tokens=2-4 delims=-/. " %%i in ("%date%") do (
set /a yy=%%i, mm=%%j, dd=%%k
)
goto nornal
:nornal
rem 算出%yy%是否是闰年
set /a leap="^!(%yy% %% 4) & ^!(^!(%yy% %% 100)) | ^!(%yy% %% 400)"
::请输入天数(N天前正数,N天后负数):
set /a days=2
rem 计算日期相差的天数
set /a nd=!dd!-!days!
::echo [nd]=%nd%
rem 计算当月的天数
set /a num=0, mday=0, max=28+leap
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do (
set /a num+=1
if !num! equ !mm! set /a mday=%%i
)
rem 如果小于等于0则转到xiaoyu块处理
if !nd! leq 0 goto xiaoyu
rem 如果大于当月天数则转到dayu块处理
if !nd! gtr !mday! goto dayu
set nm=%mm%
goto println
rem 处理日期相差天数大于当月天数的情况
:dayu
set /a nm=!mm!+1
set /a nd=!nd!-!mday!
if !nm! gtr 12 (
set /a yy=!yy!+1
set /a nm-=12
)
set /a leap="^!(%yy% %% 4) & ^!(^!(%yy% %% 100)) | ^!(%yy% %% 400)"
set /a num=0, mday=0, max=28+leap
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do (
set /a num+=1
if !num! equ !nm! set /a mday=%%i
)
set mm=%nm%
if !nd! gtr !mday! goto dayu
goto println
rem 处理日期相差天数小于等于0的情况
:xiaoyu
set /a nm=!mm!-1
if !nm! lss 1 (
set /a yy=!yy!-1
set /a nm+=12
)
set /a leap="^!(%yy% %% 4) & ^!(^!(%yy% %% 100)) | ^!(%yy% %% 400)"
set /a num=0, mday=0, max=28+leap
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do (
set /a num+=1
if !num! equ !nm! set /a mday=%%i
)
set /a nd=!mday!+!nd!
set mm=%nm%
if !nd! leq 0 goto xiaoyu
goto println
:println
set mm=0%nm%
set dd=0%nd%
set mm=%mm:~-2%
set dd=%dd:~-2%
if !days! leq 0 echo 删除一天前的数据:d:\qy_bak\yswms_%yy%%mm%%dd%*.dmp
if !days! gtr 0 echo 删除一天前的数据:d:\qy_bak\yswms_%yy%%mm%%dd%*.dmp
if !days! leq 0 del d:\qy_bak\yswms_%yy%%mm%%dd%*.dmp
if !days! gtr 0 del d:\qy_bak\yswms_%yy%%mm%%dd%*.dmp
echo 开始导出数据库……
exp yswms/yswms@jzterp owner=yswms file=d:\qy_bak\yswms_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%.dmp
------------------------------------------exp ---------------------imp
imp jnsk/123456@orcl file=e:\yswms_20140104_22322832.dmp full=y ignore=y log=log.txt
exp username/password@servicename file=e:\filename.dmp full=y