【速成】快速掌握CMD

🐳CMD,这项"古老"的技术,影响深远,无处不在,"不得不"学习,别犹豫,冲吧💪。

ℹ️教程说明

教程总结的目标,快速了解CMD的核心功能。

目录

ℹ️教程说明

📒参考资源:

📚一、了解CMD

[1.1 CMD与powershell](#1.1 CMD与powershell)

[1.2 基本机制](#1.2 基本机制)

📚二、CMD基础使用与基本命令

[2.1 CMD使用基础](#2.1 CMD使用基础)

[2.2 CMD基础命令](#2.2 CMD基础命令)

📚三、CMD命令特殊符号

📚四、进阶:常用命令

📚五、CMD批处理脚本编写

📚六、CMD计划任务管理


📒参考资源:


📚一、了解CMD

1.1 CMD与powershell

CMD(Command Prompt,命令提示符),即 cmd.exe(命令提示符),是微软Windows操作系统中内置的命令行解释器(CLI,Command-Line Interface),其产生与微软的 PC 操作系统一样悠久。

2006年,微软推出PowerShell(基于.NET的现代化CLI),功能远超CMD(支持对象导向、强大管道、模块化等),并逐步取代CMD成为微软推荐的"现代CLI"。

  • 目前,CMD与PowerShell在Windows中"共存":PowerShell处理复杂任务(如系统管理、自动化脚本),CMD处理简单任务(如快速测试、文件操作)。

1.2基本机制

  • cmd.exe 是一个 命令行解释器(Shell) :它会逐行读取用户输入或批处理文件中的命令,调用相应的 Windows API 来执行。

  • 运行 cmd.exe 时,Windows 会创建一个新的控制台窗口(conhost.exe)进程来提供文本输入/输出界面,并启动 cmd.exe 进程本身。CMD 会初始化其执行环境,包括工作目录、环境变量(如 PATH, TEMP)等。

运行模式:

  • 交互模式:用户逐条输入命令 → 即时执行。

  • 脚本模式 :运行 .bat.cmd 文件 → 批量执行。

命令分类:

  • 内部命令 :由 cmd.exe 自身实现,如 cddirecho

  • 外部命令 :由外部可执行文件实现,如 ping.exeipconfig.exe


📚二、CMD基础使用与基本命令

2.1 CMD使用基础

1)如何打开 CMD
  • 快捷键:Win + R,输入 cmd,按回车。
  • 文件资源管理器1: 在地址栏输入 cmd 并按回车,可以在当前目录下打开 CMD。
  • 管理员模式: 右键点击命令提示符图标,选择 "以管理员身份运行"。
2)快捷键与小技巧
  • Tab键自动补全:输入部分路径或文件名,按Tab键可自动补全。
  • 上下箭头:浏览历史命令。
  • F7:显示命令历史列表。
  • F3:重复上一个命令。
  • F1:重复上一个命令的一个字符。
  • Ctrl+C:中断当前正在执行的命令。
  • 右键粘贴:默认情况下,在CMD窗口中右键点击即可粘贴剪贴板内容。
  • 拖放:直接将文件或文件夹拖放到CMD窗口,路径会自动输入。

2.2 CMD基础命令

1)命令格式
  • 命令结构命令 [选项] [参数]

    • 命令:要执行的操作,如 dir, cd

    • [选项](或称为开关):通常以 /- 开头,用于修改命令的行为,大小写不敏感,dir /w

    • [参数]:命令操作的对象,通常是文件或目录名,如 del example.txt

  • 路径

    • 绝对路径 :从盘符开始的完整路径,如 C:\Windows\System32

    • 相对路径:从当前目录开始的路径。

      • . 代表当前目录(例如 .\main.exe

      • .. 代表上级目录(例如 cd .. 返回上一级)

⚠️注意规则

  • CMD 本身大小写不敏感

    • 命令名:DIRdirDir 效果一样。

    • 参数:/I/i/S/s 等,效果完全一致。

  • 例外情况

    • 文件名是否区分大小写,取决于文件系统(NTFS 默认大小写不敏感)。
  • 如果 命令参数 中包含空格必须用双引号括起来

2)基础命令
命令 功能描述 示例
dir 查看当前目录内容 dir /b /s *.py
cd 切换目录 cd D:\Projects\AI
cls 清屏 cls
exit 关闭命令行窗口 exit
echo 输出文本或变量 echo Hello %USERNAME%
help 查看所有可用命令 help
3)文件与目录管理命令列表:
命令 功能 示例
md [目录名] 创建目录 md project(创建 project 文件夹)
rd [目录名] 删除空目录 rd temp
rd /s /q [目录名] 强制删除非空目录(无提示) rd /s /q logs
echo [内容] > [文件名] 创建文件并写入内容 echo hello > test.txt
type [文件名] 查看文件内容 type config.ini
del [文件名] 删除文件 del *.log(删除所有.log 文件)
ren [旧名] [新名] 重命名文件 / 目录 ren old.js new.js

📚三、CMD命令特殊符号

3.1 通配符(Wildcard)

通配符用于匹配文件名和目录名,让你可以用一个模式来处理多个文件,无需逐个指定。

  • * → 匹配 任意长度 的字符串(包括空字符串)。

  • ? → 匹配 单个任意字符

示例:

复制代码
dir *.txt        # 列出所有 .txt 文件
dir data??.csv   # 匹配 data01.csv, data12.csv, 但不匹配 data123.csv
copy *.doc D:\backup\
del temp*.*      # 删除 temp 开头的所有文件

💡 应用场景:批量操作文件(备份、删除、查找等)。


3.2 管道(Pipe)

语法: Command_A | Command_B

作用:把前一个命令的 标准输出 传递给后一个命令作为 标准输入

示例:

复制代码
dir | more               # 分页显示目录内容
ipconfig | find "IPv4"   # 从 ipconfig 输出中筛选包含 IPv4 的行
tasklist | find "chrome" # 查找 chrome 进程

💡 应用场景 :结合 findmore,对长输出进行过滤或分页。


3.3 重定向(Redirection)

重定向用于将命令的输入输出从默认的"命令行窗口"重定向到文件从文件读取

常用符号:

  • > → 输出覆盖写入文件

  • >> → 输出追加到文件

  • < → 从文件输入(替代键盘输入)

  • 2> → 将错误输出(2)重定向到文件

  • 2>&1 → 把错误输出(2)合并到标准输出(1)

示例:

复制代码
dir > files.txt            # 把目录列表写入文件(覆盖)
echo New log >> log.txt    # 向 log.txt 追加一行
type input.txt | find "abc" > result.txt   # 查找结果保存到 result.txt
dir nosuchfile 2> error.txt # 错误信息保存到 error.txt
ping localhost > all.txt 2>&1 # 把输出和错误都写到 all.txt

💡 应用场景:日志保存、错误捕获、批处理自动化。


3.4 命令链(Command chaining)

命令链用于根据前一个命令的结果执行后续命令。

  • &:无论前一个命令成功与否,都顺序执行下一个命令。

    • 示例:copy data.txt backup\ & echo Backup done.

    • 顺序执行:先复制文件,然后无论复制是否成功,都显示"Backup done."

  • &&:如果前一个命令成功(退出代码为 0),则执行后一个命令。

    • 示例:dir && echo Directory listed successfully
      只有当 dir 成功执行后,才输出 "Directory listed successfully"。
  • ||:如果前一个命令失败(退出代码非 0),则执行后一个命令。

    • 示例:non_existent_command || echo Command failed
      由于 non_existent_command 会失败,因此会输出 "Command failed"。
  • ; (分隔): ; 可以分隔多个命令,它们会依次执行,不关心成功或失败(类似 Linux 的 ;)。

    • echo First; echo Second
  • 示例:
    *

    复制代码
      mkdir project && cd project || echo Failed

    解释:如果 mkdir 成功则进入目录,如果进入失败则打印 "Failed"。

💡 应用场景:编写健壮的批处理脚本,控制流程。


📚四、进阶:常用命令

4.1. 系统与进程管理

  • systeminfo:查看系统详细信息(操作系统版本、内存、CPU 等,用于环境排查)
  • tasklist:列出所有运行的进程(类似任务管理器)
    • 示例:tasklist | findstr "python"(筛选出 python 相关进程)
  • taskkill /f /im [进程名]:强制结束进程
    • 示例:taskkill /f /im node.exe(关闭所有 node 进程,开发中常用)
  • netstat -ano:查看端口占用(调试端口冲突必备)
    • 示例:netstat -ano | findstr "8080"(查看 8080 端口被哪个进程占用,最后一列是 PID)
  • taskkill /f /pid [PID]:通过 PID 结束进程(配合 netstat 使用)

4.2. 网络调试

  • ipconfig:查看网络配置(IP、子网掩码、网关)
    • ipconfig /all:详细信息(含 DNS、MAC 地址)
    • ipconfig /flushdns:刷新 DNS 缓存(解决域名解析问题)
  • ping [域名/IP]:测试网络连通性
    • 示例:ping google.com -n 4(发送 4 个数据包)
  • tracert [域名/IP]:追踪网络路由(排查跨网访问延迟问题)
  • nslookup [域名]:查询域名对应的 IP(验证 DNS 解析是否正确)

4.3. 文件操作增强

  • copy [源文件] [目标路径]:复制文件
    • 示例:copy D:\test.txt E:\backup\(复制到备份目录)
  • xcopy [源目录] [目标目录] /s /e:复制目录及子目录(比 copy 更强大)
    • 示例:xcopy D:\project E:\backup\project /s /e(备份项目)
  • move [源] [目标]:移动文件 / 目录(相当于剪切)
  • fc [文件1] [文件2]:比较两个文件的差异(简单文本对比)

4.4. 环境变量操作

程序员常需配置 Java、Python 等开发环境,CMD 中可直接操作环境变量:

  • set:查看所有环境变量
  • set [变量名]:查看指定变量(如set JAVA_HOME
  • set [变量名]=[值]:临时设置环境变量(仅当前 CMD 窗口有效)
    • 示例:set PATH=%PATH%;D:\nodejs(临时添加 node 路径)
  • setx [变量名] "[值]" /m:永久设置系统环境变量(需管理员权限,/m表示系统级)

📚五、编写CMD批处理脚本

批处理脚本(Batch Scripting)是CMD的精髓所在,它允许你将一系列命令保存到一个 .bat.cmd 文件中,然后一次性执行。

5.1 批处理脚本基础

  • 文件扩展名.bat.cmd
  • 第一行 :通常是 @echo off,用于关闭命令回显,使脚本执行过程更"干净"。
  • 注释rem::
    • rem 这是一个注释
    • :: 这也是一个注释
  • 暂停pause 命令会在脚本执行到此处时暂停,并提示"请按任意键继续..."。
  • 退出exit /b (退出批处理脚本而不关闭CMD窗口)。

5.2 变量与参数

  • 批处理变量 :使用 set 定义,如 set count=10
    • 在脚本中使用 %variable_name% 引用,如 echo Current count is %count%
  • 命令行参数 :脚本运行时传入的参数。
    • %0:脚本自身的名称。

    • %1, %2, ... %9:第1个、第2个到第9个参数。

    • %*:所有参数(作为一个字符串)。

    • 示例 (myscript.bat):

      复制代码
      @echo off
      echo Script name: %0
      echo First argument: %1
      echo Second argument: %2
      echo All arguments: %*

      执行 myscript.bat arg1 arg2

5.3 条件判断 (IF)

IF 命令用于根据条件执行不同的命令块。

  • 语法

    复制代码
    IF [NOT] condition (
        command1
        command2
    ) ELSE (
        command3
    )
  • 常用条件

    • IF EXIST filename:如果文件或目录存在。
    • IF "string1" == "string2":字符串比较(注意双引号)。
    • IF %ERRORLEVEL% NEQ 0:检查上一个命令的返回码(0通常表示成功,非0表示失败)。
    • IF DEFINED variable:如果环境变量已定义。
  • 示例

    复制代码
    @echo off
    IF EXIST "C:\Program Files" (
        echo "Program Files" directory exists.
    ) ELSE (
        echo "Program Files" directory does not exist.
    )
    
    set myVar=test
    IF "%myVar%" == "test" (
        echo myVar is test.
    )
    
    :: 检查上一个命令是否成功
    del nonexistent.txt > NUL 2>&1
    IF %ERRORLEVEL% NEQ 0 (
        echo Failed to delete file (as expected).
    )

5.4 循环 (FOR)

FOR 命令是批处理中最强大的命令之一,用于遍历文件、目录、数字序列甚至文件内容。

  • 交互式使用 vs 脚本使用

    • 在CMD命令行中,FOR 变量使用单个百分号(%i)。
    • 在批处理脚本中,FOR 变量必须使用双百分号(%%i)。
  • FOR %%variable IN (set) DO command:遍历一个集合。

    • 示例 (遍历文件):

      复制代码
      @echo off
      FOR %%f IN (*.txt) DO (
          echo Processing file: %%f
          type "%%f"
      )
    • 示例 (遍历数字序列):

      复制代码
      @echo off
      FOR /L %%i IN (1,1,5) DO (
          echo Number: %%i
      )
      :: 输出:1 2 3 4 5
    • 示例 (遍历目录,/D):

      复制代码
      @echo off
      FOR /D %%d IN (*) DO (
          echo Found directory: %%d
      )
    • 示例 (递归遍历文件,/R [path]):

      复制代码
      @echo off
      FOR /R "C:\MyProject" %%f IN (*.log) DO (
          echo Found log file: %%f
      )
    • 示例 (遍历文件内容,/F):这是最强大的形式,可以解析文件的每一行,并按分隔符提取内容。

      复制代码
      @echo off
      :: 假设 log.txt 内容是:
      :: ERROR: File not found
      :: INFO: Operation successful
      :: WARNING: Disk space low
      
      FOR /F "tokens=1,2* delims=:" %%a IN (log.txt) DO (
          echo Severity: %%a, Message: %%b%%c
          :: tokens=1,2* 表示取第一个、第二个和剩余的所有部分
          :: delims=: 表示以冒号为分隔符
      )

      FOR /F 还可以用于解析命令输出:

      复制代码
      @echo off
      :: 获取并显示当前IP地址
      FOR /F "tokens=2 delims=:" %%a IN ('ipconfig ^| findstr IPv4') DO (
          echo Your IPv4 Address: %%a
      )

      注意:在 IN ('command') 中,如果 command 包含特殊字符(如 |),需要用 ^ 进行转义。

5.5 子程序 (CALL, GOTO, :label)

用于控制脚本的流程和模块化。

  • : (标签) :定义一个跳转的目标。
    • :MyLabel
  • GOTO label :无条件跳转到指定标签。
    • GOTO MyLabel
  • CALL :label [arguments] :调用子程序,执行完毕后返回调用点。
    • 示例

      复制代码
      @echo off
      echo Main script started.
      CALL :MySubroutine "Hello from Main"
      echo Main script continued.
      CALL :AnotherSub 10 20
      echo Main script finished.
      exit /b
      
      :MySubroutine
      echo This is a subroutine. Argument: %1
      goto :eof :: End Of File - 返回调用点
      
      :AnotherSub
      set /a sum=%1+%2
      echo Sum of %1 and %2 is %sum%
      goto :eof

5.6 错误级别 (ERRORLEVEL)

每个命令执行后都会返回一个退出码,存储在 %ERRORLEVEL% 变量中。通常0表示成功,非0表示失败。

  • 使用IF %ERRORLEVEL% NEQ 0 ( ... )IF ERRORLEVEL 1 ( ... )

  • 示例

    复制代码
    @echo off
    copy nonexistent.txt C:\temp > NUL 2>&1
    IF %ERRORLEVEL% NEQ 0 (
        echo Error: Failed to copy file.
    ) ELSE (
        echo File copied successfully.
    )

5.7 实用脚本示例

  • 项目备份脚本(backup.bat):

    复制代码
    @echo off  // 关闭命令回显(使输出更简洁)
    set backup_dir=E:\project_backup
    set project_dir=D:\my_project
    
    :: 创建备份目录(若不存在)
    if not exist %backup_dir% md %backup_dir%
    
    :: 复制项目文件(包含子目录)
    xcopy %project_dir% %backup_dir%\%date:~0,4%%date:~5,2%%date:~8,2% /s /e /y
    
    echo 备份完成!备份路径:%backup_dir%
    pause  // 暂停,方便查看结果

    说明:%date:~0,4%等是提取系统日期的年 / 月 / 日,实现按日期创建备份文件夹。


📚六、CMD计划任务管理

Windows 计划任务是一个强大的系统工具,允许用户在特定时间或响应特定事件自动执行脚本、程序或操作。管理方式主要分为两种:图形用户界面(GUI)命令行界面(CLI),因为图形化的方式比较方便,这里只介绍图形化的方式。

6.1. 打开任务计划程序的方法

你可以通过以下方式打开 taskschd.msc:

  • 快捷键:Win + R → 输入 taskschd.msc → 回车

  • 控制面板:控制面板 → 管理工具 → 任务计划程序

6.2. 创建计划任务的完整流程

1). 创建任务(推荐使用"创建任务"而非"创建基本任务")
  • 在左侧"任务计划程序库"中选择或新建文件夹

  • 右键 → 创建基本任务

  • 根据实际情况添加,名称与描述

  • 设置触发器

  • 根据选择的触发器类型,进一步设置:

  • 选择操作项

  • 根据选择的不同操作,设置进一步的具体操作信息,比如要运行的程序或脚本:

  • 任务导航,最终显示所有设置信息,可以在完成时,查看属性信息,进一步调整修改:

2). 属性设置

相关属性项目的作用如下

1) 常规选项卡设置

项目 说明
名称与描述 自定义任务名称与说明
用户账户 可选择本地账户、域账户或 SYSTEM 账户(推荐 SYSTEM 用于高权限任务)
安全选项 建议勾选"使用最高权限运行"以确保管理员权限
登录状态控制 可选"无论用户是否登录都运行"以支持后台任务

2) 触发器选项卡设置

  • 点击"新建" → 设置任务触发条件:

    • 时间触发:每天、每周、每月、一次性

    • 事件触发:用户登录、系统启动、空闲状态

    • 高级设置:延迟执行、重复间隔、到期时间、启用/禁用

📌 示例:每天 06:00 执行任务,每 5 分钟重复一次,持续 1 小时。

3) 操作选项卡设置

  • 点击"新建" → 设置任务执行动作:

    • 启动程序或脚本(如 .bat.ps1.exe

    • 添加参数(如脚本路径、命令参数)

    • 起始于:设置工作目录,建议设置为脚本所在目录

4) 条件选项卡设置(可选)

  • 控制任务是否在空闲、连接电源、网络状态下运行

  • 一般保持默认即可,除非有特殊需求

5)设置选项卡设置

  • 控制任务失败重试、最长运行时间、是否允许手动运行

  • 建议勾选"允许按需运行任务"以便测试任务

6.3. 查看计划任务的日志

你可以使用 事件查看器 查看任务执行的日志。在事件查看器中,你可以找到关于计划任务执行成功或失败的详细信息。

  • 按下 Win + R 键,输入 eventvwr.msc 并回车。

  • 或者在开始菜单搜索"事件查看器"。

在事件查看器左侧的导航窗格中,依次展开:
应用程序和服务日志MicrosoftWindowsTaskScheduler

你会看到几个关键的日志通道,它们的区别如下:

日志通道名称 主要用途 推荐关注点
Operational 记录任务调度的核心过程 任务开始、结束、触发、操作结果
Maintenance 记录与自动维护相关任务的活动 系统空闲时触发的任务
Debug 记录计划任务服务更详细的内部操作(默认禁用) 微软支持人员用于深度故障诊断

通常,查看 Operational 日志就能获得大部分我们需要的信息。双击进入 Operational 日志,你会看到按时间排列的所有事件。计划任务的关键信息通常包含在特定的事件ID中

📜以下是计划任务相关的一些关键事件ID及其含义

事件ID 事件类型 含义说明 建议操作
100 信息 任务计划程序已启动任务 表明任务开始执行
102 信息 任务计划程序成功完成任务 任务正常结束
103 信息 任务计划程序已启动任务实例 任务实例开始运行
104 信息 任务计划程序为任务实例安排了副本 任务被重新安排
106 信息 任务计划程序已尝试运行任务,但任务已在进行中(忽略重叠实例设置) 检查任务执行时间或重叠实例设置
107 信息 事件触发的任务已订阅事件 事件订阅成功
108 信息 任务计划程序已启动任务,因为用户启动了会话 用户登录触发任务
109 信息 任务计划程序已启动任务,因为计算机从空闲状态恢复 系统空闲状态变化触发任务
110 信息 任务计划程序已停止任务实例(用户请求或进程退出) 任务被手动停止或自行退出
111 信息 任务计划程序已停止任务实例(达到时间限制或引擎要求) 任务运行超时或被系统终止
119 信息 任务计划程序已启动任务,因为收到了事件 事件触发任务启动
120 信息 任务计划程序已为任务显示"运行任务"对话框 交互式任务显示对话框
121 信息 任务计划程序已代表用户将任务排队 任务被加入队列
200 错误 任务计划程序未能启动任务(常见于权限、路径、兼容性问题) 检查任务操作、用户权限、路径名
201 错误 任务计划程序未能将任务实例排队(触发器问题或任务禁用) 检查触发器设置和任务状态
202 错误 任务计划程序未能运行任务,因为任务正在运行且未配置重叠实例 考虑启用"允许任务按需运行"或调整策略
203 错误 任务计划程序无法从订阅事件中为任务实例获取事件信息 检查事件触发器的订阅条件
204 错误 任务调度程序无法向任务引擎发送启动消息 可能系统资源紧张,检查系统负载
300 信息 任务计划程序已跳过任务,因为未满足所需条件(如电源、网络) 检查任务条件设置(如是否插电、特定网络)
301 警告 任务计划程序未启动任务,因为未满足条件(如电池电量低) 条件未满足,任务被跳过
302 错误 任务计划程序无法在任务运行时更新或重播任务定义 任务运行时修改了任务定义

你可以使用右侧"操作"栏中的筛选当前日志 功能,只显示特定事件ID(如输入100,102,200,201),这样可以快速聚焦于关键信息。


七、结尾

如进一步深入学习,可以参考:

【教程合集】CMD用法总结合集

相关推荐
NetX行者7 小时前
在windows 10系统上使用WSL安装Ubuntu系统并配置开发环境
linux·windows·python·ubuntu·wsl
一人の梅雨8 小时前
小红书开放平台笔记详情接口实战:内容解析与数据挖掘全方案
windows·python
love530love8 小时前
2025 PyCharm IDE 社区版与专业版合并后,新手该如何安装?(附 Toolbox 图形化安装教程)
ide·人工智能·windows·python·架构·pycharm·github
集成显卡6 天前
windows 下使用 bat 批处理运行 Chrome 无头模式刷一波访问量
windows·程序员
路由侠内网穿透9 天前
本地部署 GPS 跟踪系统 Traccar 并实现外部访问
运维·服务器·网络·windows·tcp/ip
研华嵌入式9 天前
如何在高通跃龙QCS6490 Arm架构上使用Windows 11 IoT企业版?
arm开发·windows·嵌入式硬件
带娃的IT创业者9 天前
Windows 平台上基于 MCP 构建“文心一言+彩云天气”服务实战
人工智能·windows·文心一言·mcp
csdn_aspnet9 天前
Windows Node.js 安装及环境配置详细教程
windows·node.js
摇滚侠9 天前
java语言中,list<String>转成字符串,逗号分割;List<Integer>转字符串,逗号分割
java·windows·list