惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
博客园_首页
博客园 - 聂微东
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
The Cloudflare Blog
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
D
Docker
人人都是产品经理
人人都是产品经理
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
Microsoft Azure Blog
Microsoft Azure Blog
Recent Announcements
Recent Announcements
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
B
Blog RSS Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
Jina AI
Jina AI
博客园 - Franky
D
DataBreaches.Net

木灵鱼儿

VS Code BYOK 配置生成器 - 木灵鱼儿 2026 最新禁止浏览器密码管理器弹出教程 - 木灵鱼儿 16 NestJS 企业级 RBAC 权限控制体系 - 木灵鱼儿 15 NestJS 统一响应体设计(信封模式) - 木灵鱼儿 14 NestJS 生产级错误过滤方案 - 木灵鱼儿 13 NestJS 集成 TypeORM 完全指南 - 木灵鱼儿 12 NestJS 集成 Prisma ORM 完全指南(Prisma v7) - 木灵鱼儿 11 NestJS 注册与登录接口的密码安全设计 - 木灵鱼儿 10 NestJS JWT 身份验证完全指南 - 木灵鱼儿 09 NestJS 使用 @nestjs-swagger 生成 API 文档 - 木灵鱼儿 08 NestJS DTO 校验、Entity 脱敏与 Mapped Types 实战(TypeORM & Prisma) - 木灵鱼儿 07 NestJS 使用Caching缓存(cache-manager) - 木灵鱼儿 06 NestJS 使用Redis - 木灵鱼儿 05 Nestjs 高性能构建之SWC与Typescript7选型 - 木灵鱼儿 04 Nestjs API版本控制策略 - 木灵鱼儿 NestJS 正确处理日志 - 木灵鱼儿 NestJS config模块扩展用法.md - 木灵鱼儿 宝塔如何给网站一次性绑定两个域名 - 木灵鱼儿 NestJS 环境变量与配置管理(Config 模块) - 木灵鱼儿 如何使用 FNM 自动切换不同项目的 Node.js 版本 - 木灵鱼儿 如何使用 Node.js Corepack 自动锁定和切换项目包管理器版本 - 木灵鱼儿 日常开发中的 void:从忽略 Promise 到理解 JavaScript 历史写法 - 木灵鱼儿 git 进阶指南:如何用 Git Worktree 完美应对紧急 Bug 与多分支联调 - 木灵鱼儿 了解并解决 Git 大小写“无感”的幽灵 Bug - 木灵鱼儿 从零开始:手把手教你封装一个企业级 Axios 请求模块 - 木灵鱼儿 03-Vue Query 高级进阶:应对复杂业务场景的硬核套路 - 木灵鱼儿 02-Vue Query 快速入门:从零构建你的第一个声明式查询 - 木灵鱼儿 01-异步状态管理新范式:为什么在 Vue 3 中使用 vue-query? - 木灵鱼儿 git 如何将所有历史提交合并为一条 - 木灵鱼儿 x86多网口软路由+pve+爱快ikuai+iStoreOS实现组网和翻墙 - 木灵鱼儿
Windows 下如何快速复制目录的同时排除指定的目录和文件 - 木...
木灵鱼儿 · 2026-06-03 · via 木灵鱼儿

前言

今天在开发的时候,同事让我启一个前端服务,他们要在本地测试,但是呢,我又需要改代码,如果频繁的触发热更新,会导致他们测试的页面刷新,影响测试效率,所以我只能再拉一个项目仓库,在另一个目录中开发,这样就避免开发过程中频繁的更新了。毕竟已经是独立项目文件了。

但是呢,有一点我很不爽,就是当下的AI开发环境下,其实项目目录存在很多没有传到git的纯本地AI文件,比如IDE的配置文件、skills等,加上现在AI的插件好几个,这样的目录或者文件存在很多份,而重新git拉取的项目又不会有这些文件,让我一个个复制过去还挺麻烦的,所以研究下了,发现windows其实有一个很好用的命令:robocopy,可以很好的解决这个问题。

为此写个教程,教大家如何使用robocopy来快速复制目录和文件。

robocopy 的基本用法

robocopy 是 Windows 系统内置的命令行工具,无需额外安装,打开「命令提示符(CMD)」或「PowerShell」即可使用。

它的基本语法是:

robocopy 源文件夹 目标文件夹 [文件] [选项]

最常用的复制命令如下:

robocopy "源文件夹" "目标文件夹" /E

其中 /E 表示复制所有子目录(包括空目录)。如果你只想复制非空的子目录,可以用 /S

要排除指定的目录,需要加上 /XD 参数(eXclude Directories):

robocopy "D:\project" "E:\backup" /E /XD node_modules

上面这条命令的含义是:把 D:\project 复制到 E:\backup,但跳过名为 node_modules 的目录。

几个常用参数小结:

参数作用
/E复制所有子目录(含空目录)
/S复制所有子目录(不含空目录)
/XD排除指定的目录
/XF排除指定的文件
/MIR镜像复制(让目标与源完全一致,慎用,会删除目标中多余的文件)

关键注意点:源文件夹与目标文件夹的关系

这是使用 robocopy 最容易踩坑的地方,一定要搞清楚。

robocopy 复制的是「源目录里面的内容」,而不是「源目录本身」。

举个例子,假设我们有一个目录 D:\a,里面有 1.txt2.txt 两个文件。我们想把它复制到「新建文件夹」E:\新建文件夹

情况 1:目标写成「新建文件夹」

robocopy "D:\a" "E:\新建文件夹" /E

执行结果:

E:\新建文件夹\1.txt
E:\新建文件夹\2.txt

可以看到,是把 a 里面的内容直接复制进了「新建文件夹」,并没有保留 a 这一层目录。

情况 2:想保留 a 目录本身

如果你希望复制后的结果是 E:\新建文件夹\a,也就是把整个 a 文件夹搬过去,那么目标路径就要写到 a 这一层:

robocopy "D:\a" "E:\新建文件夹\a" /E

执行结果:

E:\新建文件夹\a\1.txt
E:\新建文件夹\a\2.txt
一句话记住:robocopy 复制的是源目录的「内容」,目标路径写到哪一层,内容就落在哪一层。 想保留源目录名,就在目标路径里把这一层补上。

排除多个目录,以及同时排除文件

实际场景中,要排除的往往不止一个目录,有时还要连某些文件一起排除。这两个需求都很好满足。

1. 排除多个目录

/XD 后面可以直接跟多个目录名,用空格隔开:

robocopy "D:\project" "E:\backup" /E /XD node_modules .git dist

上面这条命令会同时排除 node_modules.gitdist 三个目录。

需要注意的是,/XD 后面只写目录名时,会排除所有同名目录(无论它在第几层)。如果你只想排除某个特定路径下的目录,可以写完整的绝对路径:

robocopy "D:\project" "E:\backup" /E /XD "D:\project\dist"

这样就只排除根目录下的 dist,而不会影响子目录里同名的 dist

2. 同时排除文件

排除文件用 /XF 参数(eXclude Files),同样支持多个,并且支持通配符:

robocopy "D:\project" "E:\backup" /E /XF *.log *.tmp

这条命令会排除所有 .log.tmp 结尾的文件。

3. 目录和文件一起排除

/XD/XF 写在一起即可:

robocopy "D:\project" "E:\backup" /E /XD node_modules .git /XF *.log *.tmp

这条命令的完整含义是:

  • D:\project 的内容复制到 E:\backup
  • 排除 node_modules.git 目录
  • 排除所有 .log.tmp 文件