Я снова застрял на чем-то, что должно быть таким простым.У меня есть файл CSV, в котором мне нужно сделать несколько строковых изменений и экспортировать их обратно.Данные выглядят так:
FullName
--------
\\server\project\AOI
\\server\project\AOI\Folder1
\\server\project\AOI\Folder2
\\server\project\AOI\Folder3\User
Мне нужно сделать следующее:
- Удалить «\\ сервер \ проект» из каждой строки, но оставить оставшуюся часть строки
- Удалить все строки, у которых нет папки (например, в приведенном выше примере первая строка будет удалена, а остальные три останутся)
- Удалить любую строку со словом «Пользователь»"в пути
- Добавить столбец с именем T / F со значением" FALSE "для каждой записи
Вот моя первоначальная попытка:
Get-Content C:\Folders.csv |
% {$_.replace('\\server\project\','')} |
Where-Object {$_ -match '\\'} |
#Removes User Folders rows from CSV
Where-Object {$_ -notmatch 'User'} |
Out-File C:\Folders-mod.csv
Это работает в определенной степени, за исключением того, что удаляет строку заголовка, и я не нашел способа добавить столбец с помощью Get-Content.Для этого я должен использовать Import-Csv
, что нормально, но кажется неэффективным постоянно перезагружать один и тот же файл.Поэтому я попытался переписать вышеупомянутое, используя Import-Csv
вместо Get-Content
:
$Folders = Import-Csv C:\Folders.csv
foreach ($Folder in $Folders) {
$Folder.FullName = $Folder.FullName.Replace('\\server\AOI\', '') |
Where-Object {$_ -match '\\'} |
Where-Object {$_ -notmatch 'User Files'}
}
$Folders | Export-Csv C:\Folders-mod.csv -NoTypeInformation
Я еще не добавил код для добавления нового столбца, но это сохраняет заголовок.Тем не менее, я получаю кучу пустых строк, где Where-Object
удаляет строку, и единственный способ найти способ избавиться от них - запустить выходной файл с помощью команды Get-Content.Все это кажется слишком сложным для чего-то, что должно быть простым.
Итак, что мне не хватает?