Powershell-通过';文件名';并基于CSV进行重命名

Powershell-通过';文件名';并基于CSV进行重命名,csv,powershell,Csv,Powershell,我在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

我在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:\Desktop\directoryname.txt"
注意:在我的示例中,CSV文件的路径在我的桌面上,但在您的桌面上可能不同

然后使用foreach循环重命名这些项

foreach ($objName in $AnyVariableName){

  Rename-Item $objName.OldName $objName.NewName

}

首先将CSV文件导入powershell

$AnyVariableName = Import-Csv "$env:USERPROFILE:\Desktop\directoryname.txt"
注意:在我的示例中,CSV文件的路径在我的桌面上,但在您的桌面上可能不同

然后使用foreach循环重命名这些项

foreach ($objName in $AnyVariableName){

  Rename-Item $objName.OldName $objName.NewName

}

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

$CSVRef = Get-Content "C:\Path\To\CSV.csv" | ConvertFrom-CSV
然后,我们将获得要更改的文件名列表,并循环遍历每个文件。从循环内部,您可以运行另一个循环,在引用列表中查找当前名称,然后将其更改为新名称

Get-ChildItem "C:\path\to\f4v\files" -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。它应该自动重命名该文件。

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

$CSVRef = Get-Content "C:\Path\To\CSV.csv" | ConvertFrom-CSV
然后,我们将获得要更改的文件名列表,并循环遍历每个文件。从循环内部,您可以运行另一个循环,在引用列表中查找当前名称,然后将其更改为新名称

Get-ChildItem "C:\path\to\f4v\files" -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:\Temp\Filename.txt"

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

结合这两个例子非常有效

$CSVRef = Import-Csv "C:\Temp\Filename.txt"

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

嗨,到目前为止你试过什么?你能给你的问题加上一些代码吗?答案并不那么复杂。您知道如何在PowerShell中导入CSV文件吗?你知道如何使用每个对象的
吗?
?可能的重复:鉴于我对PS的基本理解,我没有任何有用的代码。任何代码示例都将不胜感激。嗨,到目前为止你尝试了什么?你能给你的问题加上一些代码吗?答案并不那么复杂。您知道如何在PowerShell中导入CSV文件吗?您知道如何使用每个对象的
吗?
?可能的重复:鉴于我对PS的基本了解,我没有任何有用的代码。任何代码示例都将不胜感激。