如何用文件夹B的文件名批量重命名文件夹A的文件?(Win10/Debian)
Windows 10 实现方法
- 打开PowerShell,切换到包含两个目标文件夹的上级目录(例如两个文件夹都在
D:\PicSet下,就输入cd D:\PicSet) - 运行以下脚本,记得把
.\FolderA和.\FolderB替换成你实际的文件夹名称:
$filesA = Get-ChildItem -Path ".\FolderA" | Sort-Object Name $filesB = Get-ChildItem -Path ".\FolderB" | Sort-Object Name for ($i=0; $i -lt $filesA.Count; $i++) { $newName = Join-Path -Path $filesA[$i].DirectoryName -ChildPath $filesB[$i].Name Rename-Item -Path $filesA[$i].FullName -Destination $newName }
- 补充:如果想保留FolderA文件的原扩展名(比如FolderA是.png,FolderB是.jpg,只替换文件名不换扩展名),把脚本里的
$newName行改成:
$newName = Join-Path $filesA[$i].DirectoryName ($filesB[$i].BaseName + $filesA[$i].Extension)
Debian(Linux)实现方法
脚本方式(适合重复操作)
- 打开终端,切换到两个文件夹的上级目录
- 创建并运行以下bash脚本:
#!/bin/bash # 获取按名称排序的文件列表 mapfile -t filesA < <(ls -1 ./folderA | sort) mapfile -t filesB < <(ls -1 ./folderB | sort) # 逐一重命名 for ((i=0; i<${#filesA[@]}; i++)); do old="./folderA/${filesA[$i]}" new="./folderA/${filesB[$i]}" mv "$old" "$new" done
- 保存为
rename_files.sh,执行chmod +x rename_files.sh赋予执行权限,再运行./rename_files.sh即可。
单行命令(适合临时操作)
直接在终端输入以下命令,替换./folderA和./folderB为实际路径:
paste <(ls -1 ./folderA | sort) <(ls -1 ./folderB | sort) | while read old new; do mv "./folderA/$old" "./folderA/$new"; done
- 补充:如果要保留folderA文件的原扩展名,把单行命令里的
"./folderA/$new"改成"./folderA/$(basename "$new" ."${new##*.}")${old##*.}"
内容的提问来源于stack exchange,提问作者Zeek Aran
相关产品推荐
相关产品推荐

