• 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 将打开第二个命令提示符窗口。

  • 相关阅读:
    HDU 1713 相遇周期 (最小公倍数)
    HDU 1270 小希的数表 (暴力枚举+数学)
    HDU 1052 Tian Ji -- The Horse Racing (贪心)
    CodeForces 732D Exams (二分)
    CodeForces 732C Sanatorium (if-else)
    CodeForces 732B Cormen — The Best Friend Of a Man (贪心)
    CodeForces 732A Buy a Shovel (水题)
    CodeForces 743C Vladik and fractions (数论)
    Node基础
    正向代理与反向代理
  • 原文地址:https://www.cnblogs.com/mmmmmmmmm/p/14721386.html
Copyright © 2020-2023  润新知