如何根据CSV记录的路径批量移动文件,可通过bat脚本实现吗?
完全可以实现,下面给两种常用的实现方案,你可以根据自己的情况选择:
方案1:BAT批处理实现
前提条件
确保你的CSV文件保存为ANSI编码(避免中文路径乱码),将CSV文件命名为file_list.csv,和编写的BAT文件放在同一文件夹下。
代码示例
@echo off :: 切换编码为UTF-8,也可以删掉这行用系统默认编码 chcp 65001 >nul :: 跳过CSV第一行表头,按逗号分隔读取两列内容 for /f "skip=1 tokens=1,2 delims=," %%a in (file_list.csv) do ( :: 自动创建目标路径的上级目录,不存在就新建 if not exist "%%~dpb" md "%%~dpb" :: 执行移动操作,/y参数无需确认直接覆盖同名文件 move /y "%%~a" "%%~b" ) echo 全部文件移动完成 pause
如果你的文件路径里本身包含逗号,该方案适配性较差,建议使用下面的PowerShell方案。
方案2:PowerShell实现(更稳定,推荐新手使用)
PowerShell原生支持CSV解析,对特殊字符、中文路径的兼容性更好。
使用方法
新建文本文档,将下方代码粘贴进去后,保存为后缀为.ps1的文件,和你的CSV文件放在同一目录下,右键选择「使用PowerShell运行」即可。
代码示例
# 读取CSV文件,自动识别表头对应的字段 $fileList = Import-Csv -Path "file_list.csv" -Encoding UTF8 foreach ($item in $fileList) { # 提取目标文件的上级目录,不存在则自动创建 $destDir = Split-Path -Path $item.'Dest Path' -Parent if (-not (Test-Path $destDir)) { New-Item -ItemType Directory -Path $destDir -Force | Out-Null } # 执行移动操作,-Force参数自动覆盖同名文件 Move-Item -Path $item.'Source Path' -Destination $item.'Dest Path' -Force } Write-Host "批量移动操作已执行完毕" Read-Host "按回车键退出程序"
注意事项
- 两种方案执行前都建议先备份原始文件,或者先在CSV里保留2-3条测试数据跑一遍,确认路径、移动逻辑符合预期后再跑全量1500条记录
- 如果不需要覆盖目标路径下的同名文件,删掉BAT代码里的
/y参数、PowerShell代码里的-Force参数即可 - 如果你的CSV文件名不是
file_list.csv,把代码里的文件名替换成你实际的文件名即可
内容的提问来源于stack exchange,提问作者Nick Li
相关产品推荐
相关产品推荐

