使用CSV附加文件名

时间:2018-09-04 16:21:06

标签: powershell

我正在尝试重命名与csv第一列中的值匹配的文件,将第三列中的值添加到文件名的开头,而其余文件名保持不变。这是我到目前为止所拥有的。我似乎无法弄清楚重命名项。

# Common Paths
$PathRoot = "C:\Temp\somefiles" #Where the files are to rename

# Get csv file
$ClientAccounts = Import-CSV -path "\\server\some\path\to\csv\file.csv"

# Get each file and rename it
ForEach($row in $ClientAccounts) 
{
    $CurrentClientTaxId = $row[-1].TaxId
    $CurrentClientName = $row[-1].ClientName 

    #loop through files

    $FileExists = Test-Path -Path "$PathTotal\*$CurrentClientLB_Number*" #See if there is a file.

    If ($FileExists -eq $true) #The file does exist.
    {

        #ReName File
        Rename-Item -Path $PathRoot -NewName {$CurrentClientName + " " + $_.name}
    }
}

1 个答案:

答案 0 :(得分:0)

让我们假设您的CSV文件看起来与此类似:

"LB_Number","TaxId","ClientName"
"987654","12345","Microsoft"
"321456","91234","Apple"
"741852","81234","HP"

第1列中现有文件名的一部分与之匹配
第3列中的客户端名称要放在文件名之前

然后您的功能可能是这样的:

# Common Paths
$PathRoot = "C:\Temp\somefiles" # Where the files are to rename

# Get csv file
$ClientAccounts = Import-CSV -path "\\server\some\path\to\csv\file.csv"

# Loop through all clients in the CSV
foreach($client in $ClientAccounts) {
    $CurrentClientLB_Number = $client.LB_Number
    $CurrentClientTaxId     = $client.TaxId       # unused...??
    $CurrentClientName      = $client.ClientName 

    # get the file(s) using wildcards (there can be more than one)
    # and rename them
    Get-ChildItem -Path "$PathRoot\*$CurrentClientLB_Number*" -File | ForEach-Object {
        $_ | Rename-Item -NewName ($CurrentClientName + " " + $_.Name) 
    }

    # Curly braces work also, although this is not very common practice:
    # Get-ChildItem -Path "$PathRoot\*$CurrentClientLB_Number*" -File | 
    #     Rename-Item -NewName { ($CurrentClientName + " " + $_.Name) }
}

我将-File参数与Get-ChildItem一起使用,因此该函数将仅返回文件;不是目录。如果您使用的是PowerShell版本2.0,则需要将其替换为| Where-Object { !$_.PSIsContainer }

相关问题