Renaming files using alternate BaseName lookup (CSV) names
我有一个导出的CSV文件,其下表如下所示:
1 2 3 | "Directory","BaseName" "E:\\Movie Files\\Movie (2000)","Movie" "E:\\Movie Files\\Movie (2001)","Movie 2" |
我的代码非常接近我想要的代码,基本上是将每个文件夹中的
它适用于第一个文件夹,但是此后的每个文件夹都使用第一个文件夹中的相同基名。它不会像我想的那样递归根目录中的每个文件夹。因此,对于Movie(2001),我最终拥有
这是尚不存在的代码:
1 2 3 4 5 | $lines = Import-Csv 'E:\\Output.csv' foreach ($line in $lines) { Get-ChildItem -Path .\\* -File -Filter '*Cover*' -Recurse | Rename-Item -NewName ($line.BaseName + '-poster.jpg') } |
如上所述的预期结果是,每个文件夹和子文件夹中的每个
感谢Ansgar的评论。它在我的实例中不起作用,它所做的是将所有文件(包括已经具有正确命名约定的文件)重命名为cover-poster.jpg,但是代码确实为我指出了有关$的正确方向line.Directory。
最终对我有用的代码是;
1 2 3 4 5 | # Renames Cover.jpg to match BaseName file with basename-poster.jpg $lines = Import-Csv 'E:\\Output.csv' ForEach ($line in $lines) { Get-ChildItem -Path $line.Directory -file -filter '*Cover*' -Recurse | Rename-Item -NewName {$line.BaseName + '-poster.jpg'} } |
您最终将所有封面都重命名为
从CSV处理目录,而不是为每个目录处理当前工作目录,然后使用管道中的当前对象(
更改此内容:
1 2 3 4 | foreach ($line in $lines) { Get-ChildItem -Path .\\* -File -Filter '*Cover*' -Recurse | Rename-Item -NewName ($line.BaseName + '-poster.jpg') } |
变成这样:
1 2 3 4 | foreach ($line in $lines) { Get-ChildItem -Path $line.Directory -File -Filter '*Cover*' -Recurse | Rename-Item -NewName {$_.BaseName + '-poster.jpg'} } |