用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 子命令用于处理每个文件,它会执行两个操作:

  1. 通过 move-Item 命令对文件重命名,将文件名修改为 pixiv[$count]。这里的 $_.fullname 指的是文件的完整路径。
  2. $count 变量的值加 1 ,用于计算下一个文件的编号。

该代码可能有如下缺陷:

  • 没有检查是否存在同名文件,如果存在同名文件可能会导致覆盖,丢失文件。
  • 没有保留原来文件的扩展名,导致文件可能无法正常打开。
  • $count 变量是从用户输入中获取的,用户可能输入非法值,导致代码执行异常。
  • 没有考虑特殊字符,例如文件名中包含空格或其他不合法字符,可能导致文件重命名失败。
  • 没有考虑文件名过长的情况,如果文件名超过了系统允许的最大长度,也可能导致文件重命名失败。
  • 没有处理文件所属权限问题,如果当前用户没有重命名文件的权限,也可能导致文件重命名失败。

在我的实际使用中,这个 script 还有个问题:
如果要被重命名的文件或者目录的名字有方括号的话,他就会爆炸。
我真的很想吐槽 Powershell 怎么自己通过命令获取的数据他自己不给自己转义的…………
不过在我的应用场景里,我不需要给有方括号的文件重命名,所以就不管他了。