【慢教程】CMD3:CMD命令特殊符号与文件处理命令

【慢教程】CMD3:CMD命令特殊符号与文件处理命令

ℹ️教程说明

教程总结的目标,就是彻彻底底,全面了解掌握CMD的全面使用。

🧩教程各部分链接:

第一课:了解CMD的前世今生

本文介绍了Windows系统中CMD命令提示符的历史背景、使用场景、运行原理及与同类工具的比较。 第二课:CMD基础使用与基本命令

本文介绍了Windows命令提示符(CMD)的基础使用方法和常用命令。 第三课:CMD命令特殊符号与文件处理命令

本文系统介绍了Windows CMD命令中的特殊符号和文件处理命令。 第四课:CMD系统信息查询及环境配置命令

介绍了Windows CMD系统信息查询和环境变量配置的关键命令,包括系统信息查询命令、环境变量管理、注册表操作命令、命令别名定制(doskey用法)。 第五课:CMD网络、进程、服务命令

本文系统介绍了Windows CMD中常用的网络、进程和服务管理命令。 第六课:CMD批处理脚本编写

本文介绍了Windows批处理脚本编写的基础知识,包括创建批处理文件、使用核心命令、变量设置、流程控制、函数模拟等实用技巧。 第七课:CMD调用 PowerShell命令

本文介绍了在CMD中调用和执行PowerShell命令的不同情况,以及如何捕获 PowerShell 的输出,和错误处理方法。 第八课:CMD计划任务管理

本文介绍了Windows批处理脚本编写的基础知识,包括创建批处理文件、使用核心命令、变量设置、流程控制、函数模拟等实用技巧。

📚第三课:CMD命令特殊符号与文件处理命令

一、命令中的特殊符号

1.1 通配符(Wildcard)

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

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

? → 匹配 单个任意字符。

示例:

dir *.txt # 列出所有 .txt 文件

dir data??.csv # 匹配 data01.csv, data12.csv, 但不匹配 data123.csv

copy *.doc D:\backup\

del temp*.* # 删除 temp 开头的所有文件

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

1.2 管道(Pipe)

语法: Command_A | Command_B

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

示例:

dir | more # 分页显示目录内容

ipconfig | find "IPv4" # 从 ipconfig 输出中筛选包含 IPv4 的行

tasklist | find "chrome" # 查找 chrome 进程

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

1.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

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

1.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”。

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

1.5 组合实例

简单的“备份脚本”:

@echo off

echo Backing up project...

:: 如果目录存在就进入

cd D:\project && (

dir *.txt | find "log" > logs.txt

copy *.txt D:\backup\ >nul 2>&1

echo Backup complete!

) || (

echo Project folder not found!

)

pause

脚本执行逻辑:

尝试进入项目目录 D:\project

如果成功:

筛选 .txt 文件中包含 "log" 的内容,保存为 logs.txt

将所有 .txt 文件复制到备份目录

输出“Backup complete!”

如果失败:

输出“Project folder not found!”

最后暂停,等待用户确认 ​

二、文件内容处理命令

CMD 都提供了一系列实用的文本处理命令,可以在命令行中高效地处理文件。

2.1 文件内容处理命令

1. type - 显示文件内容

这是最基础的命令,用于将文件内容输出到标准输出(通常是命令行窗口)。

功能:连接文件并将其内容打印到屏幕上。

局限:对于大型文件,内容会快速滚动,无法暂停浏览。

程序员使用场景:快速查看小型配置文件(如 .ini, .env)、脚本文件或短的日志文件。

示例:

:: 查看 config.txt 的内容

type config.txt

:: 结合 more 命令分页查看(见下方 more 命令)

type large_log.log | more

2. more - 分页显示文件内容

用于逐屏显示输出,防止长文件内容瞬间滚过屏幕。它可以单独使用,但更常见的是与 type 或其他命令通过管道 | 连接使用。

功能:一次显示一屏内容,按空格键向下翻页,按 Enter 键向下移动一行,按 Q 键退出。

程序员使用场景:查看大型日志文件、长文本输出。

示例:

:: 方式一:使用 more 直接打开文件

more large_file.log

:: 方式二(更常用):将 type 或其它命令的输出通过管道传递给 more

type massive_log.txt | more

netstat -ano | more

dir /s | more

3. find - 基本文本搜索

在文件或输入流中搜索指定的字符串。

功能:打印包含指定字符串的整行文本。

常用参数:

/i:忽略大小写进行搜索(非常实用)。

/v:反向搜索,只显示不包含该字符串的行。

/c:仅显示包含字符串的行数(计数)。

程序员使用场景:在日志文件中筛选错误信息、统计特定事件的发生次数、过滤命令输出。

示例:

:: 在 server.log 中查找所有包含 "ERROR" 的行(区分大小写)

find "ERROR" server.log

:: 忽略大小写查找 "error"

find /i "error" server.log

:: 显示 server.log 中不包含 "GET" 的行

find /v "GET" server.log

:: 统计包含 "WARNING" 的行数

find /c "WARNING" server.log

:: 结合管道使用:在正在运行的进程列表中查找 Java

tasklist | find "java.exe"

4. findstr - 高级文本搜索(正则表达式)

find 命令的增强版,是程序员处理文本的利器。它支持正则表达式和更多选项。

功能:使用强大的模式匹配来搜索文本。

关键参数:

/i:忽略大小写。

/r:将搜索字符串当作正则表达式处理。

/s:在当前目录和所有子目录中的文件里搜索。

/m:只打印匹配的文件名。

/n:在匹配行前显示行号(极其有用!)。

程序员使用场景:复杂的日志分析、代码搜索(在所有源文件中查找函数调用)、使用正则模式提取特定信息。

示例:

:: 基本字符串搜索(和 find 类似)

findstr "Exception" *.log

:: 显示行号:在文件中查找 "null" 并显示所在行号

findstr /n "null" MyProgram.java

:: 在所有 .java 文件中递归搜索 "public class"

findstr /s /i "public class" *.java

:: 使用正则表达式:查找所有格式为 192.168.x.x 的 IP 地址

findstr /r "192\.168\.[0-9]*\.[0-9]*" server.log

:: 查找以 "at " 开头的行(Java 异常堆栈跟踪)

findstr /r "^at " error.log

:: 查找空行

findstr /r "^$" file.txt

:: 查找包含 “error” 或 “warning” 的行

findstr /i "error warning" app.log

📜备注:其他参数列表

选项作用说明/B只匹配行首(Beginning of line)。/E只匹配行尾(End of line)。/L按字面字符串匹配(不使用正则表达式)。/R使用正则表达式(默认)。/S在指定目录及子目录中递归搜索。/I忽略大小写(Insensitive)。/X只显示完全匹配的行。/V显示不匹配的行(相当于取反)。/N显示匹配行的行号。/M只显示包含匹配文本的文件名。/O显示每行的偏移量(以字节为单位)。/C:"text"把整个字符串作为一个搜索词(避免被拆分)。/F:file从文件中读取要搜索的文件列表。/G:file从文件中读取要匹配的搜索字符串列表。/D:dirs指定多个目录搜索,用 ; 分隔。

5. sort - 对文本行进行排序

对输入进行排序并将结果输出到屏幕或文件。

功能:按字母顺序或数字顺序对文本行进行排序。

常用参数:

/r:反向排序(从 Z 到 A,或从大到小)。

/+n:从第 n 个字符开始排序(用于排序非首列对齐的表格数据)。

程序员使用场景:对字典列表、数据文件、命令输出进行排序,以便更好地分析。

示例:

:: 对 file.txt 的内容进行排序并显示

sort file.txt

:: 对 IP 地址列表进行排序(粗略排序)

sort ip_list.txt

:: 反向排序

sort /r file.txt

:: 将当前目录下的文件名排序后保存到新文件

dir /b | sort > sorted_files.txt

6. fc - 文件比较

比较两个文件并显示它们之间的差异。

功能:并排比较两个文件,输出不同的行。

常用参数:

/a:以简化格式(只显示差异行)输出结果。

/b:执行二进制比较。

/l:强制进行 ASCII 文本比较。

/n:在 ASCII 比较上显示行号。

使用场景:比较代码的两个版本、比较配置文件更改、验证输出结果是否与预期一致。

示例:

:: 比较两个文本文件

fc file_v1.txt file_v2.txt

:: 显示行号的简化差异输出

fc /a /n config_old.cfg config_new.cfg

:: 比较两个二进制文件(如编译后的 EXE)

fc /b program_v1.exe program_v2.exe

7. xcopy 高级复制

xcopy 的核心功能是高性能、高可控性的文件与目录结构复制。它能够根据归档属性、文件日期等进行选择性复制,并能处理复杂的复制逻辑,远胜于基础的 copy 命令。

语法

xcopy source [destination] [options]

常用选项 / 参数(程序员最需要掌握的)

选项描述使用场景示例/s复制目录和子目录,但不复制空目录。复制一个完整的项目结构,忽略空文件夹。/e复制所有目录和子目录,包括空目录。精确复制整个目录树,保留所有结构。/i如果目标不存在,且源是多个文件或目录,假定目标是一个目录。在脚本中避免系统询问目标是文件还是目录。/y取消确认以覆盖现有目标文件的提示。在自动化脚本中强制静默覆盖,避免脚本暂停等待输入。/exclude:file.txt排除所有在 file.txt 中列出字符串的文件。排除如 node_modules, .git 等目录。file.txt 中每行一个排除字符串。/h复制隐藏文件和系统文件(默认情况下 xcopy 会忽略它们)。复制完整的配置目录(可能包含 .git 等隐藏文件夹)。/d [:mm-dd-yyyy]仅复制源比目标新的文件。如果指定了日期,则复制在指定日期或之后更改的文件。增量备份:只复制修改过的文件,极大提升备份速度。/c即使发生错误,也继续复制。在复制大量文件时,不因个别文件错误(如权限不足)而中断整个任务。/q安静模式,复制时不显示文件名。让脚本输出更简洁。/r覆盖只读文件。确保目标目录的只读文件也能被更新。

示例:

部署项目到服务器(最常用):

xcopy C:\MyProject\*.* \\Server\Backup\MyProject\ /e /i /y /c

/e:包含所有子目录(包括空目录)。

/i:假定目标是一个目录。

/y:静默覆盖已有文件。

/c: 即使出错也继续。

增量备份文档文件夹:

xcopy C:\Users\Me\Documents\*.* D:\Backup\Documents\ /d /e /i /y

/d:只复制源位置比目标位置新的或有改变的文件。这是增量备份的关键。

复制但排除特定目录(如 node_modules): 首先创建一个名为 exclude_list.txt 的文件,内容如下:

node_modules\

.git\

*.tmp 然后运行:

xcopy C:\MyProject\*.* D:\Backup\Project\ /e /i /y /exclude:exclude_list.txt

8. 与命令符号组合使用:

真正的力量在于将这些命令与管道 | 和重定向 > 组合起来。

示例场景:分析应用日志

@echo off

:: 1. 在日志中查找所有 ERROR,忽略大小写,并显示行号

:: 2. 对结果进行排序,让相同的错误类型排在一起

:: 3. 将最终结果保存到 error_report.txt

findstr /n /i "error" application.log | sort > error_report.txt

echo Error report generated: error_report.txt

示例场景:高级日志分析

:: 1. 查找包含 “Exception” 的行及其后5行(使用 findstr 的上下文功能,但注意fc不支持,需用其他技巧或PowerShell)

:: 更复杂的上下文查看通常需要PowerShell (Select-String -Context) 或 GNU工具(grep -A -B)。

:: 2. 统计每种类型错误的数量(需结合更多工具,CMD原生处理较复杂)

findstr /i "error" app.log | sort | uniq -c

:: 注意:CMD 没有原生的 `uniq` 命令,这进一步凸显了其文本处理能力的局限性。

2.2 文件内容处理命令速查表

命令核心功能程序员首选场景type显示文件内容快速查看小文件more分页显示内容查看长文件或长输出find基础字符串搜索简单的日志过滤、计数findstr高级搜索(支持正则)复杂的日志分析、代码搜索sort对行排序整理列表或数据文件fc文件比较比较代码或配置差异 xcopy高性能复制文件和目录树项目部署、文件备份、目录同步

三、高级文件操作命令

CMD 的高级文件操作命令面向自动化运维和高效脚本,提供了更强大、更精细的控制能力。

3.1命令详解

1. robocopy - 鲁棒文件复制(推荐首选)

这是微软官方推荐取代 xcopy 的强大、可靠的文件复制工具。它支持多线程、断点续传、镜像同步等高级功能,是备份、部署和文件同步的理想选择。

关键特性与参数:

镜像同步 (/MIR):最强大的功能。使目标成为源的完全镜像,会自动删除目标中存在而源中不存在的文件和目录。使用需极其谨慎!

多线程 (/MT:n):使用 n 个线程进行复制(默认 8,最大 128),极大提升大量小文件复制速度。

断点续传 (/Z):在中断后可以重启复制过程,而不是重新开始。

增量复制 (/XO):仅复制源中比目标更新的文件。

包含属性 (/COPYALL):复制所有文件信息(数据、属性、时间戳、权限、所有者、审核信息)。

排除文件 (/XF) / 排除目录 (/XD):精细控制不同步的文件或目录。

日志记录 (/LOG+:file):将输出追加到日志文件,便于审计。

试运行 (/L):只列出要执行的操作,而不会真正执行。用于测试命令是否按预期工作,非常重要!

使用场景:

自动化部署:将构建输出目录同步到测试或生产服务器。

创建增量备份:仅备份自上次备份后更改过的文件。

同步项目目录:排除 node_modules, .git 等目录,仅同步源码。

大文件或大量文件传输:利用多线程和断点续传保证效率和可靠性。

示例:

:: 【经典用法】镜像同步源目录到目标,排除.git文件夹,使用多线程

robocopy C:\MyProject D:\Backup\MyProject /MIR /MT:16 /XD .git /LOG+:deploy.log

:: 【安全做法】先试运行,确认会删除哪些文件

robocopy C:\source D:\backup /MIR /L

:: 【增量备份】仅复制新文件,并保留所有属性和权限

robocopy C:\Data D:\Backup\Data /E /COPYALL /XO /MT:8

:: 【网络复制】使用可重启模式复制大文件

robocopy \\server\share\largefile.iso C:\Downloads /Z /MT:4

2. forfiles - 批量文件操作

用于批量选择文件并对每个文件执行指定的命令。它是 CMD 自带的用于批量处理的强大工具。

关键参数:

/p <目录>:指定搜索的起始目录。

/m <搜索模式>:例如 *.log, *.tmp。

/s:在子目录中递归搜索。

/d [+|-]<日期>:按最后修改日期选择文件(+ 表示之后,- 表示之前)。

/c "<命令>":对每个找到的文件执行的命令。使用 @file, @fname, @ext 等变量代表文件属性。

使用场景:

批量清理:自动删除超过一定天数的临时文件或日志文件。

批量重命名/处理:对一组文件执行任何命令。

归档旧文件:将特定日期之前的文件移动到备份位置。

示例:

:: 【清理】递归删除当前目录及子目录中7天前的所有.tmp文件

forfiles /p . /s /m *.tmp /d -7 /c "cmd /c del @path"

:: 【备份】将30天前的所有.log文件复制到备份目录(保留目录结构较复杂,需其他命令辅助)

forfiles /p C:\App\Logs /s /m *.log /d -30 /c "cmd /c copy @path D:\Backup\Logs\"

:: 【列出】列出超过100MB的文件(需与dir结合,forfiles本身不查大小)

dir /s * | findstr "\.log$" | forfiles ...

:: 【演示】显示每个.txt文件的文件名和大小(使用变量)

forfiles /m *.txt /c "cmd /c echo File: @fname, Size: @fsize bytes"

3. icacls - 显示或修改文件/目录的访问控制列表

用于查看和修改文件及文件夹的NTFS权限。这对于脚本化权限管理至关重要。

关键命令:

icacls <文件名>:显示文件的权限。

icacls <文件名> /grant <用户/组>:<权限>:授予权限(如 (F)-完全控制, (M)-修改, (RX)-读取和执行, (R)-读取)。

icacls <文件名> /remove <用户/组>:移除指定用户/组的权限。

icacls <目录> /t:递归处理所有子目录和文件。

icacls <目录> /reset:用从父目录继承的默认权限替换所有显式权限。

使用场景:

在部署脚本中为应用程序池身份或服务账户设置对特定目录的写权限。

在自动化流程中重置或修复文件权限。

检查共享目录上的权限设置。

示例:

:: 查看当前目录的权限

icacls .

:: 【重要】授予 IIS_IUSRS 组对 App_Data 目录的修改权限(递归)

icacls C:\MyWebApp\App_Data /grant "IIS_IUSRS":(M) /t

:: 移除某个用户对 file.txt 的所有权限

icacls secretfile.txt /remove "domain\username"

:: 将目录树权限重置为从父目录继承

icacls C:\CorruptedPermissions /reset /t

4. attrib - 查看或更改文件属性

用于显示或更改文件的存档、只读、系统和隐藏属性。

关键属性:

+R 或 -R:设置/清除只读属性。

+H 或 -H:设置/清除隐藏属性。

+S 或 -S:设置/清除系统属性。

+A 或 -A:设置/清除存档属性(备份软件用它来识别更改过的文件)。

/S:递归处理当前目录及其所有子目录中的文件。

/D:也处理目录(通常与 /S 一起使用)。

使用场景:

在脚本中批量隐藏或取消隐藏文件。

在复制或删除文件前,移除只读属性。

清理版本控制目录(如 .git)时,可能需要先修改隐藏和只读属性。

示例:

:: 查看当前目录下所有文件的属性

attrib

:: 给所有.dll文件添加只读属性

attrib +R *.dll

:: 【递归】移除temp文件夹及其子目录中所有文件和文件夹的隐藏和只读属性

attrib -H -R /S /D C:\temp\*

:: 为目录添加隐藏属性

attrib +H my_secret_folder

5. mklink - 创建符号链接(Symbolic Links)和硬链接

在 Windows Vista 及更高版本中可用。它创建指向文件或目录的指针,而不是副本,非常节省空间且便于管理。

关键参数:

mklink /D <链接名称> <目标路径>:创建目录符号链接(类似 Unix 的软链接)。

mklink /H <链接名称> <目标路径>:创建硬链接(仅适用于文件)。

mklink /J <链接名称> <目标路径>:创建目录联接(Junction Point,一种旧的软链接形式,兼容性更好)。

使用场景:

库(Lib)管理:将一个公共库链接到多个项目中,无需复制,一处更新,处处生效。

模拟目录结构:在需要特定路径的程序中,创建一个指向真实数据位置的链接。

节省空间:将大型、不常更改的依赖项(如 node_modules)链接到多个项目中(需谨慎)。

示例(需要管理员权限):

:: 创建一个目录符号链接,将项目的“libs”文件夹指向一个公共库目录

mklink /D C:\MyProject\libs D:\SharedLibraries\common

:: 为一个大文件创建一个硬链接(两个文件名指向磁盘上的同一数据)

mklink /H large_file_v2.iso large_file.iso

:: 创建一个目录联接(Junction)

mklink /J C:\AppData\MyApp D:\VolatileData\MyApp

3.2 命令速查表

命令核心功能程序员首选场景robocopy高性能、可靠的复制与同步部署、备份、镜像同步forfiles基于条件的批量文件处理日志轮替、清理旧文件icacls精细的 NTFS 权限管理自动化配置应用目录权限attrib查看和修改文件属性批量处理隐藏/只读文件mklink创建符号链接和硬链接管理共享依赖、模拟目录结构

相关画作

仙剑奇侠传6怎么样 3DM详细图文评测
365bet体育注册开户

仙剑奇侠传6怎么样 3DM详细图文评测

📅 07-25 👁️ 8153
哈尔滨集训画室排名前十位有哪些
365彩票最专业的

哈尔滨集训画室排名前十位有哪些

📅 10-05 👁️ 4342
商丘这一湿地公园成奇珍鸟类栖息地
365bet体育注册开户

商丘这一湿地公园成奇珍鸟类栖息地

📅 07-27 👁️ 1026