【问题标题】:Powershell - find file by 'file name' and rename based on CSVPowershell - 按“文件名”查找文件并根据 CSV 重命名
【发布时间】:2015-12-15 11:22:35
【问题描述】:

我在 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 文件...查找每个文件并替换。

任何想法将不胜感激。

【问题讨论】:

  • 嗨,到目前为止,您尝试了什么?您能否在您的问题中添加一些代码?答案并不复杂。你知道如何在 PowerShell 中导入 CSV 文件吗?你知道Foreach-Object怎么用吗?
  • 鉴于我对 PS 的基本了解,我没有任何有用的代码。任何代码示例将不胜感激。

标签: csv powershell


【解决方案1】:

首先将您的 CSV 文件导入到 powershell 中

$AnyVariableName = Import-Csv "$env:USERPROFILE:\Desktop\directoryname.txt"

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

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

foreach ($objName in $AnyVariableName){

  Rename-Item $objName.OldName $objName.NewName

}

【讨论】:

    【解决方案2】:

    一种方法是创建两个列表并循环遍历每个列表。 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。它应该会自动重命名文件。

    【讨论】:

      【解决方案3】:

      结合这两个例子效果很好

      $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
                      }
              }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-10-25
        • 2017-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-05
        • 2018-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多