windows批处理命令小结

批处理命令

来源:百度百科-批处理

Echo命令回显

打开回显或是关闭回显功能命令,有参数on | off,如果没有参数,echo将显示当前回显设置。

语法为:echo[{on|off}][msg].

使用:

如果使用参数off,屏幕上不出现命令提示符。

需要显示时要有echo on

当然我们为了保密,不显示命令行,当需要显示消息行时,就使用“echo 消息”的方式。

当打开回显(echo on),但是只是不想显示某一行,则可以在那个命令行前加“@”。

要在屏幕上显示空白行,用命令echo+点:(echo .”)。

当使用 echo命令时,要显示管道 (|) 或重定向字符(< >),请在管道 (|) 或重定向字符(例如,^>^< ^|)的前面使用脱字符 (^)。如果需要使用脱字符 (^),请键入两个脱字符 (^^)

Rem 命令注释

注释批处理文件的命令行的命令。相当于/*…*/.

REM命令可以使用 :: 标记替换,例如:

@echo use :: comment

:: this is a test batch file

@echo use rem comment

@rem this is annotated by rem > echo.txt

结果会显示:

use :: comment

use rem comment

Goto 命令

指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。

语法:

goto label

label是参数,指定所要转向的批处理程序中的行。)
示例:

if {%1}=={} goto noparms

if {%2}=={} goto noparms

(这里的if%1%2在后面会有详细的解释。)

@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end

标签的名字可以随便起,但是最好是有意义的字母,名字前加个:用来表示这个名字是标签,goto命令就是根据这个""来寻找下一步跳到哪里。

Pause 命令

运行 Pause 命令时,将显示下面的消息:
Press any key to continue . . .
语法:

pause

示例:

@echo off
:begin
copy a:*.* d:\back
echo Please put a new disk into driver A
pause
goto begin

在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示你将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理.

Call 命令

从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。如果命令扩展被启用,call命令接受用作调用目标的标签。如果在脚本或批处理文件外使用Call,它将不会在命令行起作用。
   
语法:

call [[Drive:][Path] FileName [BatchParameters]] | [:label [arguments]]

参数 [Drive:][Path] FileName 指定要调用的批处理程序的位置和名称。filename参数必须具有 .bat.cmd 或者 .exe 扩展名。BatchParameters指定批处理程序所需的命令行信息。

例:call ant -buildfile %EXPORT_PATH%\build\build.xml –logfile %build_path%\buildLog.txt

释:是一个在bat文件中调用ant.bat批处理文件来构建项目的命令。在这里fileName就是ant(隐含的扩展名是.bat,parametersbuildfilelogfilebuildfile后面说明需要使用ant来构建的文件,logfile说明在构建过程中的日志记录在哪个文件中。它们的语法形式是ant所需要的,这里不多讲。需要说的是ant.bat这个文件的路径已经存在于计算机的环境变量的path中,如果没有,也一定是在主调bat文件中通过set的方式设置过了,否则不能运行。

 

当使用标签作为调用目标时,一个新的批文件上下文由指定的参数所创建,控制在卷标被指定后传递到语句。你必须通过达到批脚本文件末两次来 "exit" 两次。第一次读到文件末时,控制会回到 CALL 语句的紧后面。第二次会退出批脚本。键入 GOTO /?,参看 GOTO : EOF 扩展名的描述,此描述允许您从一个批脚本返回。

Setlocal Endlocal 命令

开始与终止批处理文件中环境改动的本地化操作。在执行 Setlocal 之后所做的环境改动只限于批处理文件。要还原原先的设置,必须执行 Endlocal。达到批处理文件结尾时,对于该批处理文件的每个尚未执行的 Setlocal 命令,都会有一个隐含的 Endlocal 被执行。Endlocal结束批处理文件中环境改动的本地化操作。在执行Endlocal 之后所做的环境改动不再仅限于批处理文件。批处理文件结束后,原先的设置无法还原。
   
语法:

Setlocal {enableextension | disableextensions} {enabledelayedexpansion | disabledelayedexpansion}
...
Endlocal
...

如果命令扩展名被启用,SETLOCAL 可以接受{}中的可选参数,启动或停用命令处理器扩展名及延缓环境变量扩展名。详细信息,百度百科-批处理用户变量。无论在 Setlocal 命令之前它们的设置是什么,这些修改会一直保留到匹配的 Endlocal 命令。
示例:

@ECHO OFF
Echo Before Setlocal:
Set PATH //
可以替换为path
Pause
Setlocal
Rem reset environment var PATH
Set PATH=E:\TOOLS
Echo after Setlocal and reset PATH
Set PATH  //
可以替换为path
Pause
Endlocal
Echo Recovery PATH by Endlocal
Set PATH //
可以替换为path语句

从上例我们可以看到环境变量PATH1次被显示得时候是系统默认路径。被设置成了“E:\TOOLS”后显示为“E:\TOOLS”。但当 Endlocal 后我们可以看到他又被还原成了系统的默认路径。但这个设置只在该批处理运行的时候有作用。当批处理运行完成后环境变量PATH将会还原。

Start 命令

启动另一个窗口运行指定的程序或命令,所有的DOS命令和命令行程序都可以由start命令来调用。
语法:

START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] [/WAIT] [/B] [command/program] [parameters]

Choice 命令—windowsXP不支持

Shift 命令
更改批处理文件中可替换参数的位置。
语法: Shift [/n]

如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉命令从第 n 个参数开始移位;n 介于零和八之间。否则,从第1个参数开始移位。
   
通过shift命令,可以让命令行上的命令使用超过9个(%1~%9%0是批处理命令本身)以上的可替代参数。
   
示例:

ECHO OFF
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

执行结果如下:

C:\> SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 10
3 4 5 6 7 8 9 10 11

带参数的SHIFT命令执行示例如下:

Shift /2

上面的命令会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 %1

事实上,处理命令行上9个以上的参数,亦可以使用for命令组合%*来完成。
示例:

for %%a in (%*) do echo %%a

Set 命令
显示、设置或删除 cmd.exe 环境变量。
语法:

SET [variable=[string]]
SET [[/a [expression]] [/p [variable=]] string]

variable 指定环境变量名。string 指定要指派给变量的一系列字符串。
显示当前环境变量,键入不带参数的 SET
如果命令扩展名被启用,SET 会如下改变:
仅用一个变量名而不带等号或者值激活 SET 命令时,显示所有前缀与提供给SET命令相匹配的变量名及其值。例如:

SET P

会显示所有以字母 P 打头的变量。
如果在当前环境中找不到该变量名称,SET 命令将把 ERRORLEVEL设置成 1
SET
命令不允许变量名含有等号。
SET 命令中添加了两个新命令行开关:

SET /A expression
SET /P variable=[promptString]

/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式评估器很简单并以递减的优先权顺序支持下列操作:

运算符

执行的操作

()

分组

! ~ -

一元运算符

* / %

算术运算符(乘、除、取余)

+ -

算术运算符

<< >>

逻辑移位

&

按位运算

^

按位异或运算

|

按位运算

= *= /= %= += -= &= ^= |= <<= >>=

赋值

,

表达式分隔符

如果你使用任何逻辑或取余操作符, 你需要将表达式字符串用引号扩起来。在表达式中的任何非数字字符串将作为环境变量名称,这些环境变量名称的值已在使用前转换成数字。如果指定了一个环境变量名称,但未在当前环境中定义,那么值将被定为零。这使你可以使用环境变量值做计算而不用键入那些 % 符号来得到它们的值。如果 SET /A 在命令脚本外的命令行执行的,那么它显示该表达式的最后值。该分配的操作符在分配的操作符左边需要一个环境变量名称。除十六进制有 0x 前缀, 八进制有 0 前缀的,数字值为十进位数字。因此, 0x12 18 022相同。请注意八进制公式可能很容易搞混: 08 09 是无效的数字,因为 8 9 不是有效的八进制位数。

/P 命令行开关允许将变量数值设成用户输入的一行输入。读取输入行之前,显示指定的 promptStringpromptString 可以是空的。

强大的set命令。

环境变量替换已如下增强:

%PATH:str1=str2%

会扩展 PATH 环境变量,用"str2"代替扩展结果中的每个"str1"。要有效地从扩展结果中删除所有的"str1""str2"可以是空的。"str1"可以以星号打头;在这种情况下,"str1"会从扩展结果的开始到 str1 剩余部分第一次出现的地方,都一直保持相配。也可以为扩展名指定子字符串。

%PATH:~10,5%

会扩展 PATH 环境变量,然后只使用在扩展结果中从第 11 (偏移量 10)字符开始的五个字符。如果没有指定长度,则采用默认值,即变量数值的余数。如果两个数字(偏移量和长度)都是负数,使用的数字则是环境变量数值长度加上指定的偏移量或长度。

%PATH:~-10%

会提取 PATH 变量的最后十个字符。

%PATH:~0,-2%

会提取 PATH 变量的所有字符,除了最后两个。

 

下面这个例子比较全面地展示了 SET 命令的上述扩展功能:

set

显示目前所有可用的变量,包括系统变量和自定义的变量

echo %SystemDrive%

显示系统盘盘符。系统变量可以直接引用

set p

显示所有以p开头的变量,要是一个也没有就设errorlevel=1

set p=aa1bb1aa2bb2

设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2

echo %p%

显示变量p代表的字符串,即aa1bb1aa2bb2

echo %p:~6%

显示变量p中第6个字符以后的所有字符,即aa2bb2

echo %p:~6,3%

显示第6个字符以后的3个字符,即aa2

echo %p:~0,3%

显示前3个字符,即aa1

echo %p:~-2%

显示最后面的2个字符,即b2

echo %p:~0,-2%

显示除了最后2个字符以外的其它字符,即aa1bb1aa2b

echo %p:aa=c%

c替换变量p中所有的aa,即显示c1bb1c2bb2

echo %p:aa=%

将变量p中的所有aa字符串置换为空,即显示1bb12bb2

echo %p:*bb=c%

第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2

set p=%p:*bb=c%

设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2

set /a p=39

设置p为数值型变量,值为39

set /a p=39/10

支持运算符,有小数时用去尾法,39/10=3.9,去尾得3p=3

set /a p=p/10

/a 参数时,在 = 后面的变量可以不加%直接引用

set /a p="1&0"

""运算,要加引号。其它支持的运算符参见set/?

set p=

取消p变量

set /p p=请输入

屏幕上显示"请输入",并会将输入的字符串赋值给变量p注意这条可以用来取代 choice 命令

If 命令
表示将判断是否符合规定的条件,从而决定执行不同的命令。有三种格式:
1
if [NOT]"参数" == "字符串"  待执行的命令
参数如果等于(或者不等于)指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)

if "%1"=="a" format a:

if {%1}=={} goto noparms
if {%2}=={} goto noparms

2if [NOT] exist 文件名  待执行的命令
如果存在(或者不存在)指定的文件,则条件成立,运行命令,否则运行下一句。

if exist config.sys edit config.sys

3if [NOT] errorlevel 数字  待执行的命令

如果返回码大于或者等于(或者小于,使用NOT)指定的数字,则条件成立,运行命令,否则运行下一句。

if errorlevel 2 goto x2
if errorlevel 1 goto x1

DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为01。数字取值范围0~255。判断时值的排列顺序应该由大到小,否则会出现非期望的结果,例如:

if errorlevel 1 goto x1
if errorlevel 2 goto x2

后面的一行指令将永远得不到执行,因为当errorlevel大于等于2时必然大于等于1。此外,IF ERRORLEVEL这条语句必须放在某一个命令后面,否则ERRORLEVEL这个变量的值可能会被新的命令覆盖。

值得注意的是,ELSE 子句必须在 IF 之后出现在同一行上。例如以下子句不会有效:

IF EXIST filename. del filename.
ELSE echo filename. missing

但因为 del 命令需要用一个新行终止(可以同时删除多个文件),所以以下子句也不会有效:

IF EXIST filename. del filename. ELSE echo filename. missing

要实现上述意图,则必须采用下面的办法:

IF EXIST filename. (
  del filename.
) ELSE (
  echo filename. missing.
)

或者一定要使命令在同一行的话,则以下子句有效:

IF EXIST filename. (del filename.) ELSE echo filename. missing

For 命令

for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令,使用指定集合中的每个文本字符串替换循环变量 %variable %%variable,直到 command 处理所有文件为止。在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable

for {%variable | %%variable} in (set) do command [CommandLineOptions]

%variable 指定一个单一字母可替换的参数。
(set)
参数代表单个或多个文件组。可以使用通配符(即 * ?)指定文件组。以下为有效文件组:
(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)
command
指定对每个文件执行的命令。
command-parameters
为特定命令指定参数或命令行开关。

在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable 而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.

 

FOR /D %variable IN (set) DO command [command-parameters]

/D 选项将指定与目录名匹配,而不与文件名匹配。

 

/R 选项是指递归操作,它将遍历以 [drive:]path 为根的目录树,依次对目录树中的每个子目录执行此 FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。此外,可以将 /D 选项与 /R 选项联用,例如下面的命令将列出当前目录下面的所有子目录,且不带"."号:

FOR /D /R %a IN (*) DO @echo %a

注意,这与不使用 /D 选项而在集中指明一个单点的不同之处,在于 /D 选项将会优先列出父目录下的所有子目录名,然后再对子目录进行递归处理。

FOR /L %variable IN (start,step,end) DO command [command-parameters]

 

/L 选项表示执行集合为一个逻辑表达式,它是按一定的步进量从开始到结束的一个数字序列。

比如,(1,1,5) 将产生序列 1 2 3 4 5(5,-1,1) 将产生序列 (5 4 3 2 1)。以下列举一个简单的例子,说明参数/L和没有参数的区别:
   
删除文件1.TXT 2.TXT 3.TXT 4.TXT 5.TXT

FOR /L %%F IN (1,1,5) DO DEL %%F.TXT

FOR %%F IN (1,2,3,4,5) DO DEL %%F.TXT

以上2条命令执行的结果都是一样的.

FIND命令
    find 命令用于在文件中搜索指定的字符串或文字,然后显示所有含(也可以通过相应的命令选项设为不含有)指定字符串或者文字的行。find 命令既可用作筛选器,也可以用作标准的 Windows XP 命令。命令的用法:

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

参数说明:

/V

显示所有未包含指定字符串的行。

/C

仅显示包含字符串的行数。

/N

显示行号。

/I

搜索字符串时忽略大小写。

/OFF[LINE]

不要跳过具有脱机属性集的文件。

"string"

指定要搜索的文字串

[drive:][path]filename

指定要搜索的文件。

如果没有指定路径,FIND 将搜索键入的或者由另一命令产生的文字。

补充:

find 命令只列出找出的字符串的行数。

还有一个命令findstr将列出找到的字符串,可能将找到的字符串都列出来。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值