批处理bat基础知识

基础知识

  1. @echo off @是不显示当前命令的回显;echo off是关闭除此之外的所有命令的回显;合在一起就是不显示所有命令的回显,包括当前命令的回显。

  2. @rem 或者 :: 批处理中的注释语法。

  3. echo: 或则和 echo. 在脚本输出中添加一个空行。

  4. chcp 65001切换当前cmd窗口的语言为UTF8,支持中文的显示。

  5. cd /d %~dp0切换当前目录为批处理文件所在目录。一定要加/d。

  6. setlocal enabledelayedexpansion 延时扩展。for循环里面使用最多。因为for循环是按照一行命令去执行的,批处理的机制会先预处理一下,所以要使用最新的变量值,就需要使用延迟扩展语法。

  7. > nul 放弃当前命令的输出。一般跟在一条命令的后面,表示不显示当前命令的输出内容。

  8. findstr 字符串1 文件1 >nul && (文件1包含字符串1) || (文件1不包含字符串1) 文件中查找指定字符串,并且根据查找的结果,做后续相应的操作。

  9. findstr 字符串1 文件1 if !errorlevel! equ 0 ( echo 查找到字符串 ) else ( echo 没有查找到字符串 ) 文件中查找指定字符串,注意后面的文件名字一定要正确,如果写成了一个字符串而非文件,那么会报错FINDSTR: Cannot open错误。需要使用到延迟扩展才行。

    除非参数有 /C 前缀,请使用空格隔开搜索字符串。
    例如: ‘FINDSTR “hello there” x.y’ 在文件 x.y 中寻找 “hello” 或
    “there”。‘FINDSTR /C:“hello there” x.y’ 文件 x.y 寻找
    “hello there”。

    @echo off
    @setlocal enabledelayedexpansion
    chcp 65001
    cd /d %~dp0
    
    @REM 遍历文件test.txt中的每一行,分别记录找到几行,没找到几行,查找的字符串有引号,要加转移符号
    set all=0
    set found=0
    set notfound=0
    for /f "delims=" %%i in (test.txt) do (
        set /a all=!all!+1
        echo %%i | findstr /c:"SUCCESS: The process \"test.exe\" with PID" && ( set /a found=!found!+1 ) || ( set /a notfound=!notfound!+1 )
        echo.
    )
    echo 找到%found%个,没找到%notfound%个
    
    pause
    

    在这里插入图片描述

  10. echo 字符串1 | findstr 字符串2 >nul && (字符串2包含字符串1) || (字符串2不包含字符串1) 字符串中查找指定字符串,并且根据查找结果,做后续相应的操作。
    需要注意的是,findstr命令后面紧跟的&& || 代表了两种查找结果的表示方式;
    if !errorlevel! equ 0 () else ()也是一种方式,0表示查找到,其他表示没查找到。

  11. for循环
    for %%f in (%folderPath%) do ( echo %%f ) 打印路径下的每个文件的名字。
    下面列举几项 for的参数:
    for /d(D) 遍历文件夹

    ::括号里的 * 代表bat文件所在的目录
    for /d %%i in (*) do ( echo %%i )
    

    for /l(L) 数字序列

    @REM 表示以step为增量从开始到结束的一个数字序列,此处是:1开始,每次+3,20结束
    for /l %%i in (1,3,20) do (echo %%i)
    

    for /f(F) 打印文件内容

    @REM 语法格式
    @REM for /f ["options"] %%i IN (file) DO command
    @REM for /f ["options"] %%i IN ("string") DO command
    @REM for /f ["options"] %%i IN ('command') DO command
    
    ::表示循环输出ls命令(列出当前目录下的文件和文件夹)的每一个项
    ::不加参数,默认以空格分割此行文本(等同于"delims= "注意有一个空格),即只显示第一个空格前或此行结尾前文本
    ::注意,此处打印文件的名字,文件名如果有空格,会截取到空格前,想要避免,加"delims="
    for /f "delims=" %%i in ('ls') do (
        set aa= %%i
        echo !aa!
    )
    
    @REM /f "tokens=2 delims= "
    @REM tokens的作用就是当你经过delims将每一行分为更小的元素时,由它来控制要取哪个或哪几个。
        :: 取 dilims 分成的第2个元素
        for /f "tokens=2 delims= " %%i in (a.txt) do echo %%i
    
        :: 取 dilims 分成的第2到4个元素
        for /f "tokens=2,3,4 delims= " %%i in (a.txt) do echo %%i %%j %%k
        for /f "tokens=2-4 delims= " %%i in (a.txt) do echo %%i %%j %%k
        :: i j k 分别代表取的三个元素
    
        :: 取 dilims 分成的第2之后的元素
        for /f "tokens=2,* delims= " %%i in (a.txt) do echo %%i %%j %%k
    
    @REM /f “skip=1”
    @REM 用 skip 来告诉for跳过前两行。
    
  12. timeout /T 5 /NOBREAK timeout /T 延迟秒数,单位秒 不受键盘阻塞。

  13. del /S /Q "%APPDATA%\testbat" >nul 删除文件 /s表示递归删除,‌/q表示安静模式,‌不提示确认。需要注意:del命令本身并不直接用于删除目录(‌文件夹)‌,‌而是用于删除文件。‌

  14. rd /s /q 目录名 递归删除指定目录及其下的所有文件和子目录。

  15. xcopy "./src" "./dest" /S /E /Y /H 文件和目录递归深拷贝,把src目录拷贝到dest目录。
    -‌/s‌:‌复制目录和子目录,‌不包括空目录。‌
    -‌/e‌:‌复制所有子目录,‌即使是空的。‌与/s一同使用时,‌/e将覆盖/s的行为,‌确保所有子目录都被复制。‌
    -‌/y‌:‌覆盖现有文件而不提示。‌
    -‌/h‌:‌复制隐藏和系统文件也复制。‌默认情况下,‌xcopy不会复制隐藏或系统文件。‌使用/h参数可以确保这些特殊属性的文件也被复制。‌

  16. 字符拼接和截取
    截取语法:%str:~a,b%
    拼接直接拼就行

    @echo off
    @setlocal enabledelayedexpansion
    chcp 65001
    cd /d %~dp0
    
    @REM 字符串截取 [a,b) 0代表从左第一个字符,-1代表最后一个字符,b为负数则从右往左
    set str=hello world ok
    set newStr=%str:~0,-1%
    echo str=%str%
    echo newStr=%newStr%
    
    set s1=你好
    set s2=,
    set s3=你好
    set s6=%s1%%s2%%s3%
    echo %s6%
    
    pause
    

    在这里插入图片描述

  17. if not exist 文件夹 mkdir 文件夹 move 源文件 目标目录 如果不存在文件,则创建文件夹,移动源文件到目标目录位置。

  18. dir > test.txt 将dir命令的输出重定向写到文件test.txt中,如果文件已经存在则每次覆盖写。

  19. dir >> test.txt 将dir命令的输出重定向写到文件test.txt中,如果文件已经存在则每次在文件末位追加写。

参考博主的文章
参考博主的文章

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值