批处理文件,在MS-DOS中,.bat文件是可执行文件,有一系列命令构成,其中可以包含对其他程序的调用。
常用命令
echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。echo 表示显示此命令后的字符echo off 表示在此语句后所有运行的命令都不显示命令行本身@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。标号用“:字符串”来定义,标号所在行不被执行
Example1
@echo offdir e:\*.* > e:\dir.txtecho 你好pause rem 等待
看看你的E盘dir.txt 文件中有什么?
Example2
@echo offif exist e:\dir.txt type e:\dir.txt
简单判断
Example3
@ echo offecho 1:sdecho 2:dsset /p sd=选择 :if /i "%sd%"=="1" goto sif /i "%sd%"=="2" goto a:sstart f:\a.txtgoto end:astart f:\b.txtgoto end:endecho. &pause
实现选择choice在xp中不行用set代替,start 后可以跟你要启动的文件。
Example4,输出常用命令的帮助
echo ver >F:\TestBat\tmp.txtver >>F:\TestBat\tmp.txtecho cmd /? >>F:\TestBat\tmp.txtcmd /? >>F:\TestBat\tmp.txtecho rem /? >>F:\TestBat\tmp.txtrem /? >>F:\TestBat\tmp.txtecho if /? >>F:\TestBat\tmp.txtif /? >>F:\TestBat\tmp.txtecho goto /? >>F:\TestBat\tmp.txtgoto /? >>F:\TestBat\tmp.txtecho for /? >>F:\TestBat\tmp.txtfor /? >>F:\TestBat\tmp.txtecho shift /? >>F:\TestBat\tmp.txtshift /? >>F:\TestBat\tmp.txtecho call /? >>F:\TestBat\tmp.txtcall /? >>F:\TestBat\tmp.txtecho type /? >>F:\TestBat\tmp.txttype /? >>F:\TestBat\tmp.txtecho find /? >>F:\TestBat\tmp.txtfind /? >>F:\TestBat\tmp.txtecho findstr /? >>F:\TestBat\tmp.txtfindstr /? >>F:\TestBat\tmp.txtecho copy /? >>F:\TestBat\tmp.txtcopy /? >>F:\TestBat\tmp.txt
查看> type F:\TestBat\tmp.txt
Example5 环境变量
查看环境变量> set |more(|more管道命令,可以一步一步看)
path: 表示可执行程序的搜索路径
对环境变量的引用使用(英文模式,半角)双引号 %windir% 变量
@echo offrem 变量引用set STARTPRGNAME=wInGecho %%STARTPRGNAME%% 变量值为 %STARTPRGNAME%rem 变量替换set STARTPRGNAME=%STARTPRGNAME:G=gzero%echo %%STARTPRGNAME%% 变量经过字符替换后为 %STARTPRGNAME%rem 区分大小写比较if %STARTPRGNAME%==wingzero echo 看看这句有没有输出if /i %STARTPRGNAME%==wingzero echo 这句呢?输出了吧。rem 变量添加set STARTPRGNAME=.;wangming_add;%STARTPRGNAME%echo %%STARTPRGNAME%% 变量追加为 %STARTPRGNAME%set STARTPRGNAME=.;wangming_add;echo %%STARTPRGNAME%% 变量没有追加为 %STARTPRGNAME%pause>nul
设置Java环境变量
@echo offIF EXIST %1\bin\java.exe (rem 如输入正确的 Java2SDK 安装目录,开始设置环境变量@setx JAVA_HOME %1@setx path %path%;%JAVA_HOME%\bin@setx classpath %classpath%;.@setx classpath %classpath%;%JAVA_HOME%\lib\tools.jar@setx classpath %classpath%;%JAVA_HOME%\lib\dt.jar@setx classpath %classpath%;%JAVA_HOME%\jre\lib\rt.jar@echo on@echo Java 2 SDK 环境参数设置完毕,正常退出。) ELSE (IF "%1"=="" (rem 如没有提供安装目录,提示之后退出@echo on@echo 没有提供 Java2SDK 的安装目录,不做任何设置,现在退出环境变量设置。) ELSE (rem 如果提供非空的安装目录但没有bin\java.exe,则指定的目录为错误的目录@echo on@echo 非法的 Java2SDK 的安装目录,不做任何设置,现在退出环境变量设置。))
运行>example5.bat C:\Java\jdk6
批处理文件的参数
批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”。
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。
或者一下方式,追加
SET PATH =.;C:\Java\jdk6\bin;%PATH%
set JAVA_HOME=jdk在本机上的安装路径(为了运行javac,java命令)
显示JAVA_HOME中的环境变量 echo %JAVA_HOME%
set path=%path%;jdk中bin文件夹在本机上的安装路径
显示path中的环境变量 echo %path%
特殊符号
> 创建一个文件>> 追加到一个文件后面@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbbecho 123456 ^> aaaecho 1231231 > bbb() 包含命令(echo aa & echo bb), 和空格一样的缺省分隔符号.; 注释,表示后面为注释: 标号作用| 管道操作& Usage:第一条命令 & 第二条命令 [& 第三条命令...]用这种方法可以同时执行多条命令,而不管命令是否执行成功dir c:\*.exe & dir d:\*.exe & dir e:\*.exe&& Usage:第一条命令 && 第二条命令 [&& 第三条命令...]当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;|| Usage:第一条命令 || 第二条命令 [|| 第三条命令...]当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;
=========================
纯以dos系统而言,可执行程序大约可以细分为五类,依照执行优先级由高到低排列分别是:
DOSKEY宏命令(预先驻留内存)
COMMAND.COM中的内部命令(根据内存的环境随时进驻内存)
以com为扩展名的可执行程序(由command.com 直接载入内存)
以exe位扩展名的可执行程序(由command.com 重定位后载入内存)
以bat位扩展名的批处理程序(由command.com 解释分析,根据其内容按优先级顺序调用第1,2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存)
==========================
相关资源:敏捷开发V1.0.pptx