用Powershell批量重命名文件(夹)
因为整理文件的时候有一个需求,需要将大量文件夹重命名为pixiv[xxx]
这样的格式,手动一个个改太花费时间,于是糊了个 ps1 script 来做这件事情。
代码如下:
get-childItem . | foreach-Object -Begin {
$count = Read-Host -Prompt "Start";
$count = [int]$count;
} -Process {
move-Item $_.fullname "pixiv[$count]";
$count++
}
其中,它通过 get-childItem
命令获取当前目录下的所有文件,然后通过 foreach-Object
命令对每个文件执行指定的操作。
在 foreach-Object
命令中, -Begin
子命令用于在处理文件之前执行一段代码,它会提示用户输入一个整数作为开始编号。用户输入的整数被赋值给 $count
变量,该变量用于记录文件编号。
接下来, -Process
子命令用于处理每个文件,它会执行两个操作:
- 通过
move-Item
命令对文件重命名,将文件名修改为pixiv[$count]
。这里的$_.fullname
指的是文件的完整路径。 - 将
$count
变量的值加 1 ,用于计算下一个文件的编号。
该代码可能有如下缺陷:
- 没有检查是否存在同名文件,如果存在同名文件可能会导致覆盖,丢失文件。
- 没有保留原来文件的扩展名,导致文件可能无法正常打开。
$count
变量是从用户输入中获取的,用户可能输入非法值,导致代码执行异常。- 没有考虑特殊字符,例如文件名中包含空格或其他不合法字符,可能导致文件重命名失败。
- 没有考虑文件名过长的情况,如果文件名超过了系统允许的最大长度,也可能导致文件重命名失败。
- 没有处理文件所属权限问题,如果当前用户没有重命名文件的权限,也可能导致文件重命名失败。
在我的实际使用中,这个 script 还有个问题:
如果要被重命名的文件或者目录的名字有方括号的话,他就会爆炸。
我真的很想吐槽 Powershell 怎么自己通过命令获取的数据他自己不给自己转义的…………
不过在我的应用场景里,我不需要给有方括号的文件重命名,所以就不管他了。