对于日常重复性比较大的事情,有些可以通过批处理文件来简化任务,文件扩展名为 .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