zoukankan      html  css  js  c++  java
  • Windows批处理文件bat

    转载:批处理命令set if for pause %0 choice call start goto echo

    一、文本

    1.注释

    ::rem都表示注释和c++中的//一样

    @echo off关闭回显(回显就是将命令语句显示到控制台),@就是让后面的语句不显示,此处就是不显示echo off

    示例:

    @echo off
    rem  这是注释
    ::这是注释
    echo Hello World
    pause
    @echo on
    

    2.修改控制台输出字符颜色

    color 颜色 例如 color 0101:蓝色,02:绿色,04:红色

    3.字符串处理

    • 替换
    set var1=teststring
    set var2=%var1:test=mmm%
    ::var2=mmmstring,用mmm替换test
    
    • 合并
    set a=aaa
    set b=bbb
    set c=%a%%b% 
    ::c=aaabbb
    

    4.bat文件中文乱码

    将bat文件编码格式改为ANSI

    二、for循环

    转载:Windows bat脚本——for循环用法详解

    1.语法:

    在cmd窗口中:for %I in (command1) do command2 
    在批处理文件中:for %%I in (command1) do command2
    

    之所以要区分cmd窗口和批处理文件两种环境,是因为在这两种环境下,命令语句表现出来的行为虽然基本一样,但是在细节上还是稍有不同,最明显的一个差异就是:在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%I;而在批处理文件中,引用形

    式变量I必须使用双百分号,即%%I。为了方便起见,若不是特别强调,以下的讲解都以批处理文件环境为例。

    2.关键字

    for、in和do是for语句的关键字,它们三个缺一不可;

    %%I是for语句中对形式变量的引用,即使变量l在do后的语句中没有参与语句的执行,也是必须出现的;

    in之后,do之前的括号不能省略;in之后必须有一个空格

    command1表示字符串或变量,command2表示字符串、变量或命令语句;

    3.示例Demo1

    @echo off
    for  %%I in (ABC) do echo %%I
    pause
    

    保存为.bat文件(批处理文件)并执行,将会在弹出的批处理窗口中看到这样的信息:

    4.注意事项:

    • for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0~%%9中的任意一个;

    • in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键(Tab)、逗号、分号或等号分隔

    • for语句依次提取command1中的每一个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执行;并且每次只提取一个元素,然后执行一次do后的命令语句,而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提取command1中的下一个元素,再执行一次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行结束。

    5.示例Demo2

    @echo off
    for  %%I in (A,B,C) do echo %%I
    pause
    

    运行结果如下:

    如果把 bbs.bathome.cn 这个字符串中的点号换为空格、跳格或等号,执行结果将和demo2的执行结果别无二致。

    6.Demo2代码中for语句的执行过程:

    1. for语句以逗号为分隔符,把 A,B,C 这个字符串切分成三个元素:A、B和C,由此决定了do后的语句将会被执行3次;

    2. 第一次执行过程是这样的:先把 bbs 这个字符串作为形式变量I的值,带入do后的语句中加以执行,也就是执行 echo %%I 语句,此时的I值为A,因此,第一次执行的结果,将会在屏幕上显示A这个字符串;第二次执行和第一次执行的过程是一样的,只不过此时I的值已经被替换为command1中的第二个元素了,也就是 B 这个字符串;如此循环,当第三次echo执行完毕之后,整条for语句才算执行完毕,此时,将执行下一条语句,也就是pause命令。

    7.高级用法:

    • 搜索当前目录下有哪些文件
    @echo off
    for %%i in (*.*) do echo "%%i"
    pause
    
    • 搜索当前目录下所有的文本文件
    @echo off
    for %%i in (*.txt) do echo "%%i"
    pause
    

    8.for语法示例

    • for /f,f=file,对文件内容进行操作,对文件名操作需要配合dir /a-d /b
      读文件内容
    @echo off
    for /f %%I in (t1.txt) do echo %%I
    pause
    

    显示当前目录下所有文件名含有字符串test的文件

    @echo off
    for /f %%I in ('dir /a-d /b *test*.*') do echo %%I
    pause
    
    • for /r,r=recursion,递归,对文件夹进行操作,for /rdir /ad /b /s有非常类似的效果
      显示当前目录及所有子目录
    @echo off
    for /r %%i in (.) do echo %%i
    pause
    
    • for /d,d=directory,处理文件夹
      显示当前目录下所有以f开头的文件夹
    @echo off
    for /d %%i in (f*) do echo %%i
    pause
    
    • for /l,l=loop,高级循环

    语法:for /l %variable in (start,step,end) do command [command-parameters]

    解释:

    start指起始值;step指步间距;end指终止值。

    start、step和end都只能取整数(正负皆可)。

    步间距step的值不能为0。

    当步间距step的值为正整数时,终止值end不能小于初始值start。

    当步间距step的值为负整数时,终止值end不能大于初始值start。

    具体含义:从start开始计数,以step为步长,直至最接近end的那个整数值为止,这之间有多少个数,do后的语句就执行多少次。

    示例:for /l %%I in (1 2 10) do echo %%I,打印从1开始步长为2,直到10为止的数,即打印13579

    三、set用法

    1.示例1

    @echo off
    set var= this is a string
    echo %var%
    pause
    

    • 用法说明
      set是命令,var是变量名,=右边的"this is a string"是变量的值。在批处理中我们要引用这个变量,就把var变量名用两个%(百分号)扩起来,如%var%

    如果需要输入变量的值,只需给set加一个参数/p,例如:set /p var=please input:,输入完成后按Enter结束,此时var的值就是输入的值

    2.示例2

    @echo off
    set /p var=please input:
    echo The input is:%var%
    pause
    

    3.示例3

    @echo off
    set var=abbccdde
    echo before:%var%
    set var1=%var:cc=xx%
    echo after:%var1%
    pause
    

    四、if用法

    1.判断文件是否存在

    @echo off
    if exist "test.bat" (echo yes) else (echo no)
    pause
    

    注意:如果test.bat文件存在则输出yes,否则输出no,文件名必须用""括起来,文件名之后必须有一个空格,else两边也必须都有空格。

    2.判断输入的值是否符合预期

    @echo off
    set /p var=input:
    if %var%==y (echo yes) else (echo no)
    pause
    

    如果输入的是y则输出yes否则输出no

    五、调用

    1.call

    call命令一般从一个批处理脚本中调用另一个批处理脚本。

    2.start

    转载:批处理命令之start用法

    start命令启动单独的控制台窗口来运行指定程序或命令。如果在没有参数的情况下使用,start 将打开第二个命令提示符窗口。

  • 相关阅读:
    MQTT TLS 加密传输
    python多进程并发redis
    各种消息队列的特点
    mqtt异步publish方法
    Numpy API Analysis
    Karma install steps for unit test of Angular JS app
    reinstall bower command
    Simulate getter in JavaScript by valueOf and toString method
    How to: Raise and Consume Events
    获取对象的类型信息 (JavaScript)
  • 原文地址:https://www.cnblogs.com/mmmmmmmmm/p/14721386.html
Copyright © 2011-2022 走看看