好像不行哦
%date%是环境变量参数
在DOS中怎么写函数让他减一个值,好像不行

解决方案 »

  1.   

    exp80 user/password file=e:\scott%date:~4,4%%date:~9,2%%date:~12,2%.dmp  full=y 
    这个就是备份的完整语句.哪众位高手是怎样,在Windows环境下自动删除备份的?
      

  2.   

    写脚本判断呀,下面给几个函数,应该有用#返回月份的天数
    get_mon_days()
    {
    Y=`expr substr $1 1 4`
    M=`expr substr $1 5 2`r1=`expr $Y \% 4`
    r2=`expr $Y \% 100`
    r3=`expr $Y \% 400`case $M in
    01|03|05|07|08|10|12) days=31;;
    04|06|09|11) days=30;;
    esac
    if [ $M -eq 02 ]
    then
    if [ r1 -eq 0 -a r2 -ne 0 -o r3 -eq 0 ]
    then
    days=29
    else
    days=28
    fi
    fi
    echo $days
    }
    #返回昨天日期
    get_before_date()
    {
    Y=`expr substr $1 1 4`
    M=`expr substr $1 5 2`
    D=`expr substr $1 7 2`
    YY=`expr $Y - 1`
    MM=`expr $M - 1`
    DD=`expr $D - 1`
    MM=`printf "%02d" $MM`
    DD=`printf "%02d" $DD`
    dd=$Y$MM
    dad=`get_mon_days $dd`
    be_date=$Y$M$DD
    if [ $D -eq 01 ]
    then
    if [ $M -ne 01 ]
    then
    be_date=$Y$MM$dad
    fi
    if [ $M -eq 01 ]
    then
    be_date=$YY"1231"
    fi
    fi
    echo $be_date}
    #返回明天日期
    get_next_date()
    {
    Y=`expr substr $1 1 4`
    M=`expr substr $1 5 2`
    D=`expr substr $1 7 2`
    YY=`expr $Y + 1`
    MM=`expr $M + 1`
    DD=`expr $D + 1`
    MM=`printf "%02d" $MM`
    DD=`printf "%02d" $DD`
    r1=`expr $Y \% 4`
    r2=`expr $Y \% 100`
    r3=`expr $Y \% 400`next_date=$Y$M$DDif [ $D -eq 30 ]
    then
    case $M in
    04|06|09|11) next_date=$Y$MM"01";;
    esac
    fi
    if [ $D -eq 31 ]
    then
    next_date=$Y$MM"01"
    case $M in
    12) next_date=$YY"0101";;
    esac
    fi
    if [ $M -eq 02 ]
    then
    if [ r1 -eq 0 -a r2 -ne 0 -o r3 -eq 0 ]
    then
    if [ $D -eq 29 ]
    then
    next_date=$Y$MM"01"
    fi
    else
    if [ $D -eq 28 ]
    then
    next_date=$Y$MM"01"
    fi
    fi
    fi
    echo $next_date
    }
      

  3.   

    方法一,用job 来调脚本
    方法二,用 AT 命令来做调脚本(看一下 AT 这个命令的用法)
      

  4.   

    大家新年好!
    前面两位讲的脚本是在哪里写的是指.bat档案吗,还是Oracle中.
    AT命令是哪里的命令,Window还是Oracle呀!我们是想通过在.Bat档案中写命令,用windows的计划任务去执行.
    或者是高手有其它的方法.
      

  5.   

    要在windows当中写计划任务的话,可以写个类(java)文件,在任务当中执行备份与删除操作;
    要在linux系统当中可以写shell,在crontab当中每天定时调用
      

  6.   

    可是我不会Java呀!
    那位高手可以在.Bat中写
      

  7.   

    一个很简单的方法:你把.dmp文件放在一个目录下,备份前rm *.dmp,这样应该可以吧。
    如果怕删除了以前的.dmp文件,单又备份不成功这种情况发生,则需要这样:
    1.备份
    2.改名,把刚备份出来的文件改一个后缀。
    3.rm *.dmp
    4.再把刚才那个改回去
      

  8.   

    1,先生成一个脚本,创建你的bat用,就叫auto_del.sql,你的bat就叫auto_del.bat,假设都放在e:\下,日期格式不对可以自己根据情况调整:
    set head off
    spool e:\auto_del.bat
    select 'del e:\scott'||to_char(sysdate-1,'YYYYMMDD')||'.dmp' from dual;
    spool off
    set head on
    2,在生成你执行删除任务的bat,就叫del_job.bat,假设也放在e:\下:
    del e:\auto_del.bat
    sqlplus -s Scott/tiger @auto_del.sql
    auto_del.bat
    3,将del_job.bat设置成你的Windows计划任务。
      

  9.   

    @echo off
    copy nul del_old.bat
    for %%F in (e:\scott*.dmp) do echo del "%%F">>del_old.bat
    exp80 user/password file=e:\scott%date:~4,4%%date:~9,2%%date:~12,2%.dmp  full=y 
    if %ERRORLEVEL% NEQ 0 goto :END
    call del_old.bat
    :END
      

  10.   

    BobFang你讲的我看不大懂能不能解释一下
      

  11.   

    @echo off
    copy nul del_old.bat
    rem 生成要执行的删除脚本,要删除的文件是e:\scott*.dmp
    for %%F in (e:\scott*.dmp) do echo del "%%F">>del_old.bat
    exp80 user/password file=e:\scott%date:~4,4%%date:~9,2%%date:~12,2%.dmp  full=y 
    rem 如果执行exp出错则不执行删除以前的备份
    if %ERRORLEVEL% NEQ 0 goto :END
    rem 执行删除脚本
    call del_old.bat
    :END又,for的详细用法可以在cmd窗口中执行help for查看
      

  12.   

    Bobfang 
    你写的我明白了.
    可是用e:\scott*.dmp哪不是把以前的备份全部都删除了.
    如果我要保留N天的备份要怎么办?
      

  13.   

    如果文件名是按日期取的,要保留n天的备份,在BAT中处理比较困难。可以考虑采用下面的方法做,
    exp ... file=scott.dmp
    if %ERRORLEVEL% NEQ 0 goto :END
    rem 保留最近三次的备份
    del scott3.dmp
    ren scott2.dmp scott3.dmp
    ren scott1.dmp scott2.dmp
    ren scott.dmp scott1.dmp
    :END