Powershell 重名文件方法
前言
Powershell 是Windows10 自带的可编程控制台,通过命令行可以实现复杂功能,最近由于工作需要,要将位于不同目录下面的文件以统一的方式命名。具体要求是学号-姓名-文章标题.docx,实现思想为:1. 将目录下面的文件名存储到变量$data里面,将所有学生信息(学号、姓名、文章题目)做成csv 文件,最后使用管道方式实现。
实现代码:
1. list.csv 文件包含所有学生信息
id,name,sex,teacher,class,title
2. $data 变量存储所有目录下的原始文件信息
$data = ls -Recurse -File -Include *.docx,*.doc |Sort-Object
注: -include 参数可以指定多个不同文件类型,-filter 只能指定一个。
3. 使用管道命令处理文件名
使用管道首先导入list.csv ,然后在$data 中使用-match 方法匹配含有学号的记录,最后使用 -replace 替换文件名中名称部分,后缀保持不变。
Import-Csv list.csv | ForEach-Object { if ($a=$data -match $_.id) { Rename-Item $a.fullname -newname ($a.name -replace'.*\.' , ($_.id+'-'+$_.name+'-'+$_.title'.'))} }
PS:
$a=$data -match $_.id 将目录下所有文件中与list.csv 中匹配的记录找出到,使用了foreach-object 遍历list 的方法,每次匹配到一条记录。(请保证每个文件名含有唯一id)
rename-item 命令使用正则表达是匹配,只需要将要替换的文件名覆盖,后缀保持不变。