-
批处理各符号的功能:
1.
echo
有两个状态一个是
on
p>
一个是
off
默认的是
on
它的功能是显示当前文件的
路径,如果不写
on
或者是
off
的
时候,默认情况下
是打开的即显当前文件的路径,
加上
off
后,
所有路径
都不显示,
但是
echo
off
p>
这行还能显出来,要让这行也消失的话就在它们前面
加一个
@
即
@echo <
/p>
off,
另外
echo
< br>命令的另一种用法,可以直接编辑文本文件,例
如:
echo netstat -an >
结晶果是在当前目录下
生成一个
的文件,双击
直接执行这个文
件时,就会执行
netstat
-an
这个命令。
2.
>
这个字符的意思是将
前面的内容传递并且覆盖
后面的内容,
它所起的作
用是将运行的回显结果传递到后面的范围
.
例如:
中的内容是
1113333
,执行
ipconfig /all
>
即将
ipconfig /all
的
内容覆盖原有的
1113333
。与这个
符号相似的还有
>>
它的功能不是
覆盖而追加,即将运行后的内容加到原来的
1113333
后。
3.
|
这是一个管道传输命令,
意思是将上一命令执行的结果传到下一个命令去处理
例如:
dir
c:|find
以上命令是:查找
C
:
所有,并发现
TXT
字符串。
||
Usage
:第一条命令
||
第二条命令
[||
第三条命令
...]
用这种方法可以
同时执行多条命令,
当碰到执行正确的命令后将不执行后面的命
令,如果没有出现正确的命令则一直执行完所有命令
;
(
只要正确后面的就不执行
)
4.
^
是对特殊符号
的前导字符,在命令中他将以上
3
< br>个符号的特殊功
能去掉,仅仅只把他们当成符号而不使用他们的特殊
意义。
例如:
C:>echo
^>ipconfig
结果为:
>ipconfig
没有追加只是显示出来而已
5.
&
这个符号允许在一行中使用
2
个以上不同的命令,当第一个命令执行失败了,
也不影响后边的命令执行
例如:
C:>dir d:/p & dir e: /p &
dir c: /p
结果是先后执行
6.
&&
这个命令和上边的类似,
但区别是,第一个命令失败时,后边的命令也不会
执行
例如:
C:>dir w:/p && dir e: /p
&& dir c: /p
由于电脑上没有
w
盘所以显
示结果为:系统找不到指定的路径。这样以来,后面的
两个盘就不执行啦。
(
当第
n
个命令失败时此命令后面的命令将不再执行
< br>,
也就是
说一直执行到失败为止
)
7.
双引号允许在字符串中包含
空格,进入一个特殊目录可以用如下方法
cd
cd progra~1
cd pro*
以上三种方法都可以进入
program
files
这个目录
8.
,
逗号相当于空格,在某些情况下“,”可以用来当做空格使
比如
dir,c:
9.
;
分号,当命令相同时,可以
将不同目标用;来隔离,但执行效果不变,如执行
过程中发生错误,则只返回错误报告,
但程序还是
会执行。
比如:
dir
c:;d:e:;f:
以上命令相当于
dir c:
dir d:
dir
e:
dir f:
但是前面执行的盘不存在的话,后面的命令将不会执行。
例如:
C:>dir w:;d: /p;e: /p
结果为:系统找不到指定的路径。
1
0.
在
echo
的后面加一个点,所起
到的作用是显示一空行。
以下范例显示的批处理程序包含前后各有一个空行的三行消息:
@echo off
echo.
echo This batch program
echo formats and checks
echo new disks
echo.
如果想让打开的批处理命令的标题栏有名字的话可以用到
title
这个参数
title filename
可以屏蔽一切屏幕的输出,例如:<
/p>
dir >nul 2>nul
这样屏幕上什
么都不会输出,也就是没有结果。
1>nul
表示将正确执行目录树的信息禁止输出,
2>nul
表示将执行过程中的错误
信息禁止输出。
断开网络连接方法有两种
:
一种是
rasphone
/h
adsl
,另一种是
rasdial
adsl
/d
一般和
:
是联用的
goto
跳转的地方入口就是
。
goto
命令的另一种用
法一:提前结束程序。在程序中间使
用
goto
命令跳转到
某一标签,而这一标签的内容却定义为退出。如:
??
goto end
??
:end
dir
中有些命令是要牢记的
dir d: /s /p /b (/a
这后面还有一些参数
像
h,r,d,s/d)
具体的可以看帮助
%userprofile%
在写批处理时这个相当于
C:Documents and
SettingsAdministrator
在结束关键进
程的时候,要先结束
这个进程,最好用系统自带的
工具
taskkill
这个关
的时候任何杀毒软件
都没有提示,
但是如果换成了用
ntsd
关的话,卡巴斯基会报毒,而且这时
的
explorer
会在关闭的一下后马上自启动,而
taskkill
就会
一直关着直到等你开启为止。
在使用
for
的时候当用到
/d
时,那是因为
p>
set
中有
*
?
这两个通配符
shift
1.
可替代参数的编号是
%
o-
%
9
,
如果要在一个命令行上使用超过
10
个
可以被代
换的参数,则可使用
SHIFT
命令来突破此限制。
2.
每当执行
sHIFT
一次,
命令行上的所有参数
将向左移动一位。
%
1
的内容将为%<
/p>
2
的内容所取代?,%
9
内容则由新的参数取代。
3.
%
o
表示批处理文件本身的名称,永远不变,所以每次执行时
可以在批处理文
件使用一次
shift
就向右移动一位
,
例如:
的内容:
@echo %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
@echo %1 %2 %3 %4 %5
%6 %7 %8 %9
shift
@echo %1
%2 %3 %4 %5 %6 %7 %8 %9
pause
运行
c:>a 1 2 3 4 5
6 7 8 9 10 11(
其后有
11
个参数
)
1 2 3 4 5 6 7 8 9 (
p>
取到最前面
9
个参数
)
c:>shift (
移位
)
2 3 4 5 6 7 8 9 10 11(
取到另外
p>
9
个参数
)
c:>shift (
移位
)
3 4 5 6 7 8 9 10 (
取到另外
9
个参数
)
在批处理中
del /f /s /q
可以删除指定目录下的任何文件,但是不能删除文件
夹,
rd
/s /q
不但可以删除指定目录下的文件夹而且还
可以删除目录下的所有文件,以前总是以为
rd
只能删除文件夹,现在才知道用
这个命令还以删除文件夹
@echo off @echo off
:top :top
if (%1)==() goto
end if (%1)==()goto end
shift shift
echo still running echo still running
goto top goto top
:end :end
看到了吧!两个程序就是第三行的
goto
前面不一样,第一个有一个空格,而第
二个没有,就是这个空格所产生的结果就不一
样,第一
个结果是三行
still
running
,而第二个结果是一个无限制的循环,一直不停
的
显示
still
running
,所以写程序的时候一定要注意
errorlevel
若一个程序
或
DOS
命令执行成功,则返回的
E<
/p>
只
RORLEVEL
的值为
o
,否则为
1
至
255
之间
AscII
值
的任意整数,其值只占一个字节约内存
空间
< br>,
值得注意的是
IF
语句中检验
的
ERRORLEVEL
值是大于或等于而不是等于,
例如语句
IF ERRORLEVEL 5
检验
的是
ERRORLEVEL
>=
5
p>
而
不是
ERRO
RLEVEL=5
,因此对于
5
至
p>
255
之间的任何整数,此语句检验结果都是
真值。
在变量延迟时要用到
setlocal
EnableDelayedExpansion
例如:
@echo off
setlocal
EnableDelayedExpansion
.......
然后写要用的代码
需要注意的是,<
/p>
一旦启用了变量延迟,
就要用!
号把变量
括起来,
而不能用
%
号。
echo !n!
显示变量
n
的值
例如:
@echo off
&SETLOCAL ENABLEDELAYEDEXPANSION
set
mm=gril&echo !mm!
pause
ping
在批处理中有延时的作用,
开始的时候不知道怎么用,
后来才发现,
每
ping
一次的时间是一秒
,
所以写成
pin
g /n 10 127.1
或者
是
ping /n 10
localhost
效果是一样的,都能起来延时十秒的作用
set
SET /A
expression
环境变量替换已如下增强
:
%PATH:str1=str2%
%PATH:~10,5%
%PATH:~-10%
%PATH:~0,-2%
%PATH:str1=str2
%
这个操作就是把变量
%PATH%
的
里的
str1
全部用
str2
替换
例如:
@echo off
set a=
echo
替换前的值
:
set var=%a: =qq%
echo
替换后的值
:
pause
结果是:替换前的值
:
很明显吧,那
个空格被
qq
给代替啦
^-^
替换后的值
:
请按任意键继续
. . .
@echo off
set a=
echo
替换前的值
:
set var=%a:.=
伤脑筋
%
echo
替换后的值
:
pause
解释
set
var=%a:.=
伤脑筋
%
set
命令
var
变量名
字
a
是要进行字符替换的变量的值
,
为要替换的值
,
伤脑筋
为替换后的值
!
执行后就
会把变量
%a%
里面的
全部替换为
伤脑筋
这就是
set
的替换字符的很好的功能
!
先讲到这
%PATH:~10,5%
@echo off
set a=
set var=%a:~1,2%
echo %var%
pause
执行后
,
我们会发现只显示了
两个字母
,
我们的变量
%a%
的值不是为
吗
< br>
怎么只显示了第
2
个字母和第
3
个字母
分析
一结果我们就可以很容易看出
%PATH:~10,5%
p>
就是显示变量
PATH
里指定几位的值
p>
!
分析
set
var=%a:~1,2%
set
命令
var
变量值
a
要进行字符操作的变量
从变量
p>
第几位下一位开始
显示
显示几位
和起来就是把变量<
/p>
a
的值从第一位开始
,
< br>把后两位赋予给变量
var
%PATH:~-10%
例子
@echo off
set a=
set var=%a:~-3%
echo %var%
pause
这个的意思是从右往左取三位,把取到的部分给了
var
p>
,
如果把负号去掉,就成
了从左往右去掉三
位把剩下的部分给了
var
%PATH:~0,-2%
例子
@echo off
set a=
set var=%a:~4,-3%
echo %var%
pause
结果是
verybat
,这段代码的意思是,从右去掉三位,把
左剩余的部分,从第四
位的下一位开始显示,把显示的内容给了
var
如果改成
set
var=%a:~3,-3%
结果就是
.verybat
p>
延迟和
set
的综合应用:
@echo off
setlocal
enabledelayedexpansion
title I Love Greatwall
set
love=I Love Greatwall Forever
for /l
%%i in (1,1,24) do (cls
echo.
!love:~0,%%i!
ping/n 1 127.1>nul
2>nul)
pause
我觉得这段代码很意思,
do
里面的命令主要是分三块但是这三块不能在同一行,
分三行写
.
因为它们是不同的命令,要想写在一行的<
/p>
话要加
&
,写
好后为
for /l %%i in (1,1,24) do (cls
&echo. !love:~0,%%i!
&ping/n 1
127.1>nul 2>nul)
for
在
DOs
提示符下可直接使用
FOR
语句,用法的区别在于必须把%%
variable<
/p>
写
成%
variable
关于
FOR
语句的使用方法,归纳如下:
(1)
为了在各种
DO
S
版本下都能运行,%%
vart6le
的变量必须为单个字符,应
避
免使
用%%
o
一%%
9
作为变量。
(2)FOR
%%
variaNeIN
tnle
s
就
)command
%%
variable
其中
File
set
必须放在
括号内,文件的个数没有限制,只要不超过
D05
命令行<
/p>
127
个字符的限制即可,
文件之
间用空格或逗号作为分隔符分开,文件名可以使用通配符。
<
/p>
(3)FoR
语句中后面的变量有时可省略,如:
FOR
%%
a
IN(*.BAK)D0 DIR
(4)FOR
语句的结尾如
果执行另一个批处理程序,执行结束后,不再返回
FOR
语
p>
FOR /D %%variable IN (set) DO
command /D
参数只能显示当前目录下的目录
名字
p>
@echo off
for /d
%%i in (*) do @echo %%i
pause
把他保存放在
C
盘根目录执行
,<
/p>
就会把
C
盘目录下的全部目录名字打印出
来
,
而文
件名字一个也不显示
!
@echo off
for /d
%%i in (???) do @echo %%i
pause
这样的话如果你当前目录下有目录名字只有
1-3
个字
母的
,
就会显示出来
,
没有
就不显示了
这里解释下
*
号和
?
号的
作用
,*
号表示任意
N
个字符
,
而
?
号只表示任意一个字符
FOR /R
[[drive:]path] %%variable IN (set) DO command
它可以把当前或者你指定路径下的文件名字全部读取
,
< br>注意是文件名字
@echo off
for /r c: %%i in (*.exe) do @echo %%i
pause
把
C
盘根目录
,
和每个目录的子目录下面全部的
EXE
文件都列出来了
@echo off
for /r %%i in
(*.exe) do @echo %%i
pause
以
当前目录为搜索路径
,
显示当前目录的全部
EXE
文件列出来
!
for /L %% Variable in
(Start#,Step#,End#) do Command
@echo
off
for /l %%i in (1,1,5) do start cmd
pause
看上面的
start
step
end
就知道是什么意思了
吧,开始,结束,步阶
,
按一步一
个的
话,就会总有六个
cmd
跳出来五个
设置默认的控制台前景和背景颜色。
for /F
它表示
4
个参数
eol=c -
指一个行注释字符的结尾
(
就一个
p>
)
skip=n -
指在文件开始时忽略的行数。
delims=xxx -
指分隔符集。这个替换了空格和跳格键的
默认分隔符集。
tokens=x,y,m-n -
指每行的哪一个符号被传递到每个迭代
的
for
本身。这会导致额外变量名称的分配。
m-n
格式为一个范围。通过
nth
符号指定
mth
。如果
符号字符串中的最后一个字符星号,
那么额外的变量将在最后一个符号解析之后
分配并接受行的保留文本。
usebackq -
指定新语法已在下类情况中使用
:
在作为命令执行一个后引号的字符串并且一个单
引号字符为文字字符串命令并允许在
filenameset
中使用双引号扩起文件名称。
例如:新建一个文件名字为
内容为:
;
哈哈
你好!相信自己一定会成功??
Never Say Die
好啦就这样吧
@echo off
FOR /F
pause
你好!相信自己一定会成功??
Never
好啦就这样吧
这个命令会读取在当前目录下名为
文件中的内容
,
然后将每一行的内
容赋值给变量
p>
%%i,
然后忽略掉以
;
< br>号开头的行
,
并且以空
格做为分隔符号
,
打印第每行以空各做分隔符
号的第一列
又例如:
@echo off
for /f
pause
date
/t
的结果是:
2007-08-22
星期三
所以批处理的结果为:
22
@echo off
for /f
pause
结果为:
-08-22
星期三