批处理脚本-实战-导入导出数据库

对于日常重复性比较大的事情,有些可以通过批处理文件来简化任务,文件扩展名为 .bat 或 .cmd.
用的是DOS命令,批处理只是脚本,并不是什么真正的程序。

REM 和 :: 注释命令
行内注释格式:%注释内容%(不常用,慎用)

对于测试人员来说,需要频繁导入导出数据库的数据,利用如下批处理脚本,大大简化了工作量.
背景:
Windows7
电脑上安装了mysql (用户名:root,密码unm2K10,若不是,修改脚本里的用户名密码即可)

示例:
结果图如下:
在这里插入图片描述

@echo off
setlocal EnableDelayedExpansion


::mysql数据库帐号
set mysql_user="root"
set mysql_passwd="unm2K10"



::格式:  %date%
::结果:  2012-07-31
::格式:  %time%
::结果:  10:21:21.68
::格式:   %date:~x,y%以及%time:~x,y%
::说明:   x是开始位置,y是取得字符数

::代码
:begin
echo.
set/p option=MYSQL备份精灵(1 导出,2 导入,3 删除):
::获取完整的日期和时间
set dt=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%

::%dt:~0,4% 表示对变量%dt%进行字符串截取,由第1个字符开始,截取4个字符.字符索引从0开始.
::%dt:~5,2% 就是从第6个字符开始截取两个字符   ~是二进制取反(就是取负数-1)“,”是表达式分隔符。
::因文件名中不能有空格,用如下命令 将空格替换为0,例如将 2017 611变成20170611
set dt=%dt: =0%

if "%option%"=="1" (
	set/p filetag=保存sql文件标识:
	set filename=[!dt!]!filetag!.sql
	echo 导出中,请勿关闭程序......
	mysqldump -u !mysql_user! -p!mysql_passwd! --all-databases > !filename!
	echo 导出完成
	set filetag=""
	goto begin
)
if "%option%"=="2" (
	echo.
	echo sql列表:
	set num=1

	
::dir就是列出目录下的文件
::for循环一次取一个文件
::下面的if判断,后缀不是.sql就不echo


	for /f "delims=" %%f in ('dir /b /a-d') do (
		set file=%%f
		::  file:.sql=     去掉.sql
		if not "!file:.sql=!" == "!file!"  (echo !num!, %%f && set /a num+=1)
		rem echo !num!, %%b | findstr ".sql" && (set /a num+=1)
	)
	::for /f "delims=" %%i in ('dir /a-d/b *.sql') do (echo !num!, %%i && set /a num+=1)     --可用这一个命令替换上述for循环
	
	echo.
	set num=1
	set isFile="false"
	set/p ch=预导入的sql编号 [0返回]:
	if !ch! == "0" (
		goto begin
	)
	for /f "delims=" %%f in ('dir /b /a-d') do (
		set file=%%f
		if not "!file:.sql=!" == "!file!"  (set /a num+=1 && set isFile="true")
		if !isFile! == "true" (
			set /a tmp=!num!-1
			if !ch! == !tmp! (
				echo 导入的sql:%%f
				set isFile="false"
				echo 导入中,请勿关闭程序......
				mysql -u !mysql_user! -p!mysql_passwd! < %%f
				echo 导入完成
			)
		)
	)
	goto begin
)

if "%option%"=="3" (
:del
	echo.
	echo sql列表:
	set num=1
	for /f "delims=" %%f in ('dir /b /a-d') do (
		set file=%%f
		if not "!file:.sql=!" == "!file!"  (echo !num!, %%f && set /a num+=1)
		rem echo !num!, %%f | findstr ".sql" && (set /a num+=1)
	)
	echo.
	set num=1
	set isFile="false"
	set cht=""
	set/p cht=预删除的sql编号 [0返回]:
	if "!cht!" == "0" (
		goto begin
	)
	for /f "delims=" %%f in ('dir /b /a-d') do (
		set file=%%f
		if not "!file:.sql=!" == "!file!"  (set /a num+=1 && set isFile="true")
		if !isFile! == "true" (
			set /a tmp=!num!-1
			if !cht! == !tmp! (
				set isFile="false"
				del %%f
				echo 成功删除:%%f
			)
		)
	)
	goto del
)
echo.
pause

下述尚未跑成功

@[表明不显示@后边的命令]echo off
setlocal EnableDelayedExpansion[延迟环境变量扩展]


::mysql数据库帐号[注释]
set mysql_user="root"
set mysql_passwd="unm2K10"


::代码
:begin
echo.
set/p[输出=后边的信息
同时将输入的值赋给option] option=MYSQL备份精灵(1 导出,2 导入,3 删除):
set dt=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
set dt=%dt: =0%

if "%option%"=="1" [如果option=1,则条件成立](
	set/p filetag=保存sql文件标识:
	set filename=[!dt!]!filetag!.sql
	echo 导出中,请勿关闭程序......
	mysqldump -u !mysql_user! -p!mysql_passwd! --all-databases > !filename!
	echo 导出完成
	set filetag=""
	goto begin
)
if "%option%"=="2" (
	echo.
	echo sql列表:
	set num=1
	for /f "delims=" %%f [指定变量f]in ('dir /b /a-d') do (
		set file=%%f
		if not "!file:.sql=!" == "!file!"  (echo !num!, %%f && set /a num+=1)
		rem echo !num!, %%b | findstr ".sql" && (set /a num+=1)
	)
	echo.
	set num=1
	set isFile="false"
	set/p ch=预导入的sql编号 [0返回]:
	if !ch! == "0" (
		goto begin
	)
	for /f "delims=" %%f in ('dir /b /a-d') do (
		set file=%%f
		if not "!file:.sql=!" == "!file!"  (set /a num+=1 && set isFile="true")
		if !isFile! == "true" (
			set /a tmp=!num!-1
			if !ch! == !tmp! (
				echo 导入的sql:%%f
				set isFile="false"
				echo 导入中,请勿关闭程序......
				mysql -u !mysql_user! -p!mysql_passwd! < %%f
				echo 导入完成
			)
		)
	)
	goto begin
)

if "%option%"=="3" (
:del
	echo.
	echo sql列表:
	set num=1
	for /f "delims=" %%f in ('dir /b /a-d') do (
		set file=%%f
		if not "!file:.sql=!" == "!file!"  (echo !num!, %%f && set /a num+=1)
		rem echo !num!, %%f | findstr ".sql" && (set /a num+=1)
	)
	echo.
	set num=1
	set isFile="false"
	set cht=""
	set/p cht=预删除的sql编号 [0返回]:
	if "!cht!" == "0" (
		goto begin
	)
	for /f "delims=" %%f in ('dir /b /a-d') do (
		set file=%%f
		if not "!file:.sql=!" == "!file!"  (set /a num+=1 && set isFile="true")
		if !isFile! == "true" (
			set /a tmp=!num!-1
			if !cht! == !tmp! (
				set isFile="false"
				del %%f
				echo 成功删除:%%f
			)
		)
	)
	goto del
)
echo.
pause

猜你喜欢

转载自blog.csdn.net/chuxin_2017/article/details/87913973