У меня есть столбцы csv с несколькими столбцами, и мне нужно разделить определенный столбец с именем «Путь», который выглядит примерно так
SharePoint\user\Documents\Desktop\PowerShell Scripts\Audit-Log-Script\.git\objects\ff\76e4656b4e0afa14ad3a6ea03fb6d40a5bb7c0
SharePoint\user\Documents\Desktop\PowerShell Scripts\Audit-Log-Script\Data\User_v512.csv
Мне просто интересно, как я могу использовать последний символ люфта для индикатора. Если после последнего люфта стоит точка, то это "Файл", если точки нет, то это "Папка"
Я пытаюсь зациклить каждую строку, создать новый столбец с именем «Тип», в котором будут храниться значения «Файл» и «Папка», и экспортировать его в новый CSV-файл.
Я застрял, поэтому любая помощь или предложение будут очень признательны.
$Result=
foreach($CSVLine in $CSVImport){
$CSVLine |
Select-Object -Property *,
@{
Name = 'Type';
# Not sure how to do if else statement here to pass either "File" or "Folder" value
Expression = {($_.Path -split "\")[-2]} \
}
}
$Result |
Format-Table -AutoSize
@SantiagoSquarzon К сожалению, у меня нет доступа. :(
Можете ли вы объяснить, что вы подразумеваете под «если есть точка после последней обратной реакции, то это« файл », если точки нет, то это« папка »? Глядя на ваши примеры путей, у обоих нет точки после последняя обратная косая черта, так что это будут папки?Я думаю, вам следует посмотреть, есть ли у пути расширение или нет, может быть, это лучший способ определить это
@SantiagoSquarzon, поэтому в первом пути нет точки после последней обратной косой черты, так что это папка. Второй путь имеет точку после последней обратной косой черты, так что это файл.
О, вы имеете в виду, что на листе есть точка, ха-ха, да, может быть, я смотрел на это буквально. Итак, в основном, если путь имеет расширение
Ты прав. В основном я хочу проверить, есть ли у пути расширение или нет. Я не уверен, как это сделать, потому что файл CSV также содержит много разных типов расширений, поэтому
Класс пути может помочь вам определить, имеет ли путь расширение или не использует его метод GetExtension. Используя оба пути, указанные в вашем вопросе, в качестве примера:
@'
Path
SharePoint\user\Documents\Desktop\PowerShell Scripts\Audit-Log-Script\.git\objects\ff\76e4656b4e0afa14ad3a6ea03fb6d40a5bb7c0
SharePoint\user\Documents\Desktop\PowerShell Scripts\Audit-Log-Script\Data\User_v512.csv
'@ | ConvertFrom-Csv | Select-Object @{
Name = 'Type'
Expression = { if ([IO.Path]::GetExtension($_.Path)) { return 'File' } 'Directory' }
}, Path
Окончательный код будет таким:
Import-Csv path\to\myCsv.csv | Select-Object @{
Name = 'Type'
Expression = { if ([IO.Path]::GetExtension($_.Path)) { return 'File' } 'Directory' }
}, Path | Format-Table -AutoSize
Как отмечает mklement0 в своем полезном комментарии, Split-Path включает параметр -Extension в PowerShell Core 7+:
Import-Csv .\test.csv | Select-Object @{
Name = 'Type'
Expression = { if (Split-Path -Extension $_.Path) { return 'File' } 'Directory' }
}, Path
Большое спасибо, брат. Очень признателен за вашу постоянную помощь. :)
Лично, учитывая, что у вас есть доступ к этим путям, и они действительно существуют, вы бы использовали только
[IO.File]::GetAttributes(....)
, чтобы определить, являются ли они файлом или папкой.