Windows下如何将多文件夹中的指定文件批量复制到新文件夹(含list.txt场景)
Windows下如何将多文件夹中的指定文件批量复制到新文件夹(含list.txt场景)
嘿,我来帮你搞定Windows下的批量文件复制问题,分两种场景给你讲得明明白白👇
场景1:从层级文件夹按名称排序复制指定文件
如果你的需求是从多层嵌套的源文件夹里,把按名称升序排列的特定文件(比如你举例的file1a、file1aa、file1aaa)复制到New Folder,可以这么操作:
手动快速法(适合少量文件)
- 打开源文件夹的最上层目录,点击顶部的「名称」列让文件按名称升序排列
- 按住Ctrl键逐个选中你要的file1a、file1aa、file1aaa,右键复制,再打开
New Folder右键粘贴就搞定了
命令行高效法(适合批量/重复操作)
用命令提示符(CMD)
假设你的源文件夹根目录是D:\Source,目标文件夹是D:\New Folder,直接在CMD里运行这条命令(记得替换成你自己的路径):
for /r "D:\Source" %f in (file1a* file1aa* file1aaa*) do copy "%f" "D:\New Folder\"
如果你的文件是特定扩展名,比如都是txt,就写成file1a.txt file1aa.txt file1aaa.txt更精准。
用PowerShell
要是你习惯用PowerShell,这条命令能帮你按名称升序筛选并复制:
Get-ChildItem -Path "D:\Source" -Recurse -Include file1a*,file1aa*,file1aaa* | Copy-Item -Destination "D:\New Folder"
如果想对每个子文件夹都取名称升序的前3个文件,就用这个脚本:
Get-ChildItem -Path "D:\Source" -Directory | ForEach-Object { Get-ChildItem -Path $_.FullName -File | Sort-Object Name | Select-Object -First 3 | Copy-Item -Destination "D:\New Folder" }
场景2:通过list.txt批量复制跨文件夹的指定文件
这应该是你更关心的真实场景——手里有个list.txt,里面列了所有要复制的文件的完整路径,需要把这些分散在不同文件夹里的文件批量搬到新文件夹,这两种方法超好用:
方法1:命令提示符(CMD)
首先确保list.txt里每一行都是一个文件的绝对路径,比如:
D:\Folder1\report.txt D:\Folder2\sub\photo.jpg D:\Folder3\docs\data.xls
然后打开CMD,运行这条命令(替换成你自己的list路径和目标文件夹路径):
for /f "delims=" %i in (D:\your-path\list.txt) do copy "%i" "D:\New Folder\" /y
加/y是为了自动覆盖目标文件夹里的重名文件,要是你想每次都确认,去掉/y就行。
方法2:PowerShell脚本
这个方法更稳妥,会帮你检查文件是否存在,还会输出复制状态:
Get-Content -Path "D:\your-path\list.txt" | ForEach-Object { if (Test-Path $_) { Copy-Item -Path $_ -Destination "D:\New Folder" -Force Write-Host "已成功复制:$_" } else { Write-Host "⚠️ 警告:文件不存在,已跳过:$_" } }
这里的-Force同样是自动覆盖重名文件,不需要的话删掉就行。
小提醒避坑
- 所有路径尽量用绝对路径,别用相对路径,避免因为当前工作目录不对导致找不到文件
- 确保你有源文件的读取权限和目标文件夹的写入权限
- 如果文件路径里有空格,一定要用双引号把路径包起来,不然命令会报错
备注:内容来源于stack exchange,提问作者Cahyo Permadi




