`
wen866595
  • 浏览: 264550 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

批处理 笔记

    博客分类:
  • os
阅读更多

 

以前一直想学点脚本却没学,看了几个命令却不知道干什么好,上周为项目构建写几个帮助脚本后,体会到脚本在自动化方面很重要,把教训和脚本的学习记录下:

附件有完整脚本和帮助文档。

 

 

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:	=%
 

 

 

 

  • bat.rar (53.7 KB)
  • 下载次数: 75
6
3
分享到:
评论
1 楼 yalishizhude 2012-09-24  
dos命令确实是很好的工具~

相关推荐

Global site tag (gtag.js) - Google Analytics