windowBat脚本学习笔记

常用命令

  1. @echo on相当于@echo,会显示执行的命令已经命令输出的内容

  2. ren 别名rni 修改文件名ren sourcename destname

  3. copy con filename 创建文本并写入内容

  4. @echo off关闭回显,不会显示执行的命令,仍会显示命令输出的内容

  5. @是不回显当前行命令,如果执行echo off会第一行打印echo off

  6. >nul 将命令输出内容不显示

  7. > 和>>的区别:前者是覆盖,后者是增加

  8. type filename 打印文件内容

  9. call filename调用其他bat命令文件

  10. call :xx 可以调用指定标号处的命令

    call :label

    echo 执行完下面的之后再回来执行这里

    :label

    echo 会执行这一句,执行完会返回去继续执行

    主要体现在两个方面:一是调用该批处理以外的另一个批处理(事实上调用该批处理本身也可以,只是会带来不必要的死循环);另一个是有着与goto类似的向特定标签跳转功能,然而,call的独特之处在于:在调用的批处理标签后的内容处理完毕以后,控制会继续执行call后面的语句。

    @echo off
    set Text=Hello world!
    for /l %%i in (0,1,11) do echo %%Text:~%%i,1%%
    echo ======================
    rem 利用call函数回调功能,再次执行这一句
    for /l %%i in (0,1,11) do call echo %%Text:~%%i,1%%
    ======================================================
    %Text:~0,1%
    %Text:~1,1%
    %Text:~2,1%
    %Text:~3,1%
    %Text:~4,1%
    %Text:~5,1%
    %Text:~6,1%
    %Text:~7,1%
    %Text:~8,1%
    %Text:~9,1%
    %Text:~10,1%
    %Text:~11,1%
    ======================
    "
    H
    e
    l
    l
    o
    ECHO is off.
    w
    o
    r
    l
    d
    
  11. rem 批处理注释

    @echo off
    rem 这是一个简单的批处理文件
    call :aaa
    echo 我是第一句
    :aaa
    echo 我是第二局
    
    λ text.bat
    我是第二局
    我是第一句
    我是第二局
    
  12. :: 作用相当于rem 只是不会被echo on强制显示,而rem则会显示,表明rem是命令

  13. set 自定义变量

    set赋值的时候变量和值之间不能够有空格

    因为空格也算字符,变量名有空格的话使用的时候也得戴上空格,值前后有空格的话就是有空格

    @echo off
    rem set /a 说明变量是可计算的 set /a varibles=1+2 //varibles = 3
    set temp="c:\" 
    echo 显示所有以t为开头的变量
    set t
    echo 显示变量temp
    set temp
    echo 显示c:\下所有文件,以/w格式显示
    dir /w %temp%
    echo 删除变量temp,也就是给temp赋空值
    set temp=
    =============================================   
    显示所有以t为开头的变量
    TEMP="c:\"
    TERM=cygwin
    time_init=0
    TMP=C:\Users\27380\AppData\Local\Temp
    TOMCAT_HOME=D:\Applications\tomcat9
    显示变量temp
    TEMP="c:\"
    显示c:\下所有文件,以/w格式显示
     Volume in drive C has no label.
     Volume Serial Number is 8A5D-503D
    
     Directory of c:\
    
    [Intel]               [PerfLogs]            [Program Files]       [Program Files (x86)]
    [Users]               [Windows]
                   0 File(s)              0 bytes
                   6 Dir(s)  48,832,393,216 bytes free
    删除变量temp,也就是给temp赋空值
    
    @echo off
    set /p var=请输入:
    echo %var%
    echo.
    pause
    =============================
    请输入:你好啊
    你好啊
    
  14. % 可以对变量中的字符进行有效地编辑和变化

    @echo off
    set var=hello world
    echo %var%
    set var2=%var%
    echo %var2%
    set var3=%var:ld=orms and bugs%
    echo %var3%
    set temp=1234567890
    echo %temp%
    echo %temp:~4%
    echo %temp:~4,3%
    echo %temp:~-4%
    echo %temp:~-4,3%
    echo %temp:~4,-2%
    echo %temp:~0,-2%
    ============================
    hello world              
    hello world              
    hello wororms and bugs   
    1234567890               
    567890                   
    567                      
    7890                     
    789                      
    5678                     
    12345678                 
    
  15. goto和call :跳转相似,但不会在跳回去执行

  16. start:用于重新启用一个单独的命令窗口或自行一个程序,并在新的窗口中显示指定文件内容(默认启动cmd)

    start [“title”] [/dPath] [/i:] [/min] [/max] [{/separate|/shared}] [/wait]

    ​ title:启动窗口的title

    ​ min:最小化启动

    ​ wait:等待窗口执行完(窗口关闭)

    @echo off
    start "我是新开窗口的title" type test.txt
    :: 打开百度首页
    start www.baidu.com
    echo over哦 
    
  17. if

    if [not] errorlevel number command [else expression]

    if [not] string1==string2 command [else expression]

    if [not] exist filename command [else expression]

    if [/i] string1 compareOP string2 command [else expression]

    字符型 compareOP:

    EQU : =

    NEQ : !=

    LSS : <

    LEQ : <=

    GTR : >

    GEQ : >=

    i : 强制大小写,加上/i会忽略大小写

    @echo off
    :: else不能换行写,只能写在右括号空一格的位置
    if exist test.txt (echo 找到了txt文件,其内容是:type test.txt) else (echo 找不到txt文件)
    echo ======================================
    if /i dog==cat (echo dog==cat) else (echo dog!=cat)
    :: if else
    if %time:~0,2% lss 12 (
    echo 现在是上午
    ) else (
    echo 现在是下午
    )
    
    找到了txt文件,其内容是:type test.txt
    ======================================
    dog!=cat
    现在是上午
    
  18. for

    for [/l] {%variable|%%variable} in (set) do command [CommandLineOptions]

    /l

    for /l %%i in (2,2,10) do echo %%i
    ::2开始,每次加2,递增到10
    ===================================
    2 
    4 
    6 
    8 
    10
    

    normal

    @echo off
    set /a sum=0
    for %%f in (*.txt) do (
    echo %%f 文件内容如下:
    type %%f
    echo.
    set /a sum=sum+1
    )
    echo 一共显示了%sum%个文件
    
    =========================================
    a.txt 文件内容如下:     
    我是a.txt文本         
    
    b.txt 文件内容如下:     
    我是b.txt文本         
    
    c.txt 文件内容如下:     
    我是c.txt文本         
    
    test.txt 文件内容如下:  
    我是test.txt文本      
    
    一共显示了4个文件   
    

    /l

    @echo off
    :: 把⭕的8*8方阵画进八个文件中,excise!
    setlocal EnableDelayedExpansion
    set var=for /l %%i in (1,1,7) do set var=%var%!var!
    for /l %%i in (1,1,8) do (
    for /l %%j in (1,1,8) do echo %var%>>输出结果%%i.txt
    )	
    echo 8×8的⚪方阵已经画好在8个文件中
    

    /f

    @echo off
    setlocal EnableDelayedExpansion
    :: 创建测试文件
    if exist 文件读取测试文件.txt del 文件读取测试文件.txt
    for /l %%i in (1,1,10) do (
    set str=我是第%%i行 
    for /l %%j in (1,1,6) do (
    set str=!str!%%i行的第%%j个
    )
    echo !str!>>文件读取测试文件.txt
    )
    echo 打印 文件读取测试文件.txt 文件
    type 文件读取测试文件.txt
    echo ===================
    echo 测试 文件读取测试文件.txt 里每一行的首字符
    for /f %%i in (文件读取测试文件.txt) do echo %%i
    echo ===================
    echo 测试 文件读取测试文件.txt 里跳过前两行
    for /f "skip=2" %%i in (文件读取测试文件.txt) do echo %%i
    echo ===================
    echo 测试 文件读取测试文件.txt 跳过前两行 并读取每行的第2个,和4-6个字符
    for /f "skip=2 tokens=2,4-6" %%i in (文件读取测试文件.txt) do echo %%i %%j %%k %%l
    echo ===================
    echo 测试 文件读取测试文件.txt 当行首字母为N时候,就跳过此行
    for /f "eol=N skip=2 tokens=2,4-6" %%i in (文件读取测试文件.txt) do echo %%i %%j %%k %%l
    echo ===================
    echo 测试 文件读取测试文件.txt delims=e表示不再以空格区分每个单词,而是以字母e作为间隔
    for /f "eol=N delims=个" %%i in (文件读取测试文件.txt) do echo %%i %%j %%k %%l
    echo ===================
    echo 测试 文件读取测试文件.txt usebackq表示双引号中的东西是文件名而不是字符串
    for /f "usebackq" %%i in (文件读取测试文件.txt) do echo %%i %%j %%k %%l
    ==================================================================================
    打印 文件读取测试文件.txt 文件
    我是第1行  第1行的第1个 第1行的第2个 第1行的第3个 第1行的第4个 第1行的第5个 第1行的第6个
    我是第2行  第2行的第1个 第2行的第2个 第2行的第3个 第2行的第4个 第2行的第5个 第2行的第6个
    我是第3行  第3行的第1个 第3行的第2个 第3行的第3个 第3行的第4个 第3行的第5个 第3行的第6个
    我是第4行  第4行的第1个 第4行的第2个 第4行的第3个 第4行的第4个 第4行的第5个 第4行的第6个
    我是第5行  ���5行的第1个 第5行的第2个 第5行的第3个 第5行的第4个 第5行的第5个 第5行的第6个
    我是第6行  第6行的第1个 第6行的第2个 第6行的第3个 第6行的第4个 第6行的第5个 第6行的第6个
    我是第7行  第7行的第1个 第7行的第2个 第7行的第3个 第7行的第4个 第7行的第5个 第7行的第6个
    我是第8行  第8行的第1个 第8行的第2个 第8行的第3个 第8行的第4个 第8行的第5个 第8行的第6个
    我是第9行  第9行的第1个 第9行的第2个 第9行的第3个 第9行的第4个 第9行的第5个 第9行的第6个
    我是第10行  第10行的第1个 第10行的第2个 第10行的第3个 第10行的第4个 第10行的第5个 第10行的第6===================
    测试 文件读取测试文件.txt 里每一行的首字符
    我是第1行
    我是第2行
    我是第3行
    我是第4行
    我是第5行
    我是第6行
    我是第7行
    我是第8行
    我是第9行
    我是第10===================
    测试 文件读取测试文件.txt 里跳过前两行
    我是第3行
    我是第4行
    我是第5行
    我是第6行
    我是第7行
    我是第8行
    我是第9行
    我是第10===================
    测试 文件读取测试文件.txt 跳过前两行 并读取每行的第2个,和4-6个字符
    第3行的第1个 第3行的第3个 第3行的第4个 第3行的第5个
    第4行的第1个 第4行的第3个 第4行的第4个 第4行的第5个
    第5行的第1个 第5行的第3个 第5行的第4个 第5行的第5个
    第6行的第1个 第6行的第3个 第6行的第4个 第6行的第5个
    第7行的第1个 第7行的第3个 第7行的第4个 第7行的第5个
    第8行的第1个 第8行的第3个 第8行的第4个 第8行的第5个
    第9行的第1个 第9行的第3个 第9行的第4个 第9行的第5个
    第10行的第1个 第10行的第3个 第10行的第4个 第10行的第5===================
    测试 文件读取测试文件.txt 当行首字母为N时候,就跳过此行
    第3行的第1个 第3行的第3个 第3行的第4个 第3行的第5个
    第4行的第1个 第4行的第3个 第4行的第4个 第4行的第5个
    第5行的第1个 第5行的第3个 第5行的第4个 第5行的第5个
    第6行的第1个 第6行的第3个 第6行的第4个 第6行的第5个
    第7行的第1个 第7行的第3个 第7行的第4个 第7行的第5个
    第8行的第1个 第8行的第3个 第8行的第4个 第8行的第5个
    第9行的第1个 第9行的第3个 第9行的第4个 第9行的第5个
    第10行的第1个 第10行的第3个 第10行的第4个 第10行的第5===================
    测试 文件读取测试文件.txt delims=e表示不再以空格区分每个单词,而是以字母e作为间隔
    我是第1行  第1行的第1 %j %k %l
    我是第2行  第2行的第1 %j %k %l
    我是第3行  第3行的第1 %j %k %l
    我是第4行  第4行的第1 %j %k %l
    我是第5行  第5行的第1 %j %k %l
    我是第6行  第6行的第1 %j %k %l
    我是第7行  第7行的第1 %j %k %l
    我是第8行  第8行的第1 %j %k %l
    我是第9行  第9行的第1 %j %k %l
    我是第10行  第10行的第1 %j %k %l
    ===================
    测试 文件读取测试文件.txt usebackq表示双引号中的东西是文件名而不是字符串
    我是第1%j %k %l
    我是第2%j %k %l
    我是第3%j %k %l
    我是第4%j %k %l
    我是第5%j %k %l
    我是第6%j %k %l
    我是第7%j %k %l
    我是第8%j %k %l
    我是第9%j %k %l
    我是第10%j %k %l
    
  19. 形参

    @echo off
    echo 这里是被调用了.bat
    echo 您输入的第一个参数是%1
    echo 您输入的第二个参数是%2
    ============================
    λ text.bat 我是第一个参数 我是第二个参数
    这里是被调用了.bat
    您输入的第一个参数是我是第一个参数
    您输入的第二个参数是我是第二个参数
    
  20. setlocal EnableDelayedExpansion

    启动延迟扩张

    也即是在执行一条语句时候是先赋值还是执行完后赋值

    @echo off 
    set /a a=4 
    for /l %%i in (1,1,10) do (
    set /a a = %%i+a&echo %a% //一条语句才入有这样的效果
    )
    echo %a%
    pause >nul
    ===========================
    4 
    4 
    4 
    4 
    4 
    4 
    4 
    4 
    4 
    4 
    59
    
    @echo off 
    setlocal EnableDelayedExpansion
    set /a a=4 
    for /l %%i in (1,1,10) do (
    set /a a = %%i+a&echo !a!
    )
    echo %a%
    pause >nul
    ===========================
    5  
    7  
    10 
    14 
    19 
    25 
    32 
    40 
    49 
    59 
    59 
    
  21. escape字符%

    通常被译为转义字符,但也有更形象的译名,脱逸字符,逃逸字符等。也就是%不仅仅将于其他相关的特定字符转义并替代为特定字符,而且自身也会“脱逸”。双%%为%,四%为%%。

    @echo off
    set Text=Hello world!
    for /l %%i in (0,1,11) do call echo %%Text:~%%i,1%%
    =================================
    H            
    e            
    l            
    l            
    o            
    ECHO is off. 
    w            
    o            
    r            
    l            
    d            
    !            
    
  22. &

    在多个命令之间其连接作用,完全可以分成独立的执行

    相互之间即便出错也会一直执行完全

  23. &&

    也有着多跳条命令顺序执行的功能。

    如果多条命令中某一条命令出错,后面的不会再被执行

  24. ||

    与&&刚好相反

    如果第一条命令执行正确的话,就不会再往下执行

  25. |

    管道符,和linux功能类似

    netstat /a /n | find “12123”

  26. tasklist.exe查看进程.

参考

window批处理脚本学习教程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值