CMD脚本实战教程

本文详细介绍了如何在Windows11中编写和使用CMD脚本,包括基本语法(注释、暂停、打印文本、变量、跳转、条件、接收参数等),并提供了实战案例,如接收用户输入、定时关机和比较数字等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

一、常用语法

1、注释:rem

rem 这里是注释

2、暂停:pause

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

rem cmd脚本文件代码
pause

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

在这里插入图片描述

5、跳转:goto

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

echo Start
goto end
echo I can guarantee this line will not be executed
:end
echo End
pause

pause

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
    

    image-20230922155958313

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

7、接受参数位移:shift

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

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

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

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

echo 这里是cmd2.cmd中的内容

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

chcp 65001
call cmd2.cmd

pause

双击执行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
    

    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
    

    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

运行后效果如下:

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

这个脚本首先关闭命令行窗口的回显(@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

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
  • 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

<think>嗯,用户遇到了一个错误信息,说“cmd+”无法被识别。首先,我需要弄清楚这个错误发生的情境。用户是在PowerShell环境下输入了“cmd+”这个命令,结果系统报错了。看起来用户可能是在尝试执行某个命令,但误输入了“+”,或者可能想用组合键操作? 首先,我应该回忆一下常见的Windows命令提示符和PowerShell的基本命令。用户输入的是“cmd+”,通常来说,“cmd”是用来启动命令提示符的,但后面加了个加号,这可能是个打字错误。比如,用户可能原本想输入“cmd”然后按回车,但不小心按到了“+”键,导致输入了“cmd+”。 接下来,我需要考虑可能的解决方案。首先,用户可能只是想打开命令提示符,所以正确的命令应该是直接输入“cmd”然后回车。这种情况下,只需要提醒用户检查输入是否正确,是否存在多余的字符。 另外,用户提到在PowerShell环境中(路径显示是PS D:\anaconda3>),可能用户在使用Anaconda的环境,这时候是否需要特定的命令?比如,激活某个环境可能需要用“conda activate”,但用户输入的是“cmd+”,这可能不相关。 另一个可能性是用户想使用组合键,比如“Cmd + C”这样的快捷键,但Cmd键通常在Mac上使用,而用户是在Windows环境下(因为路径是D盘),所以可能混淆了快捷键。这时候需要解释Windows下的常用快捷键,比如“Ctrl+C”复制,“Ctrl+V”粘贴等。 还需要检查是否有其他可能的意图。比如,用户是否想执行某个带参数的命令,但参数输入错误?例如,“cmd /c”后面跟命令,但用户可能误输入了“+”号。或者是否有第三方工具或脚本名称包含“cmd+”而导致系统找不到? 另外,错误信息中的“行:1 字符:1”提示错误发生在命令的第一个字符位置,说明整个命令“cmd+”都是无效的。所以核心问题还是命令本身不存在。 总结可能的解决步骤:1. 检查命令拼写,确认是否多输入了“+”号。2. 如果是想打开命令提示符,直接输入“cmd”。3. 如果是想使用快捷键,提醒用户Windows下的常用组合键。4. 检查是否有其他命令或脚本需要正确路径或安装。 最后,需要以清晰的结构分步骤解释问题原因和解决方法,使用用户容易理解的语言,避免技术术语过于复杂。同时,确保LaTeX格式正确,如果有数学表达式的话,但在这个问题中可能用不上,不过系统指令里提到要使用正确的格式,所以需要注意。</think>根据你的错误提示,这个问题通常发生在 PowerShell 环境中输入了无效命令。以下是分步解释和解决方案: --- ### **问题原因** 1. **命令拼写错误** 你输入的 `cmd+` 不是一个有效的命令。Windows 系统中: - `cmd` 用于启动命令提示符 - 但 `cmd+` 因包含额外的 `+` 符号,系统无法识别。 2. **可能的误操作** 你可能是: - 误触键盘导致输入了多余符号(如 `+`) - 尝试使用快捷键组合(例如 `Cmd+C`,但 `Cmd` 是 macOS 的键名) --- ### **解决方案** #### 1. 直接启动命令提示符 如果目标是打开 Windows 命令提示符: ```powershell cmd ``` 输入后按回车键即可。 #### 2. 检查输入是否多出符号 - 删除多余的 `+` 或其他符号,确保命令为 `cmd`。 - 检查键盘是否卡键(尤其是 `Shift` 或 `+` 键)。 #### 3. 区分 PowerShell 和命令提示符 - 你当前在 **PowerShell** 环境(路径前的 `PS` 表示 PowerShell)。 - 若需执行命令提示符(CMD)的命令,可直接输入 `cmd` 进入 CMD 环境: ```powershell cmd ``` 之后输入 CMD 命令(如 `dir`、`ipconfig` 等)。 #### 4. 注意 Windows 快捷键 - Windows 的快捷键以 `Ctrl` 或 `Win` 开头,而非 `Cmd`(`Cmd` 是 macOS 专用): - 复制:`Ctrl + C` - 粘贴:`Ctrl + V` - 打开运行窗口:`Win + R` --- ### **扩展说明** | 场景 | 正确命令/操作 | 错误示例 | |--------------------|--------------------------|--------------| | 启动命令提示符 | `cmd` | `cmd+` | | 复制文本 | `Ctrl + C` | `Cmd + C` | | 从 PowerShell 返回 CMD | 输入 `cmd` 后按回车 | 直接混合输入符号 | --- ### **仍无法解决?** 1. 检查系统环境变量: - 输入 `$env:PATH` 查看路径是否包含系统目录(如 `C:\Windows\System32`)。 2. 重启 PowerShell 或计算机。 3. 如果是自定义脚本,需提供完整路径(如 `.\script.ps1`)。 如果问题持续,请提供更多操作上下文!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT飞牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值