CMD 命令行入门教程

从零开始,掌握 Windows 命令行的强大威力

第一部分:基础入门

在IDE中,点击“运行”是透明的。

命令行则让你直面这个过程。

1.1 打开与退出

打开 CMD (命令提示符)

  • 按下键盘上的 Win + R 键。
  • 在弹出的“运行”窗口中输入 cmd。
  • 按下回车键。

退出 CMD

在窗口中输入以下命令并回车:

exit

1.2 理解提示符:你的GPS

打开CMD后,你会看到类似:

C:\Users\YourName>
  • 我在哪儿? C:\Users\YourName 是你当前的工作目录。
  • 我可以输入命令了吗? > 符号表示系统已准备就绪。

1.3 核心导航命令 (1/3)

dir - 查看当前位置有什么

列出当前目录下的所有文件和子目录。

dir

常用参数:

  • dir /p: 分屏显示,防止内容滚动太快。
  • dir /w: 以紧凑的宽屏格式显示。

1.3 核心导航命令 (2/3)

cd - 移动到其他位置

  • 进入子目录 (例如 Desktop):
    cd Desktop
  • 返回上一级目录:
    cd ..
  • 绝对路径 vs 相对路径: 绝对路径从根目录开始,无论在哪都能准确定位。
    cd C:\Windows\System32

1.3 核心导航命令 (3/3)

切换驱动器

cd 命令不能跨盘符。要切换到D盘,直接输入盘符和冒号:

d:

要切回C盘:

c:

1.4 屏幕管理 & 1.5 获取帮助

cls - 清空屏幕

当屏幕内容杂乱时,用它来清理。

cls

获取帮助

  • help: 查看所有内置命令的列表。
  • [命令] /?: 查看特定命令的详细用法,这是你最好的朋友!
    dir /?

1.6 动手实践

  1. 打开CMD,确认当前位置 (C:\Users\YourName>)。
  2. 查看当前目录,找到 Documents 目录。
    dir
  3. 进入 Documents 目录。
    cd Documents
  4. 再次查看,对比文件资源管理器。
    dir
  5. 返回用户主目录。
    cd ..
  6. 用绝对路径进入Windows目录。
    cd C:\Windows
  7. 分页查看Windows目录。
    dir /p
  8. 清空屏幕。
    cls
  9. 预习 copy 命令。
    copy /?
  10. 退出CMD。
    exit

第二部分:文件与目录操作

本阶段的目标是让你脱离图形界面,仅用键盘就能高效地完成所有文件和文件夹的管理工作。

准备工作:创建“沙盒”

cd Desktop
mkdir cmd_practice
cd cmd_practice

2.1 创建:从无到有

mkdir (或 md) - 创建新目录

mkdir src
mkdir include

创建文件

  • echo创建带内容的文件 (^转义):
    echo #include ^<stdio.h^> > src\main.c
  • type nul创建空文件 :
    type nul > include\utils.h

2.2 查看 & 2.3 复制

type - 显示文本文件内容

type src\main.c

copy - 复制文件

  • 创建副本:
    copy src\main.c src\main_backup.c
  • 复制到当前目录 (.):
    copy src\main.c .

2.4 移动与重命名

move - 身兼两职

  • 重命名文件:
    move main.c app.c
  • 移动文件到目录:
    move include\utils.h src\

2.5 删除:清理空间

终极警告: 命令行删除是永久性的,不会进入回收站!请再三确认!

del - 删除文件

del src\main_backup.c

rd (或 rmdir) - 删除目录

  • 删除空目录:
    rd include
  • 删除非空目录 (危险操作!):
    rd /s /q src

2.6 通配符:批量操作的利器

当你需要对多个相似文件进行操作时,逐个指定文件名既繁琐又容易出错。通配符让你能够用简洁的模式匹配多个文件。

* (星号) - 匹配任意数量的字符

  • 查看所有文本文件:
    dir *.txt
  • 复制所有C源文件到备份目录:
    copy *.c backup\
  • 删除所有临时文件:
    del temp*.*

? (问号) - 匹配单个字符

  • 查找game1.exe, game2.exe等:
    dir game?.exe
  • 删除log1.txt到log9.txt:
    del log?.txt
安全提醒: 使用通配符删除文件时要格外小心!建议先用 dir 命令预览匹配的文件,确认无误后再执行删除操作。

2.7 动手实践

一个完整的项目初始化和清理流程。

  1. 创建项目目录: mkdir MyGame
  2. 进入目录: cd MyGame
  3. 创建子目录: mkdir source, mkdir assets
  4. 创建源文件: echo int main() {} > source\game.c
  5. 创建备份: copy source\game.c game_test.c
  6. 重命名备份: move game_test.c test_backup.c
  7. 删除备份: del test_backup.c
  8. 返回上一级: cd ..
  9. 删除整个项目: rd /s /q MyGame

第三部分:程序执行与环境

理解程序是如何被操作系统发现、编译和执行的,并亲手完成从 .c 源代码到可运行程序的完整过程。

3.1 运行程序 & 3.2 环境变量 PATH

命令的本质

dir, cd, notepad 本质都是可执行程序。

notepad  // 打开记事本
calc     // 打开计算器

环境变量 PATH

PATH 是一个目录列表。系统只在这些目录里寻找你输入的命令。

查看你自己的 PATH:

path

3.3 编译并运行C代码 (1/2)

前提:安装编译器并配置PATH

  1. 安装 MinGW-w64 (GCC for Windows)。
  2. 将 MinGW 的 bin 目录 (如 C:\mingw64\bin) 添加到系统 PATH 环境变量中。
  3. 机房快捷方式:机房电脑已安装 Dev-C++,它自带 GCC 编译器。右键桌面 Dev-C++ 图标 → 选择"打开文件所在的位置" → 进入安装目录找到 MinGW64\bin,把这个完整路径添加到 PATH。
  4. 重启CMD,验证安装:
    gcc --version

3.3 编译并运行C代码 (2/2)

1. 创建源代码 hello.c

echo #include ^<stdio.h^> > hello.c
echo int main() { >> hello.c
echo    printf("Hello from CMD!\n"); >> hello.c
echo    return 0; >> hello.c
echo } >> hello.c

注意: ^ 用于转义特殊字符 < 和 >。>> 表示追加内容到文件。

也可以直接用 notepad hello.c 打开记事本,把代码粘贴进去保存。

2. 编译

gcc hello.c -o hello.exe

3. 运行

因为当前目录(.)不在PATH中,需要指定路径:

.\hello.exe

3.4 命令行参数 (argc, argv)

通过命令行向C程序传递数据。

1. 创建 args.c 并编译

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("Total arguments: %d\n", argc);
    
    for (int i = 0; i < argc; i++) {
        printf("argv[%d]: %s\n", i, argv[i]);
    }
    
    return 0;
}
gcc args.c -o args.exe

2. 带着参数运行 (用空格隔开)

.\args.exe hello world 123

3. 查看输出

Total arguments: 4
argv[0]: .\args.exe
argv[1]: hello
argv[2]: world
argv[3]: 123

第四部分:提升效率的进阶技巧

学会控制命令的输入和输出,并将多个命令串联起来,形成强大的工作流。

4.1 输入/输出重定向

> (覆盖输出)

将命令结果写入文件,会覆盖原有内容。

dir > file_list.txt

>> (追加输出)

将命令结果追加到文件末尾,常用于日志记录。

echo Program started at %time% > log.txt
echo Program finished at %time% >> log.txt

(%time% 是一个代表当前时间的系统变量)

4.2 find:基础文本搜索

find 是Windows内置的基础文本搜索工具,用于在文件或命令输出中查找指定的字符串。

基本语法

find "搜索内容" 文件名

常用参数

  • /i: 忽略大小写
  • /c: 只显示匹配行的数量
  • /v: 显示不包含指定字符串的行
  • /n: 显示行号

实际应用示例

  • 在文件中搜索:
    find "main" hello.c
  • 统计匹配行数:
    find /c "error" log.txt
  • 忽略大小写搜索:
    find /i "ERROR" log.txt

4.3 管道 (|):命令的流水线

将前一个命令的输出,直接作为后一个命令的输入。

场景1: 查找所有 .c 文件

dir | find ".c"

场景2: 查找所有Chrome进程

tasklist 命令列出所有进程。

tasklist | find "chrome.exe"

管道让你能将简单工具组合成强大的流程。

4.4 findstr:强大的文本搜索

findstr 是Windows原生的强大文本搜索工具,比 find 更灵活,支持正则表达式和多种搜索模式。

基本语法

findstr [选项] "搜索内容" 文件名

常用参数

  • /i: 忽略大小写
  • /n: 显示行号
  • /c:"文本": 搜索包含空格的精确字符串
  • /r: 使用正则表达式
  • /s: 在子目录中递归搜索

4.3 findstr:实际应用示例

场景1: 在源代码中查找函数

findstr /i /n "main" *.c

在所有.c文件中查找包含"main"的行,忽略大小写并显示行号。

场景2: 查找配置文件中的设置

findstr /c:"server port" config.txt

查找包含"server port"的精确字符串。

场景3: 在日志中查找错误

findstr /i "error\|warning\|fail" *.log

使用正则表达式查找包含error、warning或fail的行。

场景4: 递归搜索项目文件

findstr /s /i "TODO" *.java

在当前目录及子目录的所有Java文件中查找TODO注释。

4.5 简单的批处理脚本 (.bat)

当你需要反复执行一系列命令时,把它们写进一个 .bat 文件中。

示例: build.bat 编译并运行C程序

@echo off
echo Cleaning previous build...
del hello.exe
echo Compiling hello.c...
gcc hello.c -o hello.exe
echo Running the program:
.\hello.exe

现在,只需在CMD中运行 build.bat 即可完成所有步骤!

4.5 Bash Is All You Need

Claude 工程师 Thariq Shihipar 的结论:Bash Is All You Need。

这句话不是说“只学 Bash 就够了”,而是强调:在 Code Agent 时代,命令行是最通用、最可组合、最可自动化的执行界面。

为什么这件事现在更重要

  • 统一接口:无论是编译、测试、Git、部署,本质都可以收敛为命令行调用。
  • 天然可编排:管道、重定向、脚本让“单步操作”升级为“可复用流程”。
  • Agent 友好:Code Agent 最稳定的协作方式之一,就是读取输出并继续执行下一条命令。

课堂行动:后续所有“点按钮能完成的事”,都尽量补一条等价命令行写法。

参考:Building agents with the Claude Agent SDK、Anthropic Bash Tool

*4.6 高级批处理脚本编程

掌握条件判断、循环和变量,让你的批处理脚本更加智能和强大。

本节内容

  • 条件判断: 使用 if 语句进行逻辑控制
  • 循环结构: 使用 for 循环批量处理
  • 变量操作: 动态存储和使用数据
  • 综合应用: 实际项目自动化脚本

这些技能让你能够编写真正实用的自动化工具。

条件判断:if 语句

使用 if 语句让脚本根据不同条件执行不同操作。

基本语法

if condition (
    command1
    command2
) else (
    command3
    command4
)

常用条件判断

  • if exist filename - 检查文件是否存在
  • if "%var%"=="value" - 字符串比较
  • if %num% GTR 10 - 数值比较 (GTR, LSS, EQU)
  • if errorlevel 1 - 检查命令执行结果

条件判断实例

检查文件存在性

@echo off
set "target_file=config.txt"

if exist "%target_file%" (
    echo 配置文件存在,开始处理...
    type "%target_file%"
) else (
    echo 配置文件不存在,创建默认配置...
    echo default_setting=true > "%target_file%"
)

用户输入验证

@echo off
set /p user_choice="请选择操作 (1-备份, 2-清理): "

if "%user_choice%"=="1" (
    echo 开始备份操作...
    xcopy *.txt backup\ /y
) else if "%user_choice%"=="2" (
    echo 开始清理操作...
    del temp\*.tmp
) else (
    echo 无效选择,请重新运行脚本
)

循环结构:for 循环

使用 for 循环批量处理文件、目录或数据序列。

基本语法形式

:: 遍历文件
for %%i in (*.txt) do command

:: 遍历目录
for /d %%i in (*) do command

:: 遍历数字序列
for /l %%i in (start,step,end) do command

:: 处理文件内容
for /f "tokens=1,2" %%i in (file.txt) do command

注意: 在批处理文件中使用 %%i,在命令行中使用 %i

for 循环实例

批量重命名文件

@echo off
set counter=1

for %%f in (*.jpg) do (
    ren "%%f" "photo_!counter!.jpg"
    set /a counter+=1
)

遍历子目录并统计文件

@echo off
echo 目录文件统计报告
echo ==================

for /d %%d in (*) do (
    echo 正在统计目录: %%d
    dir "%%d" /b /a-d | find /c /v "" > temp.txt
    set /p file_count=

set 语句详解

set 是批处理脚本中最重要的命令之一,用于变量操作和用户交互。

基本语法形式

:: 基本变量设置
set variable_name=value

:: 用户输入
set /p variable_name=prompt_message

:: 数学运算
set /a variable_name=expression

:: 显示所有环境变量
set

:: 显示特定变量
set variable_name

重要: 等号两边不要有空格,使用引号可以包含空格

set 语句实用示例

基本变量设置与字符串操作

:: 基本设置
set "username=张三"
set "project_path=C:\MyProject"
set "config_file=%project_path%\config.ini"

:: 字符串拼接
set "full_name=%username%_developer"
set "backup_name=%project_path%_backup_%date:~0,4%%date:~5,2%%date:~8,2%"

:: 清空变量
set "temp_var="

用户输入与验证

:: 获取用户输入
set /p "user_name=请输入您的姓名: "
set /p "project_type=选择项目类型 (web/desktop/mobile): "

:: 输入验证示例
:input_loop
set /p "confirm=确认删除所有文件吗? (y/n): "
if /i "%confirm%"=="y" goto delete_files
if /i "%confirm%"=="n" goto cancel
echo 请输入 y 或 n
goto input_loop

set /a 数学运算

使用 set /a 进行整数数学运算,支持多种运算符。

基本运算

:: 基本算术运算
set /a "result=10+5"          :: 加法: 15
set /a "result=20-8"          :: 减法: 12  
set /a "result=6*7"           :: 乘法: 42
set /a "result=15/3"          :: 除法: 5
set /a "result=17%%5"         :: 取余: 2

:: 复合运算
set /a "result=(10+5)*2"      :: 括号优先: 30
set /a "result=2**3"          :: 幂运算: 8

实用计算示例

:: 计数器应用
set /a "counter=0"
for %%f in (*.txt) do (
    set /a "counter+=1"
    echo 处理第 !counter! 个文件: %%f
)

:: 进度计算
set /a "total_files=100"
set /a "processed=75"
set /a "percentage=processed*100/total_files"
echo 进度: %percentage%%%

:: 时间计算 (秒转换)
set /a "total_seconds=3665"
set /a "hours=total_seconds/3600"
set /a "minutes=(total_seconds%%3600)/60"
set /a "seconds=total_seconds%%60"
echo 时间: %hours%:%minutes%:%seconds%

变量操作与环境设置

变量定义与使用

:: 设置变量
set "project_name=MyProject"
set "version=1.0"
set /a "build_number=100"

:: 使用变量
echo 项目: %project_name%
echo 版本: %version%
echo 构建号: %build_number%

:: 延迟变量展开 (用于循环中)
setlocal enabledelayedexpansion
set counter=0
for %%i in (*.txt) do (
    set /a counter+=1
    echo 文件 !counter!: %%i
)

环境变量与路径操作

:: 获取当前目录和文件信息
set "current_dir=%cd%"
set "script_dir=%~dp0"
set "temp_dir=%temp%\%project_name%"

:: 创建临时工作目录
if not exist "%temp_dir%" mkdir "%temp_dir%"

综合应用:项目自动化脚本

结合条件判断、循环和变量,创建实用的项目管理脚本。

@echo off
setlocal enabledelayedexpansion
title 项目自动化管理工具

:: 设置项目变量
set "project_name=WebProject"
set "backup_dir=backup_%date:~0,4%%date:~5,2%%date:~8,2%"
set "log_file=automation.log"

echo ================================
echo    项目自动化管理工具 v1.0
echo ================================
echo.

:: 检查项目目录结构
echo [%time%] 检查项目结构... >> %log_file%
if not exist "src" (
    echo 创建 src 目录...
    mkdir src
    echo [%time%] 创建 src 目录 >> %log_file%
)

if not exist "dist" (
    echo 创建 dist 目录...
    mkdir dist
    echo [%time%] 创建 dist 目录 >> %log_file%
)

:: 备份现有文件
echo 开始备份文件...
if exist "%backup_dir%" rmdir /s /q "%backup_dir%"
mkdir "%backup_dir%"

set file_count=0
for %%f in (src\*.js src\*.css src\*.html) do (
    copy "%%f" "%backup_dir%\" > nul
    set /a file_count+=1
    echo   备份: %%f
)

echo 备份完成,共备份 !file_count! 个文件
echo [%time%] 备份完成,文件数: !file_count! >> %log_file%

综合应用:构建与部署脚本

:: 清理旧的构建文件
echo 清理构建目录...
if exist "dist\*" del /q "dist\*"

:: 编译处理 (模拟)
echo 开始构建项目...
set build_success=true

for %%f in (src\*.js) do (
    echo   处理: %%f
    :: 这里可以调用实际的编译工具
    copy "%%f" "dist\" > nul
    if errorlevel 1 (
        echo   错误: 处理 %%f 失败
        set build_success=false
        echo [%time%] 构建失败: %%f >> %log_file%
    )
)

:: 检查构建结果
if "%build_success%"=="true" (
    echo.
    echo ✓ 构建成功完成!
    echo [%time%] 构建成功 >> %log_file%
    
    :: 生成部署报告
    echo 生成部署报告...
    echo 项目: %project_name% > deploy_report.txt
    echo 构建时间: %date% %time% >> deploy_report.txt
    echo 文件列表: >> deploy_report.txt
    dir dist /b >> deploy_report.txt
    
    echo ✓ 部署报告已生成: deploy_report.txt
) else (
    echo.
    echo ✗ 构建失败,请检查错误日志
    echo [%time%] 构建失败 >> %log_file%
)

echo.
echo 自动化流程完成,详细日志请查看: %log_file%
pause

*4.7 动手实践

任务: 找出 C:\Windows\System32 下所有 .dll 文件,保存列表,并统计数量。

1. 保存列表

用管道连接 dir 和 find,再用重定向保存结果。

dir C:\Windows\System32 | find ".dll" > dll_list.txt

2. 统计数量

使用 find 命令的 /c (count) 参数。

dir C:\Windows\System32 | find /c ".dll"

用两行核心命令,完成了一个原本需要手动操作很久的任务。

第五部分:常用命令速查表 (1/4)

文件与目录

  • dir: 列出内容 (/p, /s)
  • cd: 切换目录 (.., \)
  • mkdir (md): 创建目录
  • copy: 复制文件
  • move: 移动或重命名
  • del: 删除文件
  • rd (rmdir): 删除目录 (/s /q 强制)
  • type: 显示文本内容
  • cls: 清屏

第五部分:常用命令速查表 (2/4)

网络相关

  • ping [host]: 测试网络连接和延迟。
  • ipconfig: 查看本机IP配置 (/all 看详情)。
  • nslookup [domain]: 查询域名对应的IP地址。
  • tracert [host]: 跟踪数据包路由路径。
  • netstat -an: 显示所有网络连接和监听端口。

第五部分:常用命令速查表 (3/4)

系统管理

  • tasklist: 显示运行中的进程。
  • taskkill /im [name] /f: 强制终止进程。
  • systeminfo: 显示详细的系统配置信息。
  • shutdown /s /t [secs]: 定时关机。
  • sfc /scannow: 扫描并修复系统文件。
  • chkdsk c: /f: 检查并修复C盘错误。

第五部分:常用命令速查表 (4/4)

学习建议

  1. 不必死记硬背:把列表当作字典来查。
  2. 多用 /?:[命令名] /? 是你最好的老师。
  3. 组合使用:用管道 | 和 find 过滤命令输出,例如:
    systeminfo | find "System Boot Time"

恭喜你,完成了本次学习!

1 / X