如何使用CMD或PowerShell按隔2个文件的规则批量复制文件
按「复制1个跳过2个」规则批量复制文件的实现方案
该规则下会按文件排序结果选取第1、4、7、10……位的文件执行复制,不同系统的实现方法如下:
Windows 环境(PowerShell 实现)
- 先将代码中的
源文件夹路径、目标文件夹路径替换为你本地的实际路径 - 直接在PowerShell中运行如下代码即可:
# 定义源文件夹和目标文件夹路径 $sourcePath = "C:\你的\源文件夹\路径" $destPath = "C:\你的\目标文件夹\路径" # 获取源文件夹下所有文件,按文件名升序排序 $allFiles = Get-ChildItem -Path $sourcePath -File | Sort-Object Name # 遍历筛选符合规则的文件并复制 for ($i=0; $i -lt $allFiles.Count; $i+=3) { Copy-Item -Path $allFiles[$i].FullName -Destination $destPath }
- 如需调整排序规则,修改
Sort-Object后的参数即可,例如按修改时间排序改为Sort-Object LastWriteTime
Linux/macOS 环境(Bash 实现)
- 先将代码中的
/你的/源文件夹/路径、/你的/目标文件夹/路径替换为你本地的实际路径 - 直接在终端运行如下代码即可:
# 定义源文件夹和目标文件夹路径 source_path="/你的/源文件夹/路径" dest_path="/你的/目标文件夹/路径" # 按文件名升序遍历文件,每3个取第一个复制 find "$source_path" -maxdepth 1 -type f | sort | awk 'NR%3==1' | while read -r file; do cp "$file" "$dest_path" done
- 如需遍历子文件夹下的所有文件,删除
-maxdepth 1参数即可;如需调整起始复制位置,修改NR%3==1的数值即可,例如从第2个文件开始复制改为NR%3==2
操作注意事项
- 正式复制前建议先预览筛选结果,确认符合预期后再执行复制操作:
- PowerShell环境将
Copy-Item行替换为Write-Host $allFiles[$i].FullName即可打印待复制文件路径 - Bash环境将
cp "$file" "$dest_path"行替换为echo "$file"即可打印待复制文件路径
- PowerShell环境将
- 路径中如果包含空格、特殊字符,必须用引号包裹路径,避免命令识别出错
内容的提问来源于stack exchange,提问作者xXxlazharxXx
相关产品推荐
相关产品推荐

