1、常用批处理内部命令
命令的使用参数均可以通过command /? 来获取,不在列举,只根据自己的使用,及自定义的常见使用做些描述,仅供参考。
注释: rem ::
rem
::
与rem不同的是,::后的字符行在执行时不会回显,无论是否打开命令行回显,因为命令解释器不认为他是一个有效的命令行,
另外,rem 可以用于config.sys 文件中。
echo off 关闭回显
@ 将这个符号放在批处理文件中其它命令的前面,运行时将不显示命令本身;与echo off 结合使用
@echo off 关闭此批处理文件中命令的所有回显。
cls 清屏
dos下命令的参数使用时不区分大小写
pause 暂停
errorlevel 运行退出状态 0/1
title 批处理脚本执行时cmd的抬头显示
color 设置批处理运行环境颜色 示例:color 0a 黑色 淡绿色 [第一个为背景,第二个则为前景]
mode 配置系统设备 mode
mode con cols=113 line=15 & color 0a 此命令设置DOS窗口大小:15行,113列,背景色为黑色,前景为淡绿色
goto : [与if判断语句结合使用]
if [not] string1 == string2 command
if [not] exist %path% command
if errorlevel 或 %errorlevel == 0 command
if /i %a% == %b% () else () ## /i 不区分大小写 注意 else一定要与前括号在同一行,
如: if /i %a% == %b% (
) else ()
::判断变量是否定义及定义变量是否为空
if defined var command 或 if not "var"=="" command
判断数字的符号
EQU - 等于 ;NEQ 不等于 ;LSS 小于 ;LEQ 小于或等于 ;GTR 大于 ; GEQ 大于或等于
find查找命令
参数不区分大小写;操作对象为文件,不可对目录执行查找操作;查找匹配,打印包含有该字段的行。
/v 显示所有未匹配的行
因为find查找的对象是文件,所以一般与 type结合使用,当然也可以通过 将要查找的文件路径放在文件中,
借助for /f来实现一行一行读取,再用find查找每个文件。
call :label arguments
调用本文件内命令段,相当于子程序。被调用的命令以标签:label开头,以命令goto :eof[要有空格]结尾
call :label运行完 标签,返回继续运行,相当于调用函数的意思;但当遇到刚才的定义的标签 仍然会继续执行;
使用起来也不很方便,较合理的方式 就是条件判断语句[if等] 与goto结合使用。
start
批处理调用外部程序的命令(在新新窗口中运行,批处理会继续往下运行,不理会外部程序的运行状况),如果直接
运行外部程序则必须等外部程序完成后才继续 执行剩下的指令。
setlocal与变量延迟
setlocal enabledelayedexpansion
用 ! 感叹号 来取变量, %var% ---> !var!
attrib 显示或更改文件属性
shift 更改批处理文件中可替换参数的位置 [表示很少用]
pushd popd
cd /d d:\mp4 #更改当前目录为d:\mp4
pushd c:\mp3 #保存当前目录,并切换当前目录为c:\mp3
popd #恢复当前目录为刚才保存的d:\mp4
一般用处不大,在当前目录名不确定时,并有些帮助, 但我感觉至少在切换目录时 加上/d 一定可以正常切换
assoc ftype
文件关联,感觉这个搞破坏 比较合适;或者是做修复时
assoc 设置‘文件扩展名’关联,关联到‘文件类型’
ftype 设置'文件类型'关联,关联到‘执行程序和参数’
命令字符串%0 或 %1被通过关联调用的文件名所代替。 %* 得到所有的参数, %2 得到第一个参数,%~n得到其余所有以nth 参数打头的参数;n 可以是从2到 9 的数字。
windows执行一个程序的过程,【安装时先通过assoc 设置正确的 文件扩展名 关联,再通过ftype 设置文件类型关联,关联到相应的执行程序和参数】
assoc与ftype 示例:
##显示系统默认的,同样【assoc .zip=HaoZip.zip ftype HaoZip.zip="C:\Program Files\HaoZip\HaoZip.exe" "%1" 就可以进行设置】
1
2
3
4
|
C:\Users\liuyuan>assoc .zip
.zip=HaoZip.zip
C:\Users\liuyuan>ftype HaoZip.zip
HaoZip.zip=
"C:\Program Files\HaoZip\HaoZip.exe"
"%1"
|
恢复:exefile的正确关联
如果该关联已经被破坏,可以运行command.com,再运行 ftype exefile="%1" %*
2、常用特殊符号
@ 命令行回显屏蔽符
% 批处理变量引导符
引用变量用%var%,调用程序外部参数用%1到%9等
%0 批处理文件本身, 包括完整的路径和扩展名
%1 第一个参数 %9 第九个参数
|管道命令
^ 转义字符 &
&& || 逻辑与 或
3、dos应用
1)for
for /d %%variable IN (set) do command
(set)相当于设置条件
通配符 * ?
* 任意N个字符, ?表示任意一个字符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@echo off
color 0a
for
/D %%i
in
(c:\*)
do
echo %%i
::递归显示c:\abd目录下以.txt和.html结尾的文件输出定向到 result.txt
for
/R
"c:\abd"
%%i
in
(*.txt;*.html)
do
if
exist %%i echo %%i>> result.txt
::读取结果中的每行,会自动忽略空白行 下例:排除以#开头的行,以空格为分隔,并输出第
1
,
2
字段。
for
/F
"eol=# tokens=1,2 delims= "
%%x
in
(result.txt)
do
( echo %%x,%%y)
rem
for
/L %
var
iable IN (start,step,end)
do
command
:: 从
1
开始,另开启
5
个cmd窗口
for
/L %%i
in
(
1
,
1
,
5
)
do
start cmd
::从
5
开始,每次减
1
,开启
5
个cmd窗口
for
/L %%i
in
(
5
,-
1
,
1
)
do
start cmd
echo.
pause
|
注: /R [[drive:]path] 路径不支持通配符
2)系统变量
取了几个感觉 有用的:
%userdomain% 本地 返回包含用户帐户的域的名称
%username% 返回当前登录的用户的名称
%userprofile% 本地 返回当前用户的配置文件的位置
%windir% 系统 返回操作系统目录的位置
3)set
赋值 set var=[string]
set /a
set /p path=请输入:
echo %path%
替换
set %path:str1=str2% 这种替换 很有鸡肋的感觉,不能在原文件中直接替换,也许是我没发现。
echo %path% 对文件进行替换,还有通过输出重定向的方式,汗。。。
截取
%a:~[m[,n]%
m为偏移量,n为截取长度
set a=bbs.verybat.cn
::偏移量为0,去掉最后的3个单位
set var1=%a:~0,-3%
echo var1=%var1%
::偏移量为1,从左边开始截取3个单位
set var2=%a:~1,3%
echo var2=%var2%
pause
运行结果:
result: var1=bbs.verybat
var2=bs.
下载linux下的命令【http://down.51cto.com/data/994101 】,对批处理是一个很好的补充。
本文转自 刘园 51CTO博客,原文链接:http://blog.51cto.com/colynn/1317401