【问题标题】:Powershell Rename files if name contains <string>如果名称包含 <string>,则 Powershell 重命名文件
【发布时间】:2020-01-24 22:33:06
【问题描述】:

如果文件名包含我的 CSV 文件中的唯一 ID,我会尝试在目录中的文件名前添加 PatientOrderNumber。我已经尝试了 -like 和 -contains 参数,但没有成功。

这是我的代码:

$csvPath = "C:\Users\dougadmin28\Desktop\Test\1bs4e.csv"
## Variable to hold path of Files that need to be renamed ##
$filePath = "C:\Users\dougadmin28\Desktop\Node Modify File Name App\pdfs" 

$csv = Import-Csv $csvPath #| Select-Object -Property PatientOrderNumber, FileID, DocumentID, LastName, FirstName|Export-Csv 'C:\Users\dougadmin28\Desktop\Node Modify File Name App\documents.csv'

$files = Get-ChildItem $filePath 


    foreach ($item in $csv){  



            foreach($file in $files)  {     
               if($file.FullName -contains '*$item.DocumentID*') {

                Rename-Item $file.FullName -NewName "$($item.PatientOrderNumber+"_"+($item.FileID)+'_'+($item.DocumentID)+'_'+($item.LastName)+'_'+($item.FirstName)+($file.extension))" 

            }#End forEach

        }#End if

    } #End forEach```

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    tl;dr

    代替:

    $file.FullName -contains '*$item.DocumentID*' # WRONG
    

    使用:

    $file.FullName -like "*$($item.DocumentID)*"
    

    注意使用" 代替' 和属性访问表达式周围的$(...)


    至于你尝试了什么

    $file.FullName -contains '*$item.DocumentID*'

    • -contains 测试数组值 LHS 中 RHS 的 数组成员资格,它不执行子字符串匹配。

      • 请参阅this answer,了解 PowerShell 的 -contains 运算符和 String.Contains() .NET 方法之间的区别。
    • '...' 字符串采用字面意思(逐字),因此不执行扩展(插值); "..."(可扩展字符串)必须用于字符串插值。

    • 在可扩展字符串中,只有 简单 变量引用(例如,$item)可以按原样嵌入;任何更复杂的内容,例如涉及属性访问表达式(例如$item.DocumentID),都需要包含在$(...)中,子表达式运算符。

      • 请参阅this answer,了解 PowerShell 中的字符串扩展(插值)概述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      相关资源
      最近更新 更多