Windows批处理命令

这里只介绍Windows批处理命令,怎么写批处理参考博客:http://www.cnblogs.com/glaivelee/archive/2009/10/07/1578737.html


1、变量延迟:由于在批处理执行命令的机制中,批处理读取命令时是按行读取的,并且在读取完命令后,在处理之前就要完成必要的处理工作,所以在对命令进行预处理时候就已经将该行中的所有变量进行了赋值替换。因此如果在同一行命令中出现先要对变量进行改变,之后再使用改变后的值的情况(比如set a=5 & echo %a%),就无法达到效果,因为变量在预处理时候已经替换为了之前的值。
为了改变上述情况,因此引入了变量延迟的机制,通过命令setlocal enabledelayedexpansion可以开启变量延迟机制,同时要把需要进行变量延迟的变量,使用惊叹号进行引用,比如上面的语句要改写为set a=5 & echo !a!

注意:例如for命令等,其后用一对圆括号闭合的所有语句也当作一行。

2、字符串操作

字符串截取
语法:%var:~x,y% (x,y∈Z)
说明:当x为正数时表示从左到右第x+1位开始截取,当x为负数时表示从右到左第x位开始截取(右一位是-1),当省略x时采用默认值0;当y为正数时表示截取的长度,当y为负数时表示截取到从右到左的第y+1位,当省略y时采用默认值-1。

字符串替换

语法:%var:str1=str2%
说明:将字符串var中所有的str1替换为str2。


3、CMD命令:CMD 命令行参数 启动Windows 命令解释器的一个新实例,新实例和当前实例共用同一个窗口。
   START命令:START 命令行参数 启动一个单独的窗口以运行指定的程序或命令。

4、REM命令:REM [comment] 在批处理文件或 CONFIG.SYS 里加上注解或说明。内容不会执行,但能回显。
   ::[coment] 也能在批处理文件中进行注解或说明;但是有亮点需要注意:
    第一, 任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。
      有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别。
      无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可以起到注释作用,所以 :: 常被用作注释符号,其实 :+ 也可起注释作用。
    第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中。

    行内注释格式:%注释内容%  (不常用,慎用)

5、PAUSE命令:暂停命令执行,并等待用户输入。
   COLOR命令:修改当前命令行窗口的前景色和背景色。
   PROMPT命令:PROMPT [text] 更改 cmd.exe 命令提示符。

6、SET命令的/P参数:SET /P variable=[promptString] 命令行开关允许将变量数值设成用户输入的一行输入。读取输入行之前,显示指定的 promptString。promptString 可以是空的。如果再配合管道命令写成SET /P variable=[promptString]<nul,可以使该命令不需要任何输入 ,只是显示提示,同时不换行。这样就可以实现在同一行上不断显示新的信息,进而实现进度条功能。当然由于这里的变量并没有实际用途,因此也可以省略掉,然后就是set /p =xxx <nul

7、SETLOCAL/ENDLOCAL命令:开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后,所做的环境改动只限于批处理文件。要还原原先的设置,必须执行 ENDLOCAL。达到批处理文件结尾时,对于该批处理文件的每个尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被执行。

8、IF\GOTO\FOR\CALL\SHIFT:批处理文件命令执行流程控制命令。

9、FOR命令:在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I。该命令有以下几种格式,但是只有第一种格式没有条件限制,其他几种格式只在启用命令行扩展之后才会支持。

格式1:FOR %variable IN (set) DO command [command-parameters]
     在这种格式下,set里面的字符串或变量引用将被当作一个普通的集合,不支持命令。集合内的元素采用空格进行分隔。如果元素字符串带有空格,元素需要加英文字符的双引号"",以表明元素中的空格是元素的一部分。如果需要在集合里面引用变量,必须使用%variable%的形式进行引用。命令支持通配符以指定一组与之匹配的文件。比如:(*.exe D:\*.exe)指定当前目录下和D盘目录下的exe文件,不进行子目录扩展。

格式2: FOR /L %variable IN (start,step,end) DO command [command-parameters]:
     在这种格式下,命令的执行效果与常规FOR循环是一致的,其后的set集合里必须有三个以上元素,低于三个不会执行循环,多余三个,多余的元素不会使用。前三个元素不能是空元素(比如:(1,,)等),否则不会执行循环体。前三个元素必须是有效的数字,如果是非数字字符,会进入死循环。前三个数字元素分别是循环变量的(初值,递增量,终止条件)。集合中支持变量的引用,采用%变量名%的形式进行引用。

格式3: FOR /D %var in (set) do command [param] : 在这种格式下,set集合里面的元素是字符串集合,set集合不支持命令,变量引用使用%variable%形式。set集合里面的元素如果是带有通配符的目录,则会列出该目录中与通配符匹配的目录。注意这里通配符只匹配目录,不匹配文件,且不匹配目录的子目录下的路径。如果元素不是通配符,则会直接列出,不进行匹配扩展,也不对目录或文件的存在性进行确定。

格式4: FOR /R [dir] %var in (set) do command [param]: 在这种格式下,命令枚举以dir为根的目录及其子目录,如果未指定dir目录,则使用当前目录。set集合中的元素指定需要匹配的文件或者目录名的通配表达式,比如(*.exe *.txt)则限定只枚举dir目录下所有的exe文件和txt文件。如果集合中的元素不是通配表达式(比如:(exe)),则会在每个匹配项后都追加该字符串。如果set集合的元素包含字符.即(.),该命令将只列出该目录树下的所有目录,不列出文件。该命令集合中不支持命令,变量引用采用%variable%形式。

格式5:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters] 该格式在启用useback选项后,可以用一对双引号""表示一条完整的路径,从而规避文件路径中的空格字符串,否则路径中不能包含空格。file-set是一系列的文件集合,集合中的所有文件将会被依次打开读取内容并按照options指定的参数进行分析得到一个数组,然后遍历列出。
FOR /F ["options"] %variable IN ("string") DO command [command-parameters] 该格式在启用useback选项后,字符串必须使用一对单引号''替代一对双引号""。set集合中给出的字符串将被按照options给出的参数进行分析得到一个数组,然后遍历列出。
FOR /F ["options"] %variable IN ('command1') DO command2 [command-parameters] 该格式在启用useback选项后,command1必须使用一对反引号``替代一对单引号''。set集合中的command1将被执行,然后将执行的输出结果按照options给出的参数进行分析得到一个数组,然后遍历列出。在command1中如果用到管道等命令时,需要加字符^进行转意。比如('dir /b ^|findstr "xx"')

options的可选项:

 eol=c - 指一个行注释字符的结尾(就一个)
 skip=n - 指在文件开始时忽略的行数。
 delims=xxx - 指分隔符集。这个替换了空格和制表符的默认分隔符集。
 tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
 usebackq        - 指定以下三个新语法已经使用:1、在 file-set中允许使用双引号扩起文件名称,这样对于那些文件名称或路径中带有空格的文件就可以被兼容处理;2、使用一对单引号替代双引号作为文字字符串命令;3、使用一对反引号替代原有的一对单引号作为命令执行语句。

 set集合中变量引用需要使用%variable%的格式。

FOR命令中的扩展处理:假设for命令中定义的变量是%%I,那么在引用变量的时候在变量引导符%%和变量名I之间加入一些扩展字符会产生一些额外的作用:

     ~          - 删除任何引号("),扩展 %I
     ~f        - 将 %I 扩展到一个完全合格的路径名
     ~d        - 仅将 %I 扩展到一个驱动器号
     ~p        - 仅将 %I 扩展到一个路径
     ~n        - 仅将 %I 扩展到一个文件名
     ~x        - 仅将 %I 扩展到一个文件扩展名
     ~s        - 扩展的路径只含有短名
     ~a        - 将 %I 扩展到文件的文件属性
     ~t        - 将 %I 扩展到文件的日期/时间
     ~z        - 将 %I 扩展到文件的大小
     ~$PATH:   - 查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串


10、ASSOC命令:ASSOC [.ext[=[fileType]]] 显示或修改文件扩展名关联。
   FTYPE:FTYPE [fileType[=[openCommandString]]] 显示或修改用在文件扩展名关联中的文件类型。
   例如:
       ASSOC .pl=PerlScript
       FTYPE PerlScript=perl.exe %1 %*

11、TREE命令:TREE [drive:][path] [/F] [/A] 以图形显示驱动器或路径的文件夹结构。
   CD(CHDR)\MD(MKDIR)\DEL(ERASE):目录切换\创建\删除命令
   COPY命令:将一份或多份文件复制到另一个位置。
   XCPOY命令:复制文件和目录树。
   RN(RENAME)命令:REN [drive:][path]filename1 filename2.  重命名文件,但不能指定新的驱动器或路径。
   RD(RMDIR)命令:RD [/S] [/Q] [drive:]path 删除目录及其目录下的所有子目录和文件
   MOVE命令:移动文件并重命名文件和目录。
   REPLACE命令:REPLACE srcFile targetFile 使用源文件替换目标文件
   ATTRIB命令:显示或更改文件属性。
   PUSHD/POPD命令:PUSHD [path | ..] 保存当前目录然后更改到指定的目录。之后可以使用POPD命令恢复。

12、DIR命令:目录显示命令。例如命令:dir [dir] /a-d /s /b,列出指定目录及其子目录下存在的所有文件。

部分命令参数:

 /A 显示具有指定属性的文件:D 目录; R 只读文件; H 隐藏文件;A 准备存档的文件; S 系统文件; I 无内容索引文件; L 解析点; - 加在属性前,表示无该属性
 例如:dir /a-d-h  列出非隐藏非目录属性的文件

 /B 使用空格式(没有标题信息或摘要)。

 /S 显示指定目录和所有子目录中的文件。

DIRCMD环境变量:

  该环境变量用于指定dir指令默认使用的命令行参数,在环境变量中未指定的命令行参数依旧使用命令默认值。在指定该环境变量后,对于同一个命令行参数,在命令执行时优先使用命令行指定的参数值,次之使用环境变量中的值,最后使用命令默认值。该环境变量默认没有设置,要设置该环境变量请使用set命令。设置格式如下:
 set DIRCMD=dir命令行参数
 例如:
     set DIRCMD=/a-h-d:设置默认只列出非目录非隐藏属性的文件。
     set DIRCMD=:清除该环境变量的值

参考网址:http://www.360doc.com/content/11/0603/17/2961363_121467069.shtml

13、FC命令:比较两个文件或两个文件集并显示它们之间的不同
   TYPE命令:TYPE [drive:][path]filename 显示文本文件的内容。

14、FIND命令:在文件中搜索字符串。

       FINDSTR命令:在文件中寻找字符串。

15、网络命令:PING、NET、NETSH、FTP、TELNET、IPCONFIG、ARP、MSG、RASDIAL(宽带操作命令)

16、系统管理命令:AT(SCHEDULE替代)、SHUTDOWN、TSKILL、TASKKILL、TASKLIST、SC、REG、POWERCFG

17、更多命令参考网址:http://www.feiesoft.com/windows/cmd/






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值