• 最全面的window dos/bat 常用命令


    所有示例代码的编码格式为GBK或ANSI编码

    ANSI 美国国家标准学会,融合了全世界所有编码,在微软在叫做ANSI编码,使用page code 定位国家编码
    查看国家page code 直接在cmd 窗口中键入chcp
    更改cmd窗口的page code 使用 命令 chcp 国家码

    管道符和重定向符

    1、管道符

    @echo off 
    rem rem 表示注释
    rem 管道符 将左边命令的结果作为参数传递给右边
    rem 查找D盘myFile文件夹及其子文件夹下的所有txt文件
    dir d:\myFile /s /b | findstr "\.txt"
    rem 查找D盘myFile文件夹及其子文件夹下的所有txt文件,并将结果保存到d:\myFile\1.txt文件中
    dir d:\myFile /s /b | findstr "\.txt" > d:\myFile\1.txt
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、 重定向符>【0表示标准输入,1表示标准输出,2标准错误】

    > 表示 覆盖文件内容,将左边写入右边
    >> 覆盖文件内容,表示追加 
    
    < 覆盖文件内容,将写右边入左边
    << 追加 ,将写右边入左边
    
    对于 Windows NT 4 及其以后的版本,您需要使用ˆ转义第一个管道符和第一个重定向符 :
    echo dir ˆ| findstr /R /I /C:" 0 Dir(s)" ˆ> null >> temporary.bat
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    重定向
    command > file将命令的标准输出的结果写入文件中
    command 1>file同上
    command 2>file将命令的标准错误的结果写入文件中
    command > file 2>&1将命令的标准输出和标准错误的结果写入文件中
    command >> file将命令的标准输出的结果追加写入文件中
    command 1 >> file同上
    command 2 >>file将命令的标准错误的结果追加写入文件中
    command >> file 2>&1将命令的标准输出和标准错误的结果追加写入文件中
    commandA | commandB将左边命令A的标准输出结果作为参数传递给右边命令B
    commandA 2>&1 | commandB将左边命令A的标准输出和标准错误结果作为参数传递给右边命令B
    command < file从文件中获取标准输入内容
    command > null将命令结果丢弃,不显示在屏幕中【可以理解为写入黑洞中】

    转义特殊字符

    期望得到的字符转义后字符说明
    %%%在双引号字符串中可能并不是必需的
    ^^^在双引号字符串中可能并非必需,但也不会有坏处
    &^&在双引号字符串中可能并非必需,但也不会有坏处
    >^>在双引号字符串中可能并非必需,但也不会有坏处
    <^<在双引号字符串中可能并非必需,但也不会有坏处
    |^|在双引号或单引号字符串中可能非必需,但这不会有什么坏处
    ^’仅在 FOR /F "subject" (即括号之间), 除非usebackq被使用
    `^`仅在 FOR /F "subject" (即括号之间), 除非使用 usebackq
    ,^,仅在 FOR/F "subject"(即括号之间)中需要,即使在双引号字符串中也一样
    ;^;仅在 FOR/F "subject"(即括号之间)中需要,即使在双引号字符串中也一样
    =^=仅在 FOR/F "subject"(即括号之间)中需要,即使在双引号字符串中也一样
    (^(仅在 FOR/F "subject"(即括号之间)中需要,即使在双引号字符串中也一样
    )^)仅在 FOR/F "subject"(即括号之间)中需要,即使在双引号字符串中也一样
    !^^!仅当延迟变量扩展处于活动状态时才需要
    \\\仅在FINDSTR的正则表达式模式中需要
    [\[仅在FINDSTR的正则表达式模式中需要
    ]\]仅在FINDSTR的正则表达式模式中需要
    "\"仅在FINDSTR的正则表达式模式中需要
    "“”仅在FIND的正则表达式模式中需要
    .\.仅在FINDSTR的正则表达式模式中需要
    *\*仅在FINDSTR的正则表达式模式中需要
    ?\?仅在FINDSTR的正则表达式模式中需要

    系统默认的系统变量

    变量名说明
    allUsersProfile返回所有用户配置文件位置的本地变量
    appData返回应用程序在默认情况下存储数据的位置的本地变量。
    cd返回当前目录字符串的本地变量
    cmdCmdLine返回用于启动当前Cmd.exe程序的确切命令行的本地变量
    cmdExtversion返回当前命令处理器扩展的版本号的系统变量
    computerName返回计算机名称的系统变量
    ComSpec将精确路径返回给命令外壳可执行文件的系统变量
    date返回当前日期的系统变量。该变量与date/t命令使用相同的格式。
    Cmd.exe程序生成此变量。有关详细DATE信息,请参阅 Date 命令
    errorLevel返回最近使用命令的错误代码的系统变量。非零值通常表示错误。
    homeDrive返回用户主目录的本地工作站驱动器号的系统变量。此变量是基于在组中为“本地用户”和“组”指定的主目录值设置的
    homePath返回用户主目录的完整路径的系统变量。此变量是基于在组中为“本地用户”和“组”指定的主目录值设置的。
    homeShare返回用户共享主目录的网络路径的系统变量。此变量是基于在组中为“本地用户”和“组”指定的主目录值
    logOnServer本地变量,返回验证当前登录会话的域控制器的名称
    number_of_processors指定计算机上安装的处理器数目的系统变量
    os返回操作系统名称的系统变量,Windows XP Professional将操作系统显示为Microsoft Windows NT
    path指定可执行文件的搜索路径的系统j环境变量
    pathExt系统变量,返回操作系统将其视为可执行文件的文件扩展名的列表。
    processor_architecture返回处理器芯片结构的系统变量。值:x86、IA64。
    processor_identfier返回处理器描述的系统变量。
    processor_level返回计算机处理器型号的系统变量。
    processor_revision返回处理器修订号的系统变量。
    prompt返回当前解释程序的命令提示设置的本地变量。由cmd.exe生成。
    random返回0到32767之间的随机十进制数的系统变量,由cmd.exe 程序生成。
    systemdrive返回包含 Windows根目录(例如,系统根目录)的驱动器的系统变量。
    systemroot返回Windows根目录位置的系统变量。
    temp 或 tmp系统和用户变量,返回当前登录的用户可以使用的应用
    程序的默认临时目录。某些应用程序需要使用TEMP,
    而其他应用程序需要使用TIP。
    time返回当前时间的系统变量。该变量与time/t命令使
    用相同的格式,并由cmd.exe生成。有关详细信息,请参阅Time 命令。
    userdomain返回包含用户帐户的域的名称的本地变量。
    username返回当前登录用户名的本地变量。
    userprofile返回当前用户配置文件位置的本地变量。
    windir返回操作系统目录位置的系统变量。
    字体目录%WINDIR%\Fonts
    帮助目录%WINDIR%\help
    输入法目录%WINDIR%\ime
    桌面/音乐/搜藏夹%USERPROFILE%\桌面
    %USERPROFILE%\音乐
    %USERPROFILE%\搜藏夹 等
    右键菜单“发送到“%USERPROFILE%\SendTo
    rem 文件后缀都为.bat
    rem 关闭逐行输出
    @echo off
    rem 输出变量用%变量名%,变量名【若没有特殊说明】不区分大小写
    rem 使用时间系统变量
    echo "当前时间是:%date% %time%"
    rem 使当前目录系统变量,特殊的扩展变量,输出时需要使用""
    echo "脚本所在的目录 %~dp0"
    rem %cd%表示的是运行该脚本所在的文件目录
    rem 一般情况是脚本所在的目录,但是如果是第三方软件运行的,
    rem 会显示第三方软件所在的文件夹,所以建议使用%~dp0来显示当前目录
    echo "当前目录是 %cd%"
    rem 其它的类似,这里就不再写了
    rem 暂停不关闭窗口
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    if…else逻辑判断分支语句

    IF [NOT] ERRORLEVEL number command
    IF [NOT] string1==string2 command
    IF [NOT] EXIST filename command
    
      NOT               不等于可以使用not,不存在也使用not
    
      ERRORLEVEL number 每一条指令运行后都会产生一个错误等级值,写入系统变量ERRORLEVEL 中,0为错误,其它为正确
                        如果最后运行的程序返回一个等于或大于
                        指定数字的退出代码,指定条件为 true。
    
      string1==string2  如果指定的文字字符串匹配,指定条件为 true。
    
      EXIST filename    如果指定的文件名存在,指定条件为 true。
    
      command           如果符合条件,指定要执行的命令。如果指定的
                        条件为 FALSE,命令后可跟 ELSE 命令,该命令将
                        在 ELSE 关键字之后执行该命令。
    
    ELSE 子句必须出现在同一行上的 IF 之后。例如:
    
        IF EXIST filename. (
            del filename.
        ) ELSE (
            echo filename. missing.
        )
    
    由于 del 命令需要用新的一行终止,因此以下子句不会有效:
    
    IF EXIST filename. del filename. ELSE echo filename. missing
    
    由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句也
    不会有效:
    
        IF EXIST filename. del filename.
        ELSE echo filename. missing
    
    如果都放在同一行上,以下子句有效:
    
        IF EXIST filename. (del filename.) ELSE echo filename. missing
    
    如果命令扩展被启用,IF 会如下改变:
    
        IF [/I] string1 compare-op string2 command
        IF cmdExtversion number command
        IF defined variable command
    
    其中, compare-op 可以是:
    
        EQU - 等于
        NEQ - 不等于
        LSS - 小于
        LEQ - 小于或等于
        GTR - 大于
        GEQ - 大于或等于
    
    而 /I 开关(如果指定)说明要进行的字符串比较不分大小写。
    /I 开关可以用于 IF 的 string1==string2 的形式上。这些
    比较都是通用的;原因是,如果 string1 和 string2 都是
    由数字组成的,字符串会被转换成数字,进行数字比较。
    
    CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它
    是在跟与命令扩展有关联的内部版本号比较。第一个版本
    是 1。每次对命令扩展有相当大的增强时,版本号会增加一个。
    命令扩展被停用时,CMDEXTVERSION 条件不是真的。
    
    如果已定义环境变量,DEFINED 条件的作用跟 EXIST 的一样,
    除了它取得一个环境变量,返回的结果是 true。
    
    如果没有名为 ERRORLEVEL 的环境变量,%ERRORLEVEL%
    会扩充为 ERROLEVEL 当前数值的字符串表达式;否则,你会得到
    其数值。运行程序后,以下语句说明 ERRORLEVEL 的用法:
    
        goto answer%ERRORLEVEL%
        :answer0
        echo Program had return code 0
        :answer1
        echo Program had return code 1
    
    你也可以使用以上的数字比较:
    
        IF %ERRORLEVEL% LEQ 1 goto okay
    
    如果没有名为 CMDCMDLINE 的环境变量,%CMDCMDLINE%
    将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始
    命令行;否则,你会得到其数值。
    
    如果没有名为 CMDEXTVERSION 的环境变量,
    %CMDEXTVERSION% 会扩充为 CMDEXTVERSION 当前数值的
    字串符表达式;否则,你会得到其数值。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89

    猜数字小游戏

    rem & 表示多条命令放在同一行执行
    @echo off & title 猜数字小游戏 
    rem 开启扩展命令,用于计算、扩展变量之类的
    setlocal enabledelayedexpansion
    rem %random% 命令行默认系统变量,表示生成随机数
    REM 产生[min,max]之间的随机数,公式:随机数%(max-min+1)+min
    rem 命令行中的取模用两个百分号%%表示
    set /a r=%random%%%100+1 
    rem  格式 :变量【可以任意取名】,类似于定义方法
    rem goto 表示回到锚点,可以理解为重新进入方法
    :input
    rem 声明变量
    set ent=
    rem /p 获取从键盘输入的值,赋值给变量ent【enter】
    set /p "ent=请小姐姐输入(1~100之间的数):"
    rem 打印输入的值
    echo "%ent%" 
    rem 做边界值判断
    rem 如果输入的值小于0,重新进入方法
    if %ent% leq 0 (goto :input)
    rem 如果输入的值大于100,重新进入方法
    if %ent% gtr 100 (goto :input)
    rem 偷瞄一下生成的随机数
    rem echo "随机数:!r!"
    rem 输入值=随机数
    if %ent% equ !r! (echo "真棒!大聪明,猜中了!奖励小红花一朵,游戏结束")
    rem 输入值<随机数
    if %ent% lss !r! (echo "小猪猪,猜错了!【小了】重新猜" & goto :input)
    rem 输入值>随机数
    if %ent% gtr !r! (echo "小猪猪,猜错了!【大了】重新猜" & goto :input)
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    for循环控制语句

    @echo off
    rem rem 表示注释
    echo "**************for 后面没有参数,只能搜索指定目录下的文件【不包含子目录】,指定多个目录用空格分开**********************"
    for %%i in (D:\dir1\*.txt D:\dir1\dir2\*.txt) do echo %%i
    echo "=======in (*)只有文件名,文件不包含路径,默认在当前目录下查找,*通配符表示一个或多个========="
    for  %%i in (*) do echo %%i
    echo "=======in (*.txt *.bat)只有文件名,文件不包含路径,多种文件格式用空格分开========="
    for  %%i in (*.txt *.bat) do echo %%i
    
    echo "**************for 后面有参数**********************"
    REM for 有/F参数 但是【没有指定】usebackq 选项的写法:注意in后面不同形式符号的不同
    REM FOR /F "其它options..." %variable IN (file-set) DO command [command-parameters]
    REM FOR /F "其它options..." %variable IN ("strng") DO command [command-parameters]
    REM FOR /F "其它options..." %variable IN ('command') DO command [command-parameters]
    
    REM for 有/F参数并且指定了 usebackq 选项的写法:注意in后面不同形式符号的不同,加入usebackq的目的是防止目录或文件名称有空格
    REM FOR /F "usebackq 空格后写其它options..." %variable IN ("file-set") DO command [command-parameters]
    REM FOR /F "usebackq 空格后写其它options..." %variable IN ('string') DO command [command-parameters]
    REM FOR /F "usebackq 空格后写其它options..." %variable IN (`command`) DO command [command-parameters]
    
    REM in中可以使用命令行得到结果作为后续处理对象,但需要用反引号括起来`` 同时使用"usebackq"
    REM 结果中的文件包含路径,【如果想要去掉路径】 将【%%i】改成【%%~ni】扩展
    for /f "usebackq" %%i in (`dir /a-d /s /b *.txt`) do echo %%i
    echo "=======555555========="
    for /f "usebackq" %%i in (`dir /s /b`) do echo %%i
    echo "--------------------"
    for /f "usebackq" %%i in ("1.txt") do echo %%i
    echo "**********以下直接用不用改,使用=分割,**************************"
    FOR /f "usebackq tokens=1* delims==" %%i IN (`set`) DO @echo [%%i=%%j]
    
    echo "*****************【写法一】:在命令行模式中使用到盘符需要用英文双引号括起来"D:\dir" 使用/a-d /s /b来搜索子目录*******************"
    for /f "usebackq" %%i in (`dir "D:\dir1\*.txt" /a-d /s /b`) do echo %%i
    
    rem 递归搜索指定目录下的指定类型的文件
    echo "*************递归搜索指定目录下的指定类型的文件【包括子目录】,等同于【写法一】 ***********************"
    for /r D:\dir1 %%i in (*.txt) do echo %%i
    
    echo.
    echo "格式:FOR /D %variable IN (set) DO command [command-parameters]"
    echo "这个参数主要用于目录搜索,不会搜索文件,/D 参数只能显示当前目录下的目录名字。(特别说明:只会搜索指定目录下的目录,不会搜索再下一级的目录。)"
    echo "==============显示c盘根目录下的所有目录 和d盘指定目录========================"
    for /d %%i in (c:\* d:\dir1\*) do echo %%i 
    echo "==============显示指定目录下名称只有1-4个字母的目录========================"
    for /d %%i in (d:\dir1\????) do echo %%i 
    
    echo.
    
    echo "格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]"
    echo "该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step"
    rem 输出1 2 3 4 5
    echo "==============输出1 2 3 4 5========================"  
    for /L %%i in (1,1,5) do echo %%i 
    rem 输出1,3,5,7,9
    echo "==============输出1,3,5,7,9========================"
    for /L %%i in (1,2,10) do echo %%i 
    rem 输出100,80,60,40,20
    echo "==============输出100,80,60,40,20========================"
    for /L %%i in (100,-20,1) do echo %%i 
    rem 打开5个CMD窗口,慎用,我先注释掉
    rem for /L %%i in (1,1,5) do start cmd 
    rem 建立从1~5共5个文件夹
    echo "==============建立从1~5共5个文件夹========================"
    for /L %%i in (1,1,5) do md %%i 
    rem  等待2秒
    timeout /t 2
    rem 删除从1~5共5个文件夹
    echo "=============删除从1~5共5个文件夹========================="
    for /L %%i in (1,1,5) do rd /q %%i 
    
    rem echo.或者echo=表示空行,.前面不要有空格,意思是 将echo. 和 pause 两条命令 放在一起执行
    echo. & pause
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72

    for高级用法

    rem 固定写法:关闭命令行回显并打开命令行扩展
    @echo off & setlocal enableextensions
    cd /d D:\myFile
    echo "=============文件名不能有空格,有空格会被忽略,以下几种写法效果一致=========================="
    for /f "usebackq"  %%i in (`dir /a-d /s /b ^|findstr "\.txt"`) do echo "%%i"
    echo "===============在for /f 模式中 管道符|要使用^转义========================"
    for /f  %%i in ('dir /a-d /s /b ^|findstr "\.txt"') do echo "%%i"
    echo "======================================="
    for /f  %%i in ('dir /a-d /s /b ^|findstr ".*\.txt$"') do echo "%%i"
    echo "======================================="
    for /f  %%i in ('dir /a-d /s /b *.txt') do echo "%%i"
    echo "======================================="
    for /f "usebackq" %%i in (`dir "D:\myFile\*.txt" /a-d /s /b`) do echo "%%i"
    
    echo.
    echo "===========for /r 模式 in中只能写通配符和字符串,命令不生效============================"
    echo "===========查找当前目录下的txt文件,文件名可以有空格,不会被忽略============================"
    for /r %%i in (*.txt) do echo "%%i"
    echo "===========查找指定目录下的txt文件,文件名可以有空格,不会被忽略============================"
    for /r D:\myFile %%i in (*.txt) do echo "%%i"
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    使用IF … GOTO …实现doWhile或退出循环

    @echo off
    for /L %%i in (1,1,5) do(
     if %%i eq 3
     goto three
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5

    :three
    echo “进入到three”

    字符串截取、查找、替换

    @echo off
    rem rem 表示注释
    rem 字符串替换,格式【%变量名:oldStr=newStr%】
    set aa=伟大的中国!我为你自豪!
    rem 【方法一:直接用echo输出】
    echo 替换前:%aa%
    echo 替换后:%aa:中国=中华人民共和国%
    rem 【方法二:用变量接收】
    set "aa=%aa:中国=中华人民共和国%"
    echo aa = %aa%
    
    REM  字符串截取 格式【%变量名:~x,y% 】(x是下标,从0开始,y是截取个数)
    rem 截取日期的前两个字符
    echo %date:~0,2%
    
    rem 字符串查找
    rem |表示管道符,find或findstr表示查找字符串,
    rem 管道符的作用是:将前一个命令的结果作为参数传递个下一条命令
    echo "本机内网ip是"  
    ipconfig | find "192.168"
    echo "本机外网ip是" 
    curl cip.cc | find "IP"
    rem echo.或者echo=表示空行,.前面不要有空格,意思是 将echo. 和 pause 两条命令 放在一起执行
    echo. & pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    网络相关

    1、 查看本机内网ip

    2、 查看本机外网ip

    3、 netstat查看网络状态

    4、 telnet与服务器通信

    @echo off
    rem rem 表示注释
    rem 查看本机内网ip 
    ipconfig
    rem 查看本机外网ip 
    curl cip.cc
    
    rem 查看网络状态 
    netstat -aon
    rem 查找指定端口号 netstat -aon|findstr "端口号" 【第一步,会查到pid】
    rem taskkill /pid xxx -f  【根据第一步得到的pid,结束进程】
    
    rem telnet与服务器通信
    rem 使用 telnet 连接到 在 telnet.microsoft.com
    telnet telnet.microsoft.com 44
    rem 进入telnet 后,如果要发送数据,使用sent
    sent "要发送的字符串"
    
    rem echo.或者echo=表示空行,.前面不要有空格,意思是 将echo. 和 pause 两条命令 放在一起执行
    echo. & pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    查看系统信息

    以管理员身份运行:直接复制即可

    %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
    
    • 1

    生活案例:查看系统信息小工具

    @echo off
    rem rem 表示注释
    rem  以管理员身份运行
    %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
    REM echo 当前盘符:%~d0
    REM echo 当前盘符和路径:%~dp0
    REM echo 当前批处理全路径:%~f0
    REM echo 当前盘符和路径的短文件名格式:%~sdp0
    REM echo 当前CMD默认目录:%cd%
    REM echo 目录中有空格也可以加入""避免找不到路径
    REM echo 当前盘符:"%~d0"
    REM echo 当前盘符和路径:"%~dp0"
    REM echo 当前批处理全路径:"%~f0"
    REM echo 当前盘符和路径的短文件名格式:"%~sdp0"
    REM echo 当前CMD默认目录:"%cd%"
    echo "查看当前运行文件的内容,当前文件所在路径:%~f0"
    type %~f0
    echo "请认准阅读以上内容,按回车键后,会继续执行以上所写内容"
    echo "关闭打开窗口会自动执行下一任务,如果遇到停顿请敲击回车..." &pause >null"
    echo "正在清理指定目录垃圾文件:%temp%"
    del /s /q %temp%
    echo "清理完毕!"
    echo "接下来的操作:查看系统信息"
    msinfo32
    echo "接下来的操作:查看电脑开机启动项"
    msconfig
    echo "接下来的操作:查看电脑任务管理管理器"
    taskmgr
    echo "接下来的操作:查看电脑正在运行的程序"
    tasklist
    echo "接下来的操作:磁盘垃圾清理:c盘"
    cleanmgr /tuneup:1
    rem 蓝绿色
    color 1a
    echo "接下来的操作:检查卷的文件系统和文件系统元数据是否存在逻辑和物理错误,如果有修复卷上的错误"
    chkdsk /r /scan
    rem 蓝黄色
    color 1e
    echo "接下来的操作:扫描所有受保护的系统文件的完整性,并尽可能修复出现问题的文件"
    sfc /scannow
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    文件相关

    @echo off
    rem rem 表示注释
    echo "=======当前文件路径是=========%cd%"
    echo "输出到文件中"
    echo "哈哈,我是小孩也是王" > 1.txt
    echo "查看文件,使用type"
    type 1.txt
    rem 列出文件层级目录及其文件,以图形显示目录结构
    tree -f
    
    rem 列出目录,显示目录中的文件和子目录列表
    dir 
    rem 列出当前目录及其子目录的所有文件
    rem /a-d 表示排除目录,/s 搜索子目录下的文件 /b 显示全路径
    dir /a-d /s /b
    rem 列出当前目录及其子目录的特定文件
    dir /a-d /s /b *.txt *.mp4
    rem 搜索指定目录下的指定文件【这里搜索d盘】
    dir d:\ /a-d /s /b *.txt *.mp4
    
    rem 创建目录、文件 md/mkdir 
    rem 创建目录,不存在会创建
    mkdir .\a\b\c\d 
    rem 创建文件,默认在当前文件夹下
    echo haha > hello.txt
    rem 这种形式 ,如果有目录不存在,会报错
    rem echo haha > .\a\b\hello.txt
    
    rem 显示当前目录名或改变【change】当前目录 cd/chdir
    rem 直接键入cd 显示当前目录
    cd 
    rem cd 目录路径【不能改变驱动盘符】
    rem 在c盘目录下,键入 cd d:\a 会没反应
    rem cd /d 目录路径【可以改变驱动盘符】
    cd /d d:\a
    
    rem 删除目录、文件 del、rd/rmdir
    rem /s 用于删除目录树 ,/q 安静模式,带 /S 删除目录树时不要求确认
    rem rd /s /q 目录路径
    rem del 删除一个或多个文件,/s 用于删除目录树 ,/q 安静模式,带 /S 删除目录树时不要求确认
    rem del /s /q 目录路径
    
    rem 移动目录、文件 move
    rem 移动文件并重命名文件和目录,不能垮盘符移动,否则会出现拒绝访问
    rem .\表示当前目录,..\表示上一级目录,移动当前目录下的目录到当前目录的dir2目录中
    move .\a dir2
    rem 如果目的地是文件名,则重命名
    move 6_2.txt 66.txt
    rem 如果目的地是文件夹,则移动
    move 6_2.txt .\a
    rem 复制目录、文件 copy  将一份或多份文件复制到另一个位置【不会复制目录】
    rem 将当前目录下的a文件夹中的文件,复制到上一级目录中
    copy .\a ..\
    
    rem 复制大量文件 xcopy 复制文件和目录树
    rem /s 复制目录和子目录,不包括空目录。
    rem /j 复制时不使用缓冲的 I/O。推荐复制大文件时使用
    xcopy 开始位置 目的位置 /s /j
    
    rem echo.或者echo=表示空行,.前面不要有空格,意思是 将echo. 和 pause 两条命令 放在一起执行
    echo. & pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    生活案例一:桌面移动文件

    @echo off
    echo "需求:生活场景:使用dos命令行,查找当前电脑桌面不是快捷方式的文件"
    echo "并移动到D盘的myFile文件下【没有该文件夹自动创建】"
    rem rem 表示注释, echo表示输出到控制台
    rem 复制这段代码到记事本中,保存,修改文件后缀为.bat格式
    echo "更改命令行窗口的颜色"
    rem 更改命令行窗口的颜色
    color 0e
    
    echo "目标:移动到d:\myFile"
    
    echo "判断是否有该文件夹"
    IF not EXIST d:\myFile (
    	mkdir d:\myFile
    	echo "创建成功!"
    ) ELSE (
    	echo "创建成功!"
    )
    
    rem 第一步目标:保存到1.txt文件中
    echo "第一步目标:保存到1.txt文件中"
    rem /a-d 表示排除文件夹,/s /b 表示查找所有子目录中的子文件
    rem | 管道符 将左边命令的结果作为参数传递给右边
    rem findstr 正则查找字符串,-v 查找不与指定字符串匹配的所有内容
    rem ".*\.lnk$" 正则表达式 .任意目录, 
    rem *.ink【.ink文件后缀的所有文件】 点号要转义写成\. $以ink结尾
    dir /a-d /s /b | findstr -v  ".*\.lnk$" >1.txt
    rem 查看1.txt文件的内容 
    echo "查看1.txt文件的内容"
    type 1.txt
    rem 循环文件中的内容
    echo "循环文件中的内容"
    for /f "usebackq" %%i in ("1.txt") do  move %%i d:\myFile
    echo author by LinJianhui
    echo 报告,移动完成,等待5秒自动退出!
    rem 等待5秒自动退出
    timeout /t 5
    exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    在这里插入图片描述

    生活案例二:文件按规则批量重命名

    @echo off
    rem 复制这段代码到记事本中,保存,修改文件后缀为.bat格式
    rem 更改命令行窗口的颜色
    color 0e
    set index=0
    rem rem 表示注释 
    rem 开启延迟扩展,不然index+=1不生效
    setlocal EnableDelayedExpansion
    rem 查找当前目录及其子目录中的视频文件,/a-d排除文件夹,
    rem usebackq 防止文件名有空格 一定要配合in中的反引号,可以说是固定写法
    for /f  "usebackq delims="  %%i in (`dir /a-d /b /s *.mp4 *.avi *.mov`) do (
    rem set /A 表示执行算数运算
    set /A index+=1
    echo "========打印带全路径的文件名和扩展名"========"
    echo %%i
    echo "========打印【不带路径】的文件名和扩展名"========"
    echo %%~nxi
    rem 【方法一】!index!表示引用延迟扩变量,*.*会自动映射原文件名
    rem ren %%i !index!_*.*
    rem 【方法二】
    ren %%i !index!_%%~nxi
    )
    echo author by LinJianhui
    echo 报告,重命名完成!
    rem 等待5秒自动退出
    timeout /t 5
    exit 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这里插入图片描述

    随机数

    cmd命令的随机数取值范围

    %RANDOM% 系统变量只能返回 0 到 32767 之间的任意十进制数字。2的15次方等于32768,上面的0~32767实际就是15位二进制数的范围。
    因此,利用cmd命令,生成的最大随机数就是32767,最小随机数就是-32767。
    但我们一般不会在学习阶段去测试生成负的随机数,因为学会如何生成正随机数了,负随机数在正随机数的基础上加一个负号就能解决啦。
    
    • 1
    • 2
    • 3

    生成0-100以内的随机数

    那么,如何获取100以内的随机数呢?
    很简单,将%RANDOM%按100进行求余运算即可,见例子。
    例:生成5个100以内的随机数
    批处理中求模得用两个%%符号。 
    
    • 1
    • 2
    • 3
    • 4
    @echo off
      rem 开启扩展命令,用于计算、扩展变量之类的
      setlocal enabledelayedexpansion
      for /L %%i in (1 1 5) do (
         rem /a 表示开启计算模式
         set /a randomNum=!random!%%100
         rem !变量名!表示是引用的计算变量,应该能用%变量名%代替
         echo 随机数:!randomNum!
      )
      pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    生成n-m之内的随机数

    求余数运算set /a randomNum=!random!%%100中的100可以是1~32768之间的任意整数。
    总结:利用系统变量%random%,求余数运算%%,字符串处理等,可以实现很多随机处理。
    通过上面的学习,我们知道,%random%可以产生0到32767之间的随机数,但是,如何才能得到一定范围内的随机数呢? 
    我们可以使用通用的算法公式如下: 
    通用的公式%random% %% (max-min+1)+min来产生[min,max]区间里的随机数,
    注:批处理中求模得用两个%%符号。 
    比如,我们想获得4到12之间的随机数,就可以这样来使用,代码如下:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    REM 产生10个[4,12]间的随机数 
    rem 若!变量名!没有效果,用%变量名%代替
    @echo off 
    REM 启用延迟环境变量扩展,使得变量%可以用!替代,如%random%与!random!效果一致
    setlocal enabledelayedexpansion 
    REM 设置随机数的最小和最大值以及求模用的变量 
    set min=4 
    set max=12 
    set /a mod=!max!-!min!+1
    
    for /l %%i in (1,1,10) do ( 
    REM 产生[min,max]之间的随机数 
    set /a r=!random! %% !mod!+!min! 
    echo. 
    echo 随机数%%i:!r!
    )
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    等待n秒执行

    @echo off
    rem rem 表示注释
    rem 20秒后自动关闭
    timeout /t 20 
    rem 退出
    exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    start 命令

    @echo off
    rem rem 表示注释
    rem 快速打开记事本
    start "标题"  "C:\Windows\System32\notepad.exe"
    rem 启动后退出黑窗口
    exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    call 命令

    从批处理程序调用另一个批处理程序

    @echo off
    rem rem 表示注释
    rem 从批处理程序调用另一个批处理程序
    rem 调用stop.bat
    call stop.bat
    rem 启动后退出黑窗口
    exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    定义方法并调用

    @echo off
    rem 调用方法,需要两exit才能退出黑窗口
    call :sayHello 张三 街头小霸王
    pause
    
    rem 【注意:】这里要写在外面,pause之后,否则会被当做书签,再次被执行
    rem 参数(如 %1 %2 %3 %4 %5 ...),%*表示所有参数
    rem 定义sayHello 方法 ,参数会在调用是传入
    :sayHello
    echo "我的名字是%1"
    echo "外号,人称:%2"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    使用goto 快速跳转到书签

    @echo off
    rem 使用goto 会跳过后面的命令
    rem 书签没有参数,注意与call调用区别
    goto :sayHelloBookMark
    echo "这里会被直接跳过,hello"
    pause
    
    :sayHelloBookMark
    echo "这是我的小说"
    echo "《霸道总裁辉哥爱上我》"
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    其它

    @echo off
    rem rem 表示注释
    echo "改变字体颜色"
    color 0a
    rem 查看指令帮助格式 【help 指令】,或者 【指令 /?】 如:
    for /?
    dir /?
    rem 查看所有指令
    help
    rem 将指令结果写入文件【覆盖】使用 >,forHelp.txt不存在会自动创建
    for /? > forHelp.txt
    echo "我是小孩也是王" > hello.ext
    rem 将指令结果写入文件【追加】使用 >>,forHelp.txt不存在会自动创建
    rem echo.或者echo=表示空行,.前面不要有空格,意思是 将echo. 和 pause 两条命令 放在一起执行
    echo. & pause
    rem 去掉按任意键继续的提示使用 > nul
    rem echo. & pause > nul
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    码蹄集 - MT2093 · 回文数数位
    MySQL数据库管理
    【区分vue2和vue3下的element UI MessageBox 弹框组件,分别详细介绍属性,事件,方法如何使用,并举例】
    Android系统10 RK3399 init进程启动(三十七) 属性代码编程
    openssl websockets
    docker基本管理
    游戏引擎分层简介
    ​创业15年,50岁回到农村过上退休的生活,上班和创业是两难的选择。
    数据标准详细概述-2022
    【2023华为杯A题】WLAN网络信道接入机制建模(代码、思路.....)
  • 原文地址:https://blog.csdn.net/ljh_learn_from_base/article/details/127838552