Как разделить значение столбца csv с помощью PowerShell

У меня есть столбцы 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

Лично, учитывая, что у вас есть доступ к этим путям, и они действительно существуют, вы бы использовали только [IO.File]::GetAttributes(....), чтобы определить, являются ли они файлом или папкой.

Santiago Squarzon 05.10.2022 23:44

@SantiagoSquarzon К сожалению, у меня нет доступа. :(

aasenomad 05.10.2022 23:48

Можете ли вы объяснить, что вы подразумеваете под «если есть точка после последней обратной реакции, то это« файл », если точки нет, то это« папка »? Глядя на ваши примеры путей, у обоих нет точки после последняя обратная косая черта, так что это будут папки?Я думаю, вам следует посмотреть, есть ли у пути расширение или нет, может быть, это лучший способ определить это

Santiago Squarzon 05.10.2022 23:58

@SantiagoSquarzon, поэтому в первом пути нет точки после последней обратной косой черты, так что это папка. Второй путь имеет точку после последней обратной косой черты, так что это файл.

aasenomad 06.10.2022 00:03

О, вы имеете в виду, что на листе есть точка, ха-ха, да, может быть, я смотрел на это буквально. Итак, в основном, если путь имеет расширение

Santiago Squarzon 06.10.2022 00:04

Ты прав. В основном я хочу проверить, есть ли у пути расширение или нет. Я не уверен, как это сделать, потому что файл CSV также содержит много разных типов расширений, поэтому

aasenomad 06.10.2022 00:04
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Класс пути может помочь вам определить, имеет ли путь расширение или не использует его метод 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

Большое спасибо, брат. Очень признателен за вашу постоянную помощь. :)

aasenomad 06.10.2022 04:01

Другие вопросы по теме