在 Unix 系统中, 网络工程师一般在本地机测试搭建的环境, 然后再在服务器上搭建. 在本机搭建一般都是手工配置的. 而到服务器配置则使用 shell 脚本自动部署.原因很简单:
1. 容易出错的过程
2. 重复工作量
3. 节省时间
4. 自动化 (简单运行 Shell 脚本就完成任务)
程序员 复制 网络工程师的成功经验:
在增量开发的过程中,程序员经常需要将当前完成的功能集成到原有的系统中. 通常每个程序员一天集成一次.
通常需要做的重复劳动是:编译代码、测试代码、系统部署。如果你可以按一个键就完成这些过程, 将会节省多少时间。
Unix 有 shell , window 有 cmd批处理脚本,英文译为BATCH,批处理文件后缀BAT 就取的前三个字母。
bat 没有固定构成格式:每一行可视为一个命令,每个命令里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的平台是DOS。
下一文章: BAT批处理文件的msdos窗口如何开机自动后台运行不弹出窗口
找房子 免费租房子 暑期兼职 跳蚤市场 同城交友
Projects In Asp Find Solutions for your Business. Free Reports, Info & Registration!
» 相关连接:
BAT批处理文件的msdos窗口如何开机自动后台运行不弹出窗口
Posted: 2008-06-28 05:34 | [楼 主]
第一章 创建批处理文件的方法:
1. "copy con" 将计算机屏幕上输入的内容存放到指定的文本文件。 con 屏幕。例子:
C:\> copy con test.bat
echo 输入内容
Ctrl + Z 接着按回车,退出编辑状态。
运行 test.bat
2.使用 edit 的 DOS 自带的文本编辑器
按 Alt + 菜单首字母激活菜单。
3.使用记事本
C:\> notepad
第二章 批处理的命令
1. echo [{on|off}][message]
功能有二个:
1.1 在屏幕显示信息(字符串)
1.2 控制批处理文件在执行的过程中, 是否显示命令本身的字符串.
例子1.1
echo 显示内容
例子1.2
echo on
type file.txt
echo off
type file.txt
2. @ [command]
功能:屏蔽显示的命令本身的字符串
例子:比较使用和不使用@的效果
1. echo on
type file.txt
2. @echo on
type file.txt
3 goto label
功能:流程控制跳转命令,用于控制批处理中的命令执行流程。
例子:
@echo off
echo 直接跳到最后的命令
goto last
echo 这个命令没有执行
:last
echo 最后执行的输出命令
讨论:
在 1963 年,当时流行的语言 ALGOL 语言,Peter Naur 指出,在程序中大量地、无限制地使用 GOTO 语句, 会使程序结构变得非常混乱。
在 1965 年,E.W.Dijkstra 在会议上提出:应该把GOTO 语句从高级语言中取消。当时就有 LISP、ISWIM、BLISS 等把GOTO 语句去掉。
D.E.Knuth 认为:GOTO 语句虽然存在着破坏程序的可维护性问题,但不应该完全禁止。
ALGOL 是把一切归功于算法的语言。 很多C 语言的书都引用著名计算机科学家法沃思(Nikiklaus Wirth)的一个公式:程序 = 数据结构 + 算法。
4. pause
功能:暂停批处理的执行并提示信息,让用户决定是继续执行还是中断执行。
例子:
@echo off
echo Ctr + C 退出执行
pause
echo 继续执行下面的命令.
5. call [ [Drive:][Path] FileName [BatchParameters] ] [:label [arguments]]
功能有二个:
5.1 在批处理程序中调用另一个批处理程序(一个批处理文件相当于一个函数)
5.2 调用指定标记后面的所有命令
5.1 例子
test.bat
@echo off
echo start call called.bat
call called.bat
echo end call called.bat
called.bat
@echo off
@echo clased.bat echo info.
5.2 例子
@echo off
call :xxx
echo 在中间的命令
:xxx
echo 在 xxx 标记后的命令
6.start ["title"][/dPath][/min][/max][/wait][FileName][parameters]
功能:启动一个独立的窗口,然后在窗口中执行指定的程序或命令.
参数说明:
title:窗口的标题
Path:新窗口的当前目录
/max:最大化
/min:最小化
/wait:等待新的进程结束后,再返回执行
/b:在原窗口启动独立的进程
/FileNmae:应用程序名 或 命令
/parameters:传送给程序 或 命令的参数
例子:
@echo off
echo 原窗口的信息
start echo 新窗口的独立进程.
echo 在启动新窗口后的输出
7. rem [comment]
功能:在批处理中加入相应的说明信息,帮助读者理解批处理的功能.
@echo off
rem 显示 C;\ 文件列表
dir C:\
8. if [not] exist filename command [else expression]
功能:如果 filename 存在, 则执行 command 命令, 不存在, 则 执行 expression 表达式
例子:
@echo off
if exist called.bat (
echo called.bat 文件存在
) else (
echo called.bat 文件不存在
)
9. if [not] errorlevel number command [else expression]
功能:当前一个程序或命令返回大于或等于 number 的退出代码时, 才能指定真的条件.
@echo off
ping 127.0.0.1>null
if errorlevel 0 (
echo 可以 ping 通主机 127.0.0.1 ; 它的返回值是: %errorlevel%
) else (
echo 不可以 ping 通主机 127.0.0.1 ; 它的返回值是: %errorlevel%
)
10. if [not] string1 == string2 command [else expression]
功能:判断 string1 是否和string2 相同, 则条件为真
例子:
@echo off
if "1234" == "1234" echo 它们是相等的.
11. if string1 compareop string2 command [else expression]
功能:比较二个字符串
EQU 代表等于,NEQ 代表不等于,LSS 代表小于,LEQ 代码小于或等于,GTR 代表大于,GEQ 代表大于或等于。
/i:忽略大小写
例子:
@echo off
ping 127.0.0.1>null
if %errorlevel% EQU 0 echo 可以 ping 通主机 127.0.0.1 ; 它的返回值是: %errorlevel%
12. if defined variable command [else expression]
功能:判断是否定义了 variable
例子:
@echo off
set xxx="C:\"
if defined xxx (
echo 定义 xxx 为 %xxx%
)
13 set [ [/a [expression]] [/p [variable=]] string ]
功能:
1. 查看环境变量
2. 设置环境变量
例子:
13.1
@echo off
echo 显示所有环境变量
set
echo 显示以字母 home 开头的变量
set home
13.2
@echo off
set UserName = 陈德贵
echo %UserName%
14.2
@echo off
set /a xxx = 87 + 87
echo %xxx%
set /a xxx = 87 + 23
echo %xxx%
讨论:变量不使用下划线
14 setlocal ... endlocal
功能:设置局部变量/临时变量
例子:
@echo off
setlocal
path=d:\
echo 局部环境变量path 的值:
echo %path%
endlocal
echo 系统环境变量的值:
set path
15. shift [/n]
功能:更改批处理文件处理参数的起始位置
例子:
test.bat
@echo off
:round
if "%1" == "" goto end
echo %1
shift
goto round
:end
调用: test.bat 1 2 3 4 5 6
讨论:当执行到 shift 时, %1 => %0, %2 => %1 ....
16. for {%variable|%%variable} in (set) do command [CommandLineOptions]
功能:对一组不同的文件或数据进行循环处理
参数说明:
%variable 是命令提示符执行 for 命令
%%variable 是批处理文件夹执行 for 命令
set:一个或多个文件、目录、数值范围或文本字符串
command:对 set 中的每个对象都执行的命令
CommandLineOptions:命令使用的任何选项。
例子:文件列表
@echo off
for %%f in (*.bat) do (
echo %%f
)
例子:目录
@echo off
rem "/f" 表示 for 以解析方式工作
for /f %%f in ('dir /ad/s/b E:\AsUnitExample') do (
echo %%f
)
@echo off
rem 这个不行。 太复制了
rem "tokens" 参数只有一个 "*" ,表示 %%a 依次代表 "dir" 命令输出的每一行。
for /f "tokens=*" %%a in ('dir') do (
echo %%a
rem "tokens=3*" 表示 %%b 代表 "%%a" 中第 3 个被分隔的字符串(如:"YY"),即目录大小。
rem "*" 表示第 3 个字符串后的所有字符串都用一个变量来代替。
echo "%%a" | find "个文件" > null && for /f "tokens=3*" %%b in ("%%a") do (
echo 当前目录大小:%%b%%c
)
)
17. 通配符("*"、"?")
用于灵活地表示文件和目录
* 表示任意多个字符,包括零个字符
? 表示任意单个字符。
18 重定向符 ("<",">",">>")
用于控制数据库的输入或输出方式
< 符号的右边的数据源, 左边是数据目的地。
> 符号的左边的数据源, 右边是数据目的地。替换现有的数据。
>> 符号的左边的数据源, 右边是数据目的地。追加到现有的数据。
@echo off
echo dir /b /w >> auto.bat
sort < auto.bat
19. 管道符("|")
将一个命令的输出数据作为另一个命令的输入数据。
find "something" test.txt | sort > result.txt
type result.txt
20.
&& 符号连接两个命令时, 表示只有当符号前的命令执行成功后,才会执行符号后的命令。
|| 符号连接两个命令时, 表示只有当符号前的命令执行失败后,才会执行符号后的命令。
第三章 综合应用例子:
1)循环执行某个程序
#echo off
:again
ping 32.2.4.5 > null
if not %errorlevel% EQU 0 goto again
start "可以正常 ping 通主机 32.2.4.5"
2)扩展:暴力破解密码 telnet 路由器
3)删除当前目录及子目录中所有的空文件夹
@echo off
cd . > listnull.txt
for /f "delims=" %%i in ('dir /ad /b /s') do (
dir /b "%%i" | findstr . > nul || echo %%i >> listnull.txt
)
for /f "tokens=*" %%i in (listnull.txt) do (
rd /q "%%i"
)
简单的。 因为包含文件的文件夹不可能用rd 命令删除,结果就删除了所有空的文件夹。
@echo off
cd . > listnull.txt
for /f "delims=" %%i in ('dir /ad/b/s') do (
rd "%%i"
)
第四章 作业:自动下载服务器上的代码,自动上传代码到服务器上,且自动部署代码。
辅助思路:
1. 上传/下载:可以生成ftp 命令文件,再使用 ftp -s:command.txt 上传/获取.
2. 自动部署:可以在服务器端运行BAT 文件,判断是否上传部署的bat 文件,执行部署完再删除。
3. 可以使用其他语言实现以上的功能。如:PHP
第五章 介绍目前流行的构建脚本工具:
Java: Ant
C# : NAnt
参考资料:
FTP和BAT 文件结合实现文件上传
执行命令格式: ftp_upload.bat servername localfielname
下面代码中红色的部分需要换成你自己的设置
@set server=www.livebaby.cn -- 你服务器的ftp 地址
@set username=anonymous -- 你服务器的ftp 的用户名
@set password=anonymous -- 你服务器的ftp 的用户密码
@set localpath=d:\tool --你本地上传文件所在的目录
ftp_upload.bat 开始
@if "%1"=="" goto error_parm
@if "%2"=="" goto error_parm
@setlocal
@set server=www.livebaby.cn
@set username=anonymous
@set password=anonymous
@set localpath=d:\tool
@echo off
@echo /******************************/ >>upload.log
@echo %date% %time% >>upload.log
@echo upload file start >>upload.log
if not exist %localpath%\%2 goto error_dir_local
echo open %server% > ftp.txt
echo user %username% >> ftp.txt
echo %password% >> ftp.txt
echo cd %1 >> ftp.txt
echo bye>> ftp.txt
ftp -s:ftp.txt -n | find "550"
if not errorlevel 1 @goto error_dir_server
echo open %server% > ftp.txt
echo user %username% >> ftp.txt
echo %password% >> ftp.txt
echo cd %1 >> ftp.txt
echo put %localpath%\%2 >> ftp.txt
echo bye>> ftp.txt
ftp -s:ftp.txt -n | find "invalid"
if not errorlevel 1 @goto error_upload
@echo off
@echo upload file completed ! >>upload.log
@goto putok
:putok
@echo upload %2 successflu ! >>upload.log
@goto end
:error_dir_server
@echo server directory error! %1 >>upload.log
@goto end
:error_dir_local
@echo local directory error! %localpath%\%2 >>upload.log
@goto end
:error_upload
@echo upload file error! %localpath%\%2 >>upload.log
@goto end
:error_parm
@echo parameter error(upload.bat serverpath localfilename) >>upload.log
@goto end
:end
@echo bye. >>upload.log
@endlocal
汇编程序(MASM)的上机过程,先要对源代码进行汇编、连接,然后再执行,
@echo off
cls
echo This programme is to make the MASM programme automate
if "%1"=="" goto usage
if "%1"=="/?" goto usage
if "%1"=="help" goto usage
pause
masm %1.asm
if errorlevel 1 pause & edit %1.asm
link %1.obj & %1
:usage
echo Usage: This BAT file name [asm file name]
echo Default BAT file name is START.BAT |