以前一直想学点脚本却没学,看了几个命令却不知道干什么好,上周为项目构建写几个帮助脚本后,体会到脚本在自动化方面很重要,把教训和脚本的学习记录下:
附件有完整脚本和帮助文档。
main.bat
@echo off
rem 先说使用批处理要注意的几点:
rem 1、尽量不要将批处理要操作的文件放在不同的盘符下,所有要处理的文件最好放在同一个目录下;
rem 2、文件/夹名最好不要空格,因为批处理的命令参数一般是用空格分隔的,有空格的话,用文件名做参数容易出错;
rem 3、尽量使用相对路径,不要用绝对路径;
rem 4、对于要使用但又不理解的命令,一定要先查看命令的使用说明:help cmdName
rem echo off 表示此语句后的所有运行的命令都不显示命令本身
rem @ 与echo off 相似,但它是加在每个命令的最前面,只作用于当前命令,表示运行时不显示这一命令
rem 用来注释
rem echo 表示显示此命令后的字符,也可以用于将命令后的字符串输出到文件,如下面所示
rem echo abc to file >> targetfile.txt
rem 上面的命令将把abc to file写到targetfile.txt
rem pause 暂停执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续
rem exit /b code 加上/b选项表示退出当前批处理脚本,而不是cmd.exe,相当于函数的return语句。code是个数字,表示执行结果
rem set 用于定义变量
rem call 用来调用另一个批处理,就像函数调用(如果不用call而直接调用别的批处理文件,那么执行完成那个批处理文件后将无法返回当前文件后续的命令)
rem 在被调用的批处理里,%[1-9] 表示传递进来的参数,参数是指调用者在文件名后加以空格分隔的字符串。
rem %0 表示批处理命令本身,其他参数字符串用%1到%9表示
rem 批处理调用示例,不带参数
call for.bat firstparamvalue
rem type 用来输出文件内容,下面的命令输出subfor.bat文件的内容
type subfor.bat
for.bat
@echo off
echo caller pass me : %1
@rem 调用批处理subfor.bat,并传入两个参数
set items=a b c d
set letters=x y z
for %%a in (%items%) do (
for %%b in (%letters%) do (
call subfor.bat %%a %%b
)
)
rem 对一组文件中的每一个文件执行某个特定命令
rem FOR %%variable IN (set) DO command [command-parameters]
rem %%variable 指定一个单一字母可替换的参数。
rem (set) 指定一个或一组文件。可以使用通配符。
rem command 指定对每个文件执行的命令。
rem command-parameters 为特定命令指定参数或命令行开关。
for %%a in (*.txt) do (
rem 如果文件名有空格,必须使用""
rem type "%%a"
)
cls
rem 读取text.txt中的每一行作为参数%%a的值,调用循环体
for /F "delims=" %%a in (text.txt) do (
echo %%a
)
echo for 循环命令的使用比较复杂,必须认真阅读使用说明
subfor.bat
@echo off
echo echo in subfor.bat : %1 %2
if.bat
@echo off
rem if语句有三种格式:
rem 1、判定参数是否符合期望值:if [not] "参数" == "字符串" 待执行的命令
if "%1" == "abc 123" (
echo first var'value is :abc 123
) else (
echo first var'value not excepted, it is :%1
)
rem 2、判定文件是否存在:if [not] exist [路径\\文件名] 待执行的命令
if exist "abc 123.txt" (
echo content of file abc 123.txt is :
type "abc 123.txt"
) else (
echo abc 123.txt is exist .
)
call subif.bat 3
rem 3、if errorlevel <数字> 待执行的命令
rem 返回值必须按照从大到小的顺序排列
if errorlevel 3 (
echo errorlevel is three .
) else if errorlevel 2 (
echo errorlevel is two .
) else if errorlevel 1 (
echo errorlevel is one .
) else (
echo execute success .
)
subif.bat
@echo off
if "%1" == "" (
rem 加上/b选项表示退出当前批处理,而不是退出cmd.exe
exit /b 0
) else (
exit /b %1
)
goto.bat
@echo off
if "%1" == "" (
goto default
) else if "%1" == "helloworld" (
goto helloworld
)
:default
echo you come to default .
goto end
:hellowrold
echo why you come to hello world ?
goto end
:end
createHelp.bat 此脚本可以输出系统命令的帮助文档,不过还有点问题,但可以运行了。
@echo off
set cmds=FIND SORT DISKPART
for /F "usebackq" %%i in (`help`) do (
for %%a in (%cmds%) do (
if not "%%a" == "%%i" (
help "%%i" > help/%%i-help.txt
)
)
)
2012-09-24 增加文件处理,以xml为例,增加字符串处理示例。
config.xml文件:
<config>
<host>www.google.com.kh</host>
<port>8080</port>
</config>
dealContent.bat
@echo off
rem 把config.xml里的<host>127.0.0.1</host>替换成<host>www.google.com.kh</host>
if exist config_tmp.xml del config_tmp.xml
rem 使用for循环命令读取文件内容时,先从文件里读取一行,然后用默认的分隔符对行进行划分,再用得到的每一项调用循环体
rem 所以要处理的文件的行最好不要有空格或tab
for /F %%i in (config.xml) do (
rem 如果项是xml的标签,要对<>转义
if %%i == ^<host^>127.0.0.1^</host^> (
rem >>前面是没有空格
echo ^<host^>www.google.com.kh^</host^>>> config_tmp.xml
) else (
echo %%i>> config_tmp.xml
)
)
del config.xml
ren config_tmp.xml config.xml
字符串处理示例:主要是字符串截取、替换,通过替换删除指定字符串:
dealStr.bat:
@echo off
rem 字符串处理
rem 字符串拼接,语法:newStr=%str1%%str2%
set str1=abc
set str2=123
set newStr=%str1%%str2%
echo %newStr%
rem 字符串截取,语法:%var:~x,y% (x,y∈Z)
rem 说明:当x为正数时表示从左到右第x+1位开始截取,当x为负数时表示从右到左第x位开始截取(右一位是-1),
rem 当省略x时采用默认值0;
rem 当y为正数时表示截取的长度,当y为负数时表示截取到从右到左的第y+1位,当省略y时采用默认值-1。
set src=abc 123 456
set trunk=%src:~2,4%
echo %trunk%
echo %src:~-5,4%
rem 字符串替换,语法:%var:str1=str2%
rem 说明:将字符串var中所有的str1替换为str2
echo %src:123=789%
rem 删除字符串里的空格
set str5=abc 123 4 5 6 7 8
echo %str5: =%
rem 删除字符串里的tab
echo %str5: =%
分享到:
相关推荐
自学批处理笔记(1) 自学批处理笔记(2) cd md rd 自学批处理笔记(3) dir copy 重定向符>>,>,< 自学批处理笔记(4) xcopy attrib 自学批处理笔记(5) del ren move 自学批处理笔记(6) echo pause rem exit ...
DOS命令能够有效帮助我们进行批处理,掌握基本的DOS命令能够加速数据处理。这里有一些我在实际应用过程中,经常会用到的DOS命令,非常实用,希望能够帮助到大家。
NULL 博文链接:https://dongfanghan1985.iteye.com/blog/1692255
netsh(Network Shell)是一个windows系统本身提供的功能强大的网络配置命令行工具,可用来修改windows的ip,网关,dns,防火墙等信息. 1.netsh修改ip,网关,dns: (1)备份网络配置: netsh dump > 路径 ...
Window批处理命令学习笔记,批处理实用简小工具
利用bat格式的文件建立笔记本的无线网络
这个是笔记本开启热点的批处理,有用得到的下吧 这个是笔记本开启热点的批处理
批处理脚本学习笔记——程序员版.pdf http://blog.csdn.net/taotaoyouarebaby/article/details/23958897的PDF版。
笔记本共享wifi批处理,如果想用笔记本共享wifi,给其他笔记本或者移动终端,则可以双击此批处理文件。共享服务名,连接密码 可自行编辑批处理内容设置。简单方便。
SSID=需要广播的名称 key=密码,可随意修改
笔记本无线共享局域网批处理命令,可创建一个wifi热点,供手机、平板联网。
一个方便的笔记本变无线WIFI热点的批处理代码 ,右键以管理员的身份运行,就可以了 ,
笔记本作为无线热点,wifi开关批处理程序
Windows系统下通过bat批处理命令自动修改笔记本处理器高性能电源管理最大处理器状态,适合笔记本高性能状态下一键修改最大处理器状态,而不需要通过控制面板等方法打开,修改最大处理器状态实现关闭CPU自动睿频,...
windows7笔记本管理wifi批处理
集成笔记本wifi热点设置代码,直接使用。简单实用。定时功能还未弄好,其他正常
笔记本电脑配置、开启、关闭wifi网络。
win7禁用和开启DirectDraw加速批处理,适用于win7 32位