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 命令使用正則表達是匹配,只需要將要替換的文件名覆蓋,后綴保持不變。