Powershell - 通过"文件名"查找文件并根据CSV重命名



我在Windows目录中有一组文件(OldName),我想根据以下CSV文件重命名(NewName):

OldName,NewName
Sources/texas play_PGC_Cpgc_entryPoint_Cbp_1.f4v,01 Texas Play.f4v
Sources/texas play_PGC_Cpgc_entryPoint_Dbp_1.f4v,02 First Song.f4v
Sources/texas play_PGC_Cpgc_entryPoint_Ebp_1.f4v,03 Yellow Rose.f4v

我不知道如何循环通过CSV文件。。。查找每个文件并替换。

任何想法都将不胜感激。

首先将CSV文件导入powershell

$AnyVariableName = Import-Csv "$env:USERPROFILE:Desktopdirectoryname.txt"

注意:在我的示例中,CSV文件的路径在我的桌面上,但在您的桌面上可能有所不同。

然后使用foreach循环将项目重命名为

foreach ($objName in $AnyVariableName){
  Rename-Item $objName.OldName $objName.NewName
}

一种方法是创建两个列表并在每个列表中循环。CSV文件将是一个参考列表,因此我们将获取内容并将其从CSV转换,然后将其存储在变量中

$CSVRef = Get-Content "C:PathToCSV.csv" | ConvertFrom-CSV

然后,我们将获得您想要更改的文件名的列表,并循环浏览每个文件。在循环内部,您可以运行另一个循环,在引用列表中查找当前名称,然后将其更改为新名称。

Get-ChildItem "C:pathtof4vfiles" -Filter *.f4v | ForEach-Object {
    #Grab the current item in a variable to access it within the second loop
    $CurrentFile = $_
    $CSVRef | ForEach-Object {
        if ($CurrentFile.Name -ilike $_.OldName) {
            Rename-Item $CurrentFile.FullPath $_.NewName        
        }
    }
}

因此,在第二个循环中,我们尝试将文件名与CSV文件列表中的每个"OldName"项进行比较。如果OldName与当前循环文件中的某个位置匹配,则运行Rename Item并为其提供NewName。它应该自动重命名文件。

将这两个例子结合起来可以很好地实现

$CSVRef = Import-Csv "C:TempFilename.txt"
Get-ChildItem "C:TempFileFolder" -Filter *.pdf | ForEach-Object {
    $CurrentFile = $_
    ForEach ($objName in $CSVRef) {
            if ($CurrentFile.Name -ilike $objName.OLDNAME) {
                    Rename-Item $CurrentFile.FullName $objName.NEWNAME
                }
        }
}

经过一点修改后,工作正常

清除主机

$CSVRef=获取内容";C: \Users\username\Desktop\test.csv"|转换自CSV

获取子项"C: \用户\用户名\桌面\测试"|ForEach对象{$CurrentFile=$_

$CSVRef | ForEach-Object {
    If ( $CurrentFile.Name -like $_.OldName ) {
         Rename-Item $CurrentFile.FullName $_.NewName
         }
    }

}

最新更新