bat(batch)知识整理

本文介绍批处理文件的基本概念及常用命令,如echo、@、call等,并通过实例展示如何使用这些命令进行简单的流程控制和环境变量设置。
批处理文件,在MS-DOS中,.bat文件是可执行文件,有一系列命令构成,其中可以包含对其他程序的调用。
常用命令

echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。
echo 表示显示此命令后的字符
echo off 表示在此语句后所有运行的命令都不显示命令行本身
@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。
call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。
pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续
rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。
标号用“:字符串”来定义,标号所在行不被执行


Example1

@echo off
dir e:\*.* > e:\dir.txt
echo 你好
pause
rem 等待

看看你的E盘dir.txt 文件中有什么?

Example2
@echo off
if exist e:\dir.txt type e:\dir.txt

简单判断

Example3

@ echo off
echo 1:sd
echo 2:ds
set /p sd=选择 :
if /i "%sd%"=="1" goto s
if /i "%sd%"=="2" goto a
:s
start f:\a.txt
goto end
:a
start f:\b.txt
goto end
:end
echo. &pause

实现选择choice在xp中不行用set代替,start 后可以跟你要启动的文件。

Example4,输出常用命令的帮助

echo ver >F:\TestBat\tmp.txt
ver >>F:\TestBat\tmp.txt
echo cmd /? >>F:\TestBat\tmp.txt
cmd /? >>F:\TestBat\tmp.txt
echo rem /? >>F:\TestBat\tmp.txt
rem /? >>F:\TestBat\tmp.txt
echo if /? >>F:\TestBat\tmp.txt
if /? >>F:\TestBat\tmp.txt
echo goto /? >>F:\TestBat\tmp.txt
goto /? >>F:\TestBat\tmp.txt
echo for /? >>F:\TestBat\tmp.txt
for /? >>F:\TestBat\tmp.txt
echo shift /? >>F:\TestBat\tmp.txt
shift /? >>F:\TestBat\tmp.txt
echo call /? >>F:\TestBat\tmp.txt
call /? >>F:\TestBat\tmp.txt
echo type /? >>F:\TestBat\tmp.txt
type /? >>F:\TestBat\tmp.txt
echo find /? >>F:\TestBat\tmp.txt
find /? >>F:\TestBat\tmp.txt
echo findstr /? >>F:\TestBat\tmp.txt
findstr /? >>F:\TestBat\tmp.txt
echo copy /? >>F:\TestBat\tmp.txt
copy /? >>F:\TestBat\tmp.txt

查看> type F:\TestBat\tmp.txt

Example5 环境变量
查看环境变量> set |more(|more管道命令,可以一步一步看)
path: 表示可执行程序的搜索路径
对环境变量的引用使用(英文模式,半角)双引号 %windir% 变量


@echo off
rem 变量引用
set STARTPRGNAME=wInG
echo %%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 off
IF 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 第二个输出文件bbb
echo 123456 ^> aaa
echo 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种可执行程序,分析一行,执行一行,文件本身不载入内存)
==========================
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值