• CMD脚本实战教程


    要在 Windows 11 上编写一个自定义关机的 CMD 脚本文件,你可以创建一个扩展名为 .bat.cmd文本文件,并在其中编写脚本。

    一、常用语法

    1、注释:rem

    rem 这里是注释
    
    • 1

    2、暂停:pause

    pause:暂停正在执行的批处理文件,并提示用户按键之后继续执行

    rem cmd脚本文件代码
    pause
    
    • 1
    • 2

    image-20230922151349814

    3、打印文本:echo

    echo:打印文本

    • echo %os%:显示操作系统名字;
    • echo off:防止将批处理文件中的具体命令输出,只输出执行结果
    • @echo off:在echo off的基础上将命令本身的隐藏

    image-20230922152124282

    4、定义变量:set

    set:设置用户定义或命名的环境变量。暂时存储在内存中,命令执行完就销毁。

    set THE_KING=Elvis
    echo %THE_KING%  
    pause
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    5、跳转:goto

    label:使用冒号设置标签,可以作为 goto 的跳转位置

    echo Start
    goto end
    echo I can guarantee this line will not be executed
    :end
    echo End
    pause
    
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20230922152526004

    可以看到 echo I can guarantee this line will not be executed 直接被跳过。

    6、条件:if

    • if:条件语句

      • exist:测试文件是否存在
      • %接收参数:通过%来传递参数 %1 表示第一个参数,%2表示第二个参数;
      if %1 == start goto start
      if %1 == stop goto stop
      goto invalid
      
      :start
      echo Starting appincation
      goto end
      
      :stop
      echo Stopping application
      goto end
      
      :invalid
      echo Invalid parameter
      
      :end
      pause
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17

      image-20230922155958313

      这里的%1是接收的执行脚本文件时,后面跟的第一个参数。可以看到上面的案例中,%1其实就是start

    7、接受参数位移:shift

    • shift:将接收参数向后移动一位,如%2的值给%1%3的值给%2,这时候可以用%0获取第一个参数。

      //还是上面的代码,改成如下代码,效果是一样的:
      shift
      if %0 == start goto start
      if %0 == stop goto stop
      ...后面代码不变
      
      • 1
      • 2
      • 3
      • 4
      • 5

    8、调用外部脚本文件:call

    同目录下创建cmd2.cmd,代码如下:

    echo 这里是cmd2.cmd中的内容
    
    • 1

    再创建cmdScript.cmd,代码如下:

    chcp 65001
    call cmd2.cmd
    
    pause
    
    • 1
    • 2
    • 3
    • 4

    双击执行cmdScript.cmd,效果如下:

    image-20230922160829535

    9、设置环境变量:setLocal

    • setLocal:批处理脚本中使用,对环境变量的修改只在当前批处理脚本中有效,遇到endLocal命令则在批处理文件末尾的环境变量的值会恢复成原来的值。上面我们使用setlocal enabledelayedexpansion开启变量延迟。

    10、新建终端窗口:start

    • start:新开启Windows一个控制台,并指定名字。

      start "My Title" echo hello 
      # Start-Process powershell.exe -ArgumentList "echo 100;pause;"  如果使用powershell,则替换为这个
      pause
      
      • 1
      • 2
      • 3

      image-20230922161459378

    双击打开脚本文件,脚本会自动打开一个名为My Title的窗口2,并打印hello

    11、判断相同

    • ==:判断字符串是否相同

      @echo off
      chcp 65001
      
      set str1=Hello
      set str2=World
      
      if "%str1%" == "%str2%" (
          echo 字符串相同
      ) else (
          echo 字符串不同
      )
      
      REM 不要关闭窗口
      pause
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14

      image-20230922165101792

    • equ、gtr、lss:判断数字大小

    二、实战案例

    1、接收输入

    创建cmd脚本文件,代码如下,并双击运行:

    @echo off
    setlocal enabledelayedexpansion
    
    REM 提示用户输入内容
    set /p userInput=please input: 
    
    REM 打印用户输入的内容
    echo you input is: !userInput!
    
    endlocal
    REM 不要关闭窗口
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    运行后效果如下:

    print

    需要注意的是,界面上的提示文字you input is:不能使用中文,否则会导致报错:XXX: is not recognized as an internal or external command,operable program or batch file.如果想要使用中文,echo后面跟的变量必须使用%变量名%,不能使用!变量名!

    2、自动关机

    创建文件 定时关机.cmd,输入以下内容:

    @echo off
    chcp 65001
    setlocal enabledelayedexpansion
    
    :start
    set /p second=请输入倒计时时长(秒):
    set S=!second!
    
    if %S% lss 30 (
    	echo 您设定的时间太短,请重新设置(请务必超过30s)
    	goto start
    ) else (
    	echo.
    	echo 将在 【%S%秒】 后为您关机,请检查以下事项:
    	echo - 文件+代码是否都已保存和提交?
    	echo - 任务和周报是否都已填报?
    	echo.
    	goto sure
    )
    
    :sure
    set /p sure=确定关机[y/n]:
    echo !sure!
    if "!sure!"=="y" (
    	goto launch
    )
    goto end
    
    :launch
    timeout /t %S%
    shutdown /s /f /t 0
    goto end
    
    :end
    endlocal
    
    REM 不要关闭窗口
    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

    这个脚本首先关闭命令行窗口的回显(@echo off),然后显示一条消息,等待 30 秒(可以根据需要调整等待时间),最后执行关机命令。

    • chcp 65001:设置中文字符编码(防止出现中文乱码)

    • shutdown: shutdown 命令用于执行关机操作。

    • /s: 这个参数告诉 shutdown 命令执行关机操作。

    • /f: 这个参数强制关闭所有应用程序,不等待它们的响应。

    • /t 0: 这个参数表示不要等待,立即执行关机操作。

    • pause:等待用户按任意键后再关闭

    • setlocal enabledelayedexpansion:开启变量延迟

    • endlocal:关闭变量延迟,与setlocal enabledelayedexpansion成对出现

    • echo.:打印空行

    执行后自动弹窗cmd窗口(空格键可以终端倒计时):

    image-20230922185455773

    3、接收数字输入,比较大小

    脚本代码如下:

    @echo off
    chcp 65001
    setlocal enabledelayedexpansion
    
    set /p n1=num1:
    set /p n2=num2:
    
    set num1=!n1!
    set num2=!n2!
    
    if %num1% equ %num2% (
        echo num1和num2相同
    ) else if %num1% gtr %num2% (
        echo num1大于num2
    ) else if %num1% lss %num2% (
        echo num1小于num2
    )
    
    endlocal
    REM 不要关闭窗口
    pause
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    image-20230922171049662

    4、启动前端项目脚本

    @echo off
    chcp 65001
    setlocal enabledelayedexpansion
    
    set projectName=项目名称
    set projectPath=D:\Codes\project1
    
    REM 提示用户输入内容
    set /p env=即将启动【%projectName%】,请指定环境[test/prod]: 
    
    REM 打印用户输入的内容
    echo Running...:%projectName%[!env!]
    
    set ENV=!env!
    
    cd /d %projectPath%
    
    if (%ENV%)==() (
    	goto empty
    ) else if "%ENV%"=="test" (
    	goto env
    ) else (
    	goto env
    )
    
    :empty
    echo 正在启动dev环境...
    pnpm start
    goto end
    
    :env
    echo 正在启动%ENV%环境...
    pnpm start:%ENV%
    goto end
    
    :end
    endlocal
    REM 不要关闭窗口
    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
    • set /p env=即将启动【产品中心】,请指定环境[test/prod]::接收一个输入,定义接收变量env
    • set ENV=!env!:将输入赋值给ENV变量
    • cd /d D:\Codes\Product-Center:切换到D盘,并进入指定项目目录
    • if... else... if else... :判断要启动哪个环境
    • goto:跳转到指定代码位。
    • if (%ENV%)==():判断输入文字是否为空,必须要这种方式,==实测无效。

    执行效果如下:

    image-20230922173055600

  • 相关阅读:
    MATLAB | MATLAB中绘图的奇淫技巧合集
    浅谈web性能测试
    秋招/考研复试-数据结构
    React 全栈体系(十二)
    基于Python实现的简易微信系统
    linux系统部署jar脚本编译
    【云原生之Docker】使用docker部署talebook个人图书管理平台
    python-sklearn模型通用方法的介绍
    MySQL数据库集群技术主从自动协商详细讲解
    在MySQL中添加索引
  • 原文地址:https://blog.csdn.net/bobo789456123/article/details/133178858