Window基本命令学习(二)

来源:互联网 发布:新乡医学院教务网络 编辑:程序博客网 时间:2024/06/05 18:37
标准输入、输出及错误日志的重定向

要想学号Windows的命令行,重定向必须要熟练掌握。主要的重定向技术如下:

重定向技术 描述 command1>command2 将第一个命令的输出作为第二个命令的输入 command<[path]filename 从指定的文件路径中提取命令的输入信息 command>[path]filename 将输出发送到指定文件,必要时需要创建该文件或者重写该文件(如果该文件已经存在) command>>[path]filename 将输出附件到指定的文件(如果该文件存在),或者创建该文件并向其写入 command<[path]filename>[path]filename 从指定的文件获取命令的输入,之后将命令的输出发送到指定文件 command<[path]filename>>[path]filename 从指定的文件获取命令的输入,之后将命令的输出附加到指定文件 command 2>[path]filename 创建指定的文件,之后将错误输出信息发送到该文件。如果该文件存在,则其内容会被重写 command 2>&1 将错误输出信息发送到标准输出
标准输出重定向到其他命令

管道技术也是对应Windows命令行非常有用的,比如:
command1 | command2
这里通过管道(|),command1的输出被重定向到command2的输入啦!

命令链与分组

当然,为了执行稍微复杂点的命令,必须有命令链与分组的知识:

符号 语法 描述 & command1&command2 执行命令1,之后执行命令2 && command1&&command2 如果命令1成功完成,则执行命令2 || command1||command2 如果命令1执行失败,则执行命令2
变量

对于一个任何一个语言的学习,变量都是必不可少的。Windows脚本语言通过set variable_name=variable_value来设置变量。使用变量可以用两个%将变量加在中间,比如命令:cd %SystemRoot%\System32就是进入变量SystemRoot对应值的System32路径下。当然,还需要了解变量的作用范围。不像C++、Java这类语言可以使用{}限制变量的作用范围,Windows脚本需要使用setlocalendlocal命令限制变量的范围,如下面的例子:

rem ************************rem Script: localVariable.batrem Creation Data: 2016-7-25rem Last Modified: 2016-7-25rem Author: XiaoDong Wangrem Email: 347916416@qq.comrem ************************rem Description: Test the local variablerem ************************rem Files: Stores output nonerem ************************@echo offset sysCount=0set deviceCount=0rem Start localizationsetlocalset sysCount=2set deviceCount=2echo Local count: %sysCount% system edits ^& %deviceCount% dev ice checkendlocalecho Local count: %sysCount% system edits ^& %deviceCount% dev ice check

得到的结果是:

Local count: 2 system edits & 2 dev ice checkLocal count: 0 system edits & 0 dev ice check

可以看出,嵌套层局部变量不会影响到上一层的变量。

条件表达式

有了变量基础,就可以学习条件表达式了,主要的条件表达式如下:

if condition (statement1) [else (statement2)]----如果condition成立,则执行statement1,否则执行statement2if condition (statement)----如果condition成立,则执行statementif not condition (statement1) [else (statement2)]----如果condition不成立,则执行statement1,否则执行statement2if not condition (statement)----如果condition不成立,则执行statementif defined variable (statement)----如果定义了变量variable,则执行statementif not defined variable (statement)----如果没有定义变量variable,则执行statement

上面的用法很好理解,这几种用法所见即所得。关键要知道嵌套条件的表达方式,这点和其他语言有点不同,嵌套的if语句前面要加上@。如下例:

if %1=="1" (@if "%2==2" (hostname & ver) else (ver)) else (hostname & netstat -a)
命令行迭代语句

有了if,当然少不了for啦。最基本的for语句是:
for iterator do (statement)
这里的iterator用来控制for循环的执行,使用时应注意以下几点:

  • iterator变量之存在于for循环的上下文中
  • iterator变量名必须在a~z或者A~Z的范围内,比如%%A、%%b、%%C
  • iterator变量名大小写敏感,即:%%A与%%a不同
    for语句不同的结构有不同的用途,具体规则如下表:
迭代用途 语法格式 文件集合 for %%variable in (fileSet) do statement 目录集合 for /d %%variable in (directorySet) do statement 子目录中的文件 for /r [path] %%variable in (fileSet) do statement 遍历一系列的值 for /l %%variable in (stepRange) do statement 分析文本文件、字符串以及命令输出 for /f [“options”] %%variable in (source) do statement

注意:在脚本中使用两个%,命令行中输入则只需要一个%(下面的例子都是在命令行输入,则只使用了一个%)
- 例如测试遍历一些列值的操作可以直接可以在命令行中这样输入:
for /l %a in (0,2,10) do echo %a
则输出:

0246810
  • 测试目录集合的操作可以直接可以在命令行中这样输入:
    for /d %a in (c:\*) do echo %a
    则输出:
c:\Driversc:\Intelc:\KuGouc:\PerfLogsc:\Program Filesc:\Program Files (x86)c:\scriptc:\SysWOW64c:\Usersc:\Windows
  • 在处理子目录文件的例子需要解释一下:
    for /r [path] %%variable in (fileSet) do statement
    里面的[path]设定的是目录起点,比如C:\,不写则默认为当前目录比如要列出C盘中的所有的文本文件则可以在命令行中输入:
    for /r C:\ %a in (*.txt) do echo %a
    这个结果很长,你可以自己试试
0 0
原创粉丝点击