Добавить путь к файлу CSV, который содержит имя файла - PullRequest
0 голосов
/ 11 марта 2019

Я хотел бы добавить полный путь к файлам в CSV, который содержит имена файлов.

Итак, в CSV у меня есть:

file1.txt file2.txt

Экспорт CSV должен выглядеть следующим образом:

file1.txt;c: /temp/file1.txt file1.txt;c: /temp/file1.txt

Я попробовал следующее:

$csv = Import-Csv <location csv>


    $allItems = Get-ChildItem -Recurse <location folders/files>
    $fullname = @()

    foreach ($item in $csv)
    {
      $fullname += $a | Where-Object {$_.Name -eq $file} | Select-Object -ExpandProperty Fullname
    }

1 Ответ

0 голосов
/ 11 марта 2019

Если ваш входной файл CSV выглядит следующим образом:

"FileName"
"file1.txt"
"file2 with spaces.txt"
"some other file.blah"

, тогда вы можете использовать $files = (Import-Csv <location csv>).FileName, чтобы получить массив строк имен файлов, которые вы ищете.

If (судя поВаш комментарий) входной файл - это отдельная строка с именами файлов, разделенными точками с запятой ;. Это путь:

$files = (Get-Content <location csv> -Raw) -split ';'

Используя этот массив имен файлов, вы можете сделать следующее:

$result = @{}
Get-ChildItem -Path $searchPath -Recurse -File | ForEach-Object {
    if ($files -contains $_.Name) {
        if ($result.ContainsKey($_.Name)) {
            $result[$_.Name] += (';{0}' -f $_.FullName)
        }
        else {
            $result.Add($_.Name, $_.FullName)
        }
    }
}
# convert the hashtable to an array of PSCustomObjects and export to csv
$result.Keys | 
    ForEach-Object { [PSCustomObject]@{ FileName = $_ ; FullName = $result.$_ }} | 
    Export-Csv -Path $output -NoTypeInformation -Force

Предположим, что ваш путь поиска включает в себя следующее:

D:\TEST
|   file1.txt
|   file2 with spaces.txt
|   some other file you are not interested in.txt
|
\---subfolder
        file2 with spaces.txt

Тогда будет выведен CSV-файл из приведенного выше кода:

"FileName","FullName"
"file2 with spaces.txt","D:\Test\file2 with spaces.txt;D:\Test\subfolder\file2 with spaces.txt"
"file1.txt","D:\Test\file1.txt"

Надеюсь, что это поможет

...