Переименование файла при копировании - PullRequest
1 голос
/ 04 ноября 2019

В настоящее время я читаю файл CSV и создаю структуру папок, зависящую от значений столбцов, и копирую файлы в эти подкаталоги. В настоящее время я пытаюсь изменить это, чтобы имя файла изменялось при копировании на DotDate_CurrentName (DotDate - это столбец в csv).

##Pull the CSV & Create Directories
Echo "Getting root directory for CSV File" #via root variable

#import the csv file and loop through the results
Echo "Importing CSV file"
Import-Csv -Path "$($FilePath)\$($DateStr)_$($TimeStr)_Export.csv" | ForEach-Object {
    Echo "Building subpath and fullpath strings"
    $subPath = [System.IO.Path]::Combine($_.'ID' + '_' + $_.'First Name' + '_' + $_.'Surname', $_.Area, $_.SubArea, $_.'DotDate')
    $fullPath = Join-Path -Path $rootPath -ChildPath $subPath
    "Test fullpath and build path from strings"
    if (!(Test-Path -Path $fullPath -PathType Container)) {
        New-Item -Path $fullPath -ItemType Directory | Out-Null
    }
    Copy-Item -Path $_.'Document File Path' -Destination $fullPath
}

1 Ответ

1 голос
/ 04 ноября 2019

Вам не нужно копировать, а затем переименовать;Вы можете сделать оба в одном действии. Чтобы добавить DotDate, вы можете сделать что-то вроде этого:

#requires -Version 4
@(Import-Csv -Path "$FilePath${DateStr}_${TimeStr}_Export.csv").ForEach{
    $path = [IO.Path]::Combine(
        $rootPath,
        ('{0}_{1}_{2}' -f $_.ID, $_.'First Name', $_.Surname),
        $_.Area,
        $_.SubArea,
        $_.DotDate
    )

    if (-not (Test-Path -Path $path -PathType Container)) {
        New-Item -Path $path -ItemType Directory >$null
    }

    $copy = [IO.FileInfo]$_.'Document File Path'
    $copy | Copy-Item -Destination "$path\$($_.DotDate)_$($copy.Name)"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...