Если ваш входной файл 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"
Надеюсь, что это поможет