Извлечение данных в CSV, но нужно только первые 4 символа - Powershell - PullRequest
0 голосов
/ 03 апреля 2020

В настоящее время у меня есть сценарий PS для извлечения всех имен папок в каталоге и помещения их в CSV. Это работает отлично. Теперь мне нужно извлечь те же имена папок, но в столбце должны быть только первые 4 символа. Вот мой текущий скрипт:

get-childitem $Path -directory | select-object NAME | export-excel -tablename "Projects" -path c:\archive_$date.xlsx

Он выводит данные, которые мне нужны, но текущий формат - 0123-XXXXXXXX. Мне нужно убрать все справа от «-» (а в некоторых случаях это подчеркивание). Я нашел что-то, чтобы добавить к сценарию, но, к сожалению, это не работает - $Name.Substring(0, [Math]::Min($Name.Length, 4))

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Если я правильно понимаю вопрос, вам нужны самые левые 4 символа из имен каталогов, но если они содержат - или _, вам нужна левая часть, предшествующая этому символу.

Если в этом случае попробуйте:

Get-ChildItem -Path $Path -Directory | 
Select-Object @{Name = 'Prefix'; Expression = {($_.Name.Substring(0,4) -split '[-_]')[0]}} |
Export-Excel -Path "c:\archive_$date.xlsx" -TableName "Projects"

Примеры:

    0123-XXXXXXXX   --> 0123
    013_YYYYYYYYYY  --> 013
    1-_4-ZZZZZZZZZ  --> 1

убедитесь, что переменная $Path содержит действительный путь root и что $date отформатирован таким образом, чтобы в нем не было недопустимых символов имени файла, например \ или :

0 голосов
/ 03 апреля 2020

Есть очень классная особенность команды Select-Object, которая может решить эту проблему для вас. Он называется «Вычисляемые свойства», и вы используете его следующим образом.

Учитывая каталог, который выглядит следующим образом:


get-childitem -directory | Select-Object -first 5 -ExpandProperty Name
amd_chipset_drivers_am4
Fusion364
gaming_app_6
Italian love songs (Instrumental) (musicfromrizzo)
mindustry-windows-64-bit

Вы можете создавать новые столбцы, используя этот синтаксис:

Select-Object @{Name=‘TitleOfNewColumn‘;Expression=#PowerShellCodeHere}} 

На практике:

get-childitem -directory | Select-Object `
    @{Name=‘FullName‘;Expression={$_.BaseName}},`
    @{Name=‘FourCharacters’;Expression={$_.BaseName.SubString(0,4)}} 

FullName                                           FourCharacters
--------                                           --------------
amd_chipset_drivers_am4                            amd_          
Fusion364                                          Fusi          
gaming_app_6                                       gami          
Italian love songs (Instrumental) (musicfromrizzo) Ital          
mindustry-windows-64-bit                           mind    

Теперь просто добавьте это в команду Export-Csv, и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...