PowerShell читает CSV-файл и создает соответствующие файлы - PullRequest
0 голосов
/ 21 ноября 2018

По сути, у меня есть CSV-файл с большим количеством столбцов.Допустим, это выглядит так:

_username, platform_

username1, platformX1

username2, platformY

username3, platformX2

username4, platformX2

..., ...

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

\platformX1\username1.file

\platformY\username2.file

\platformX2\username3.file, username4.file

etc etc... 

Я знаю, что должен использовать foreach с if, если он где-то размещен, но PowerShell является новым для меня, и я не знаю, как его запустить.

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

это похоже на то, что вы хотите.[ ухмылка ]

# fake reading in a CSV file
#    in real life, use Import-CSV
$InStuff = @'
_UserName, Platform_
username1, platformX1
username2, platformY
username3, platformX2
username4, platformX2
'@ | ConvertFrom-Csv

$DestDir = $env:TEMP
$Extension = 'txt'

foreach ($IS_Item in $InStuff)
    {
    $TargetPath = Join-Path -Path $DestDir -ChildPath $IS_Item.Platform_
    if (-not (Test-Path -LiteralPath $TargetPath))
        {
        # "$Null = " will supress unwanted output from New-Item
        $Null = New-Item -Path $TargetPath -ItemType Directory
        }

    $FileName = $IS_Item._UserName, $Extension -join '.'
    $FullFileName = Join-Path -Path $TargetPath -ChildPath $FileName

    if (-not (Test-Path -LiteralPath $FullFileName))
        {
        # "$Null = " will supress unwanted output from New-Item
        $Null = New-Item -Path $FullFileName -ItemType File
        }
    }

Я думаю, что это очевидно, но я знаю, что иногда опережаю свое положение.поэтому, если есть какие-либо вопросы, пожалуйста, не стесняйтесь спрашивать ... [ ухмылка ]

0 голосов
/ 22 ноября 2018

Это сработало для меня.

$ErrorActionPreference = "Stop"

#Path of the CSV file resides
$csvData = Import-Csv -Path "$env:USERPROFILE\Desktop\data.csv"
$DestinationFolder = "C:\Stuffs"

foreach($record in $csvData)
{
    $destPlatformFolder = $DestinationFolder + "\" + $record.platform_

    if(-not(Test-Path -Path $destPlatformFolder)){

    New-Item -Path $destPlatformFolder -ItemType Directory -Force | Out-Null

    }

    $destinationFile = $destPlatformFolder + "\" + $record._username

    New-Item -Path $destinationFile -ItemType File -Force | Out-Null
}
0 голосов
/ 21 ноября 2018

Вот что-то похожее на то, что вы хотите сделать.

Это созданные файлы определенного размера в вашем каталоге

$data = get-content "C:\Data\masteFile.csv"
$drcty = "C:\Data"

foreach($line in $data)
{
    $a,$b = $line.Split("{,}")
    $parent = $drcty+"\"+$a+"\"
    $filename = $parent + $b.TRIM() +".txt"
    write-host $filename

    New-Item -ItemType directory -Path $parent

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