Batch批处理命令编写脚本快速入门

什么是Batch

批处理(Batch),也称为批处理脚本,它的本质,是一堆DOS命令按一定顺序排列而形成的集合,通常被认为是一种简化的脚本语言。由于Windows操作系统的绝对市场地位,Batch被广泛应用于我们平时的工作,来代替人工处理批量繁琐的重复工作,实现所谓的“自动化”。

常用的基本命令和语法解释

 1. ECHO 和 @
 2. REM 和 ::
 3. PAUSE
 4. GOTO 和 :
 5. Call 和 Start
 6. If 
 7. Set
 8. %
 9. 转义符 ^
 10. 重定向符 >, >> ,>& 和 < 等

大家可以打开Windows操作系统的cmd命令行,输入Help查看所有命令

  • ECHO 和 @

    1. @字符放在命令前将关闭该命令回显,无论此时echo是否为打开状态。
    2. 打开回显或关闭回显功能
      格式:echo [{ on|off }]
      如果想关闭“ECHO OFF”命令行自身的显示,则需要在该命令行前加上“@”。即我们经常在别人的bat文件中看到的@echo off
    3. 输出空行,即相当于输入一个回车
      格式:ECHO.(中间不能有空格)
      比如echo.|time即相当于在TIME命令执行后给出一个回车。
    4. 答复命令中的提问
      格式:ECHO 答复语|命令文件名
      例如下面的命令就相当于在调用的命令出现人机对话时输入“Y”回车:
      C:>ECHO Y|CHKDSK/F
      C:>ECHO Y|DEL A :.
  • REM 和 ::

    REM为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。
    其次, :: 也可以起到rem 的注释作用, 而且更简洁有效;
    但有两点需要注意:
    第一, 任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。
    第 二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态,因为命令解释器不认为他是一个有效的命令行

  • Pause
    PAUSE就是字面的“暂停”的意思。在这里就是停止系统命令的执行并显示下面的内容。
    例如:

>pause
请按任意键继续. . .

要显示其他提示语,可以这样用:
Echo 继续请按Y! & pause > nul

  • GOTO 和 :
    goto指定跳转到标签,找到标签后,程序将处理从下一行开始的命令,标签以:开头,类似与java中的一个方法。
    例如:
echo 这是一个示例代码
goto :waiting
echo now goto the label :waiting
:waiting
Echo 继续请按Y! & pause > nul
  • Call 和Start
    CALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理。
CALL [drive:][path]filename [batch-parameters]

也可以调用本文件内命令段,相当于子程序。被调用的命令段以标签:label开头,例如:

CALL :label arguments

Start批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令
例:start explorer d:\
调用图形界面打开D盘

  • IF
    IF 条件判断语句,语法格式如下:
    IF [NOT] ERRORLEVEL number command
    IF [NOT] string1==string2 command
    IF [NOT] EXIST filename command

  • Set
    赋值,例如 :

set n = 0
set path=C:\build
cd %path%

注意:如果path含有空格,请用“”括起来
例如:set path=“C:\Program Files\Intel”

  • %符号
    (引用变量用%var%,调用程序外部参数用%1至%9等等)
    %0 批处理文件本身,包括完整的路径和扩展名
    %1 第一个参数
    %9 第九个参数
    %* 从第一个参数开始的所有参数
    参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
    例:最简单的复制文件自身的方法
    copy %0 d:\wind.bat

  • 转移符^
    ^是对特殊符号<,>,&的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。
    比如: 通常写入文件末尾:echo test >1.txt
    但假如转移符后,“>”就失去了原来的作用,例如:
    echo test ^>1.txt
    结果则是:test > 1.txt

  • 重定向符 >
    1.大于号“>”将命令发送到文件或设备,例如打印机>prn。使用大于号“>”时,有些命令输出(例如错误消息)不能重定向。
    2.双大于号“>>”将命令输出添加到文件结尾而不删除文件中已有的信息。
    3.小于号“<”从文件而不是键盘上获取命令所需的输入。
    4.>&符号将输出从一个默认I/O流(stdout,stdin,stderr)重新定向到另一个默认I/O流。

    命令重定向的标准句柄

句柄名称 说明
STDIN 0 标准输入,发送自键盘
STDUOT 1 标准输出,发送到命令Shell窗口
STDERR 2 标准错误输出,发送到命令Shell窗口
UNDEFINED 3~9 特定于应用程序的句柄

>&,将一个句柄的输出写入到另一个句柄的输入中。
1>nul 表示禁止输出正确的信息
2>nul 表示禁止输出错误信息。

| 命令管道符
格式:第一条命令 | 第二条命令 [| 第三条命令…]
将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。
例如:
dir c:|find “txt”
以上命令是:查找C:\所有,并发现TXT字符串。

& ,&& 和 || 组合命令
&符号,允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。
&&符号,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令。
||符号,可以同时执行多条命令,当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令。

“” 字符串界定符
双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法
cd “program files”
cd progra~1
cd pro*
以上三种方法都可以进入program files这个目录

对于for循环和参数传递等高级用法,在之后陆续补出

实战积累

::创建,删除,copy和剪切文件
::如果系统隐藏了文件扩展名,要以“.”结尾加在目录后
if not exist C:\build\old. (
mkdir C:\build\old.
move C:\build\test.zip C:\build\old
rd C:\build\old /s/q
::文件重复默认覆盖(不询问)
copy /y %Path%\input.txt. C:\Build
::删除所有以test开头的zip文件(例如test1.zip,testNG.zip)
del C:\build\test*.zip
)

::用安装的7zip解压
cd C:\Program Files\7-Zip
7z x C:\build\test.zip -oC:\build\unzipFile

::模拟等待
timeout /t 10
::timeout 是可以 `press a key to continue` 的,但这个user input,不能在远程执行代码时生效,所以可以巧用以下命令。
::每ping一次是一秒
ping localhost -n 10 > NUL 2>&1

::如果install.bat需要手动输入,可以从password.txt读取。
call install.bat < C:\Build\password.txt

::每隔5秒轮询文件是否存在,只有创建成功才执行copy
set n = 0
:Query
set /a n+=1
echo Try to get test.zip %n%th time...
ping localhost -n 5 > NUL 2>&1
set testZip="C:\Program Files\test.zip"
if not exist %testZip% goto Query
copy %testZip% C:\Build

所有常用Batch命令可以参考:
Windows batch 批处理常用命令列表
http://blog.csdn.net/ywyxb/article/details/61422484

你可能感兴趣的:(Batch)