搜了一下,原来是网上的脚本。。。
http://www.tomcatapache.cn/arch/backup/30296915548053298606.html
还是一段段去写注释和理解
::进入管理程序 REM goto直接跳转 REM %1表示bat的第一个参数,如xx.bat abc,其中abc就是%1 if "%1"=="" goto init ::检查exp命令是否可用 REM 冒号后面的,表示程序跳转点,配合goto用的 :checkexp REM %XX%这种都是全局变量 set resultFile=%temp%\%random%.txt REM 如果存在就删除,且不提示 del %resultFile% /q>nul 2>nul REM 调用exp进行Oracle的备份,语法:exp 用户名/密码@数据库,并把结果写到resultFile exp a/a@a%random% file=%temp%\%random%.dmp >nul 2>%resultFile% REM 如果有提示无此命令,则显示相应错误提示并退出 if exist %resultFile% ( type %resultFile%|find "'exp' 不是内部或外部命令">nul if !errorlevel!==0 ( del %resultFile%>nul echo exp命令不可用!程序即将退出! REM ping -n 10表示ping 10次,127.1表示127.0.0.1的缩写。 REM 此处ping本机又不显示结果,其作用貌似是为了延迟几秒,便于显示文本? ping -n 10 127.1 >nul 2>nul exit ) del %resultFile%>nul ) ::1.数据库备份 REM title是bat程序的标题栏,echo.表示换行 title 备份进程 echo. echo. echo 一、正在进行备份…… for %%i in (1,2,3,4,5,6,7,8,9) do ( set ora[%%i]>nul 2>nul&& ( set ora_cur= REM 如果for in后面的是命令,则需要用英文后引号(即`这个符号)将其括起来 for /f "usebackq delims==. tokens=1-3" %%a in (`set ora[%%i]`) do set ora_cur=%%b set ora_usr= set ora_net= for /f "delims=/" %%a in ('echo !ora_cur!') do set ora_usr=%%a for /f "delims=@ tokens=2" %%a in ('echo !ora_cur!') do set ora_net=%%a echo. echo. echo %%i.正在备份 !ora_usr!/******@!ora_net!…… md !bak_dir!\!ora_net!__!ora_usr!\ >nul 2>nul REM %time: =0%可获取当前时间,格式:时:分:秒:毫秒,均为2位,不足补0 set ftmr=!time: =0! set bak_cur_dir=!bak_dir!\!ora_net!__!ora_usr!\ for /f "tokens=*" %%x in ("!bak_cur_dir!") do set bak_cur_dir=%%~fx REM 取年份:echo %date:~0,4% REM 取月份:echo %date:~5,2% REM 取日期:echo %date:~8,2% REM 取星期:echo %date:~10,6% REM 取小时:echo %time:~0,2% REM 取分钟:echo %time:~3,2% REM 取秒:echo %time:~6,2% REM 取毫秒:echo %time:~9,2% REM %x:~m,n% 从第m个字符到第n个字符之间的字串,不包含第n个字符 m~n字符 set bak_cur_fnm=!ora_net!__!ora_usr!__!date:~0,4!!date:~5,2!!date:~8,2!-!ftmr:~0,2!!ftmr:~3,2! set bakfile=!bak_cur_dir!!bak_cur_fnm!.dmp set logfile=!bak_cur_dir!!bak_cur_fnm!.log exp !ora_cur! file="!bakfile!" log="!logfile!" REM 使用>nul不在屏幕上输出,如果只是为了注释代码,此处echo改为REM比较好 echo 如果备份成功的话,就进行压缩>nul if exist "!bakfile!" ( REM pushd:保存当前目录以供 POPD 命令使用,然后改到指定的目录 REM pushd c:就是记录下c盘,当你转去E盘后用popd就可以转回c盘 pushd !bak_cur_dir! set zipfile= if exist "%ProgramFiles%\winrar\winrar.exe" ( echo 使用WinRAR进行压缩>nul set zipfile=!bak_cur_fnm!.rar "%programfiles%\winrar\winrar" a -r "!zipfile!" "!bak_cur_fnm!.dmp" "!bak_cur_fnm!.log" ) else ( echo 使用ZIP指令进行压缩>nul set zipfile=!bak_cur_fnm!.zip zip "!zipfile!" "!bak_cur_fnm!.dmp" "!bak_cur_fnm!.log">nul ) if exist "!zipfile!" ( REM del 删除 REM /P 删除每一个文件之前提示确认。 REM /F 强制删除只读文件。 REM /S 从所有子目录删除指定文件。 REM /Q 安静模式。删除全局通配符时,不要求确认。 REM /A 根据属性选择要删除的文件 del /q "!bakfile!" del /q "!logfile!" ) REM 与前面的pushd对应 popd ) else ( echo 如果不存在备份文件,但有日志文件,则删除日志文件>nul if exist "!logfile!" del /q "!logfile!" ) ) )