【速成】快速掌握CMD
🐳CMD,这项“古老”的技术,影响深远,无处不在,“不得不”学习,别犹豫,冲吧💪。
ℹ️教程说明
教程总结的目标,快速了解CMD的核心功能。
目录
ℹ️教程说明
📒参考资源:
📚一、了解CMD
1.1 CMD与powershell
1.2 基本机制
📚二、CMD基础使用与基本命令
2.1 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
自身实现,如cd
、dir
、echo
。 -
外部命令:由外部可执行文件实现,如
ping.exe
、ipconfig.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 本身大小写不敏感
-
命令名:
DIR
、dir
、Dir
效果一样。 -
参数:
/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 进程
💡 应用场景:结合 find
或 more
,对长输出进行过滤或分页。
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 (command1command2 ) 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
)。
- 在CMD命令行中,
-
FOR %%variable IN (set) DO command
:遍历一个集合。- 示例 (遍历文件):
@echo off FOR %%f IN (*.txt) DO (echo Processing file: %%ftype "%%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 lowFOR /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 /yecho 备份完成!备份路径:%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
并回车。 -
或者在开始菜单搜索“事件查看器”。
在事件查看器左侧的导航窗格中,依次展开:
应用程序和服务日志
→ Microsoft
→ Windows
→ TaskScheduler
。
你会看到几个关键的日志通道,它们的区别如下:
日志通道名称 | 主要用途 | 推荐关注点 |
---|---|---|
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用法总结合集