复制代码
- @echo off
- color 6F
- title ♂♀BCP数据备份还原→_→YueE 工作室(☆_☆)/~~♀♂
- ::----------运行环境---------------
- ::系统:XP、Win7
- ::数据库版本:SQL2000、SQL2005、SQL2008
- ::由于本人电脑资源有限,望批友们在其他环境帮忙看看
- ::----------运行环境---------------
- setlocal enabledelayedexpansion
- ::若提示“'***' 不是内部或外部命令,也不是可运行的程序或批处理文件。”的时候,可能是本机未安装数据库程序
- bcp > nul 2>nul
- if "%errorlevel%" == "9009" goto error2
- osql > nul 2>nul
- if "%errorlevel%" == "9009" goto error2
- ::根据内部版本号来判断系统版本,由于XP和Win7在注册表和cmd中的格式都有差别,所以下面三个变量“skip”“set替换字符”“时间=”都需要用变量代替
- ver > %temp%\ver.tmp
- find " 5.0" %temp%\ver.tmp > nul && set skips=4&& set times=time=&& set fails=5
- find " 5.1" %temp%\ver.tmp > nul && set skips=4&& set times=time=&& set fails=5
- find " 5.2" %temp%\ver.tmp > nul && set skips=4&& set times=time=&& set fails=5
- find " 6.0" %temp%\ver.tmp > nul && set skips=2&& set times=时间=&& set fails=3
- find " 6.1" %temp%\ver.tmp > nul && set skips=2&& set times=时间=&& set fails=3
- ::读取注册表中桌面位置
- for /f "skip=%skips% tokens=2,*" %%i in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do set desktop_path=%%j
- if "%desktop_path%" == "%%USERPROFILE%%\Desktop" set desktop_path="%userprofile%\Desktop"
- if "%desktop_path%" == "%%USERPROFILE%%\桌面" set desktop_path="%userprofile%\桌面"
- :start
- cls
- echo %date:~11,3% %time:~0,8%
- echo.
- echo.
- ::初始化数据库信息
- set ip_db=127.0.0.1
- set user_db=sa
- set password_db=
- set /p ip_db=. ┈━═^<-^<-^<@(((●^<请输入服务器IP地址:
- if /i "%ip_db%" == "q" goto end
- set /p user_db=. ┈━═^<-^<-^<@(((●^<请输入数据库账 户:
- if /i "%user_db%" == "q" goto end
- set /p password_db=. ┈━═^<-^<-^<@(((●^<请输入数据库密 码:
- if /i "%password_db%" == "q" goto end
- echo.
- echo *********************┈━═☆★ 开始查询数据库 ★☆═━┈**********************
- ::生成数据库名称列表文件name_db.tmp
- set /p=<nul >%temp%\name_db.tmp
- bcp "select name from master..sysdatabases where name <> 'master' and name <> 'model' and name <> 'msdb' and name <> 'Northwind' and name <> 'pubs' and name <> 'tempdb'" queryout %temp%\name_db.tmp -S%ip_db% -U%user_db% -P%password_db% -c
- if "%errorlevel%" == "1" (
- echo.
- echo.
- echo 乖乖嘞!乖乖嘞!!乖乖嘞!!!
- echo.
- echo 您这是早上洗头脑袋进水啦!这点儿信息都能弄错,诶呀我去 。。。
- pause>nul
- goto start
- ) else (
- set /p=<nul >%temp%\name_db_xuhao.tmp
- )
- for /f "skip=2 delims=[" %%i in ('find /n /v "不存在的字符串" %temp%\name_db.tmp') do (
- for /f "delims=] tokens=1,*" %%a in ("%%i") do echo %%a %%b>> %temp%\name_db_xuhao.tmp
- )
- echo.
- ping 127.0.0.1 -n 2 > nul 2>nul
- echo **************《序号》********《数据库名称》***********************************
- type %temp%\name_db_xuhao.tmp
- ::设置数据库名称变量“db%geshu%”为对应的数据库名称
- for /f "tokens=1,*" %%i in (%temp%\name_db_xuhao.tmp) do (
- set name%%i=%%j
- set yuee=%%i
- )
- if "%yuee%" == "" goto error3
- :start_db
- echo.
- set db=
- set /p db=┈━═☆★ 请输入数据库的序号(不可输入名称):
- ::通常一台电脑上数据库数量(除去系统库)一般不会超过20个,所以这里只判断到20,若超过20个只需在下照猫画虎加几行
- if "%db%" == "1" goto check_db
- if "%db%" == "2" goto check_db
- if "%db%" == "3" goto check_db
- if "%db%" == "4" goto check_db
- if "%db%" == "5" goto check_db
- if "%db%" == "6" goto check_db
- if "%db%" == "7" goto check_db
- if "%db%" == "8" goto check_db
- if "%db%" == "9" goto check_db
- if "%db%" == "10" goto check_db
- if "%db%" == "11" goto check_db
- if "%db%" == "12" goto check_db
- if "%db%" == "13" goto check_db
- if "%db%" == "14" goto check_db
- if "%db%" == "15" goto check_db
- if "%db%" == "16" goto check_db
- if "%db%" == "17" goto check_db
- if "%db%" == "18" goto check_db
- if "%db%" == "19" goto check_db
- if "%db%" == "20" goto check_db
- if /i "%db%" == "q" goto end
- goto start_db
- :check_db
- if %db% GTR %yuee% goto start_db
- echo.
- echo.
- echo.
- echo.
- echo ┏┯┯┯┯┯┯┯┯┓ ┏┯┯┯┯┯┯┯┯┓
- echo ┠ 1.导出数据 ┨ ┠ 2.导入数据 ┨
- echo ┗┷┷┷┷┷┷┷┷┛ ┗┷┷┷┷┷┷┷┷┛
- echo.
- ::这里要先做个判断以分辨系统是否支持choice命令。
- choice /d y /t 0 > nul 2>nul
- if "%errorlevel%" == "9009" goto skip_choice
- choice /c 12q /n /m ". 请输入你现在的想干嘛滴心情:"
- echo.
- if "%errorlevel%" == "1" goto out_date
- if "%errorlevel%" == "2" goto in_date
- if "%errorlevel%" == "3" goto end
- :skip_choice
- set /p skip_choice=. 请输入你现在的想干嘛滴心情:
- echo.
- if "%skip_choice%" == "1" goto out_date
- if "%skip_choice%" == "2" goto in_date
- if /i "%skip_choice%" == "q" goto end
- goto skip_choice
- ::在桌面上新建BCP导出文件的保存位置“BCP数据备份文件”和一些前提条件
- :out_date
- echo.
- echo.
- rd /s /q %desktop_path%\BCP数据备份文件 > nul 2>nul
- md %desktop_path%\BCP数据备份文件\Date
- md %desktop_path%\BCP数据备份文件\Log
- echo 此文件夹为批程序执行日志目录 > %desktop_path%\BCP数据备份文件\Log\此为日志文件夹.txt
- cd /d %desktop_path%\BCP数据备份文件\Log
- ren 此为日志文件夹.txt 此为日志文件夹
- ::遍历当前数据库所有表生成三个文件,导出数据库文件:Out_date.bat,导入数据库文件:In_date.bat,清空数据库表文件:delete_date.sql
- osql -S%ip_db% -U%user_db% -P%password_db% -d!name%db%! /Q "set nocount on select name from sysobjects where type='u' set nocount off" -o %temp%\table.tmp -h-1 -w200
- for /f %%i in (%temp%\table.tmp) do echo bcp !name%db%!..%%i out %desktop_path%\BCP数据备份文件\Date\%%i.txt -S%ip_db% -U%user_db% -P%password_db% -c >>%desktop_path%\BCP数据备份文件\Out_date.bat
- for /f %%i in (%temp%\table.tmp) do echo bcp !name%db%!..%%i in %desktop_path%\BCP数据备份文件\Date\%%i.txt -S%ip_db% -U%user_db% -P%password_db% -c >>%desktop_path%\BCP数据备份文件\In_date.bat
- osql -S%ip_db% -U%user_db% -P%password_db% -d!name%db%! /Q "set nocount on select 'delete !name%db%!..' + name from sysobjects where type='u' set nocount off" -o %desktop_path%\BCP数据备份文件\delete_date.sql -h-1 -w200
- if "%errorlevel%" == "1" goto errors
- echo.
- echo ▄︻┻═┳一 温馨警告:
- echo.
- echo 导出数据时候程序会出现假死状态,请勿强制退出!!!
- echo.
- echo.
- echo ▁▂▃▄▅▆▇█若数据量大可能需要很久 很久 很久 很久 很久 ... ...
- echo.
- echo ...... 正 在 导 出 ...... 正 在 导 出 ...... 正 在 导 出 ......
- echo.
- call %desktop_path%\BCP数据备份文件\Out_date.bat > %desktop_path%\BCP数据备份文件\Log\Out_date.log
- if "%errorlevel%" == "1" goto errors
- set xz=出
- goto end_Public1
- :in_date
- echo.
- echo.
- echo.
- echo ▄︻┻═┳一 温馨警告:
- echo.
- echo 导入数据前会清空原有数据,你做好备份的准备了吗亲!!!
- echo.
- echo.
- pause > nul
- echo ▁▂▃▄▅▆▇█若数据量大可能需要很久 很久 很久 很久 很久 ... ...
- echo.
- echo.
- echo ...... 正 在 导 入 ...... 正 在 导 入 ...... 正 在 导 入 ......
- echo.
- osql -S%ip_db% -U%user_db% -P%password_db% -d!name%db%! -i %desktop_path%\BCP数据备份文件\delete_date.sql > %desktop_path%\BCP数据备份文件\Log\delete_date.log
- call %desktop_path%\BCP数据备份文件\In_date.bat > %desktop_path%\BCP数据备份文件\Log\In_date.log
- if "%errorlevel%" == "1" goto errors
- set xz=入
- goto end_Public1
- :errors
- echo.
- echo.
- echo.
- echo ●﹀●ΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨΨ●﹀●
- echo.
- echo ▄︻┻═┳一 警告警告:
- echo.
- echo.
- echo (((●^>糟糕出现致命性错误,按任意键重新运行程序^<●)))
- echo.
- echo.
- echo ●︿●↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑●︿●
- echo.
- echo.
- echo 抖抖 兄:944191705
- echo.
- echo %date% %time:~0,8%
- pause > nul
- goto start
- :error2
- echo %date:~11,3% %time:~0,8%
- echo.
- echo.
- echo.
- echo ∞╬═→乖乖嘞 大事不妙呀
- echo.
- echo ∞╬═→bcp、osql不是内部或外部命令,也不是可运行的程序或批处理文件
- echo.
- echo ∞╬═→恁瞧瞧,bcp、osql没办法在命令提示符下正常运行
- echo.
- echo ∞╬═→自行检查一下数据库程序在本机安装与否
- echo.
- echo ∞╬═→按任意键退出此程序
- echo.
- echo.
- echo. ^<□:≡ 祝你好运 阿门 じò ぴé
- goto end_Public3
- :error3
- echo.
- echo.
- echo ∞╬═→ 亲亲 大事不妙啊 ╠¤←
- echo.
- echo ∞╬═→ 一个数据库都没发现啊 ╠¤←
- echo.
- echo ∞╬═→ 恁检查下主机是否安装有第三方库 ╠¤←
- echo.
- echo ∞╬═→ 按任意键退出此程序。。。。。。。。。。 ╠¤←
- echo.
- echo. ^<□:≡ 祝你好运 阿门 じò ぴé
- goto end_Public3
- :end_Public1
- echo.
- echo.
- echo.
- echo ^\^(^≧^^▽^^^≦^)^/
- echo.
- echo 诶呀我去,累死我了 。 。 。
- echo.
- echo 小哥 您真是太厉害了:-O 我都不好意思不让你用了 ⊙^^_^^o~么么哒~~
- echo.
- echo ┈━═☆★♀♂恭喜你 数据导%xz%成功♀♂★☆═━┈
- goto end_Public2
- :end
- echo.
- echo.
- echo.
- echo.
- echo.
- echo 么么哒~~
- echo.
- echo 亲 您真的不要我了吗:-O 能不能再多看看我呀 ~^>﹏^<~+伤心_
- echo.
- echo ┈━═☆★下次再来噢:-O★☆═━┈
- :end_Public2
- echo.
- echo.
- echo.
- echo.
- echo.
- :end_Public3
- echo.
- echo.
- echo.
- echo 抖抖 兄:944191705
- echo.
- echo %date% %time:~0,8%
- pause>nul
- if "%xz%" == "入" explorer %desktop_path%\BCP数据备份文件\Log
- if "%xz%" == "出" explorer %desktop_path%\BCP数据备份文件\Date
- goto :eof
欢迎光临 批处理之家 (http://bbs.bathome.net/) | Powered by Discuz! 7.2 |