15 Stimmen

Hinzufügen von Zeilen zu einer CSV-Datei in Powershell

Ich versuche herauszufinden, wie ich einer csv-Datei eine Zeile mit Titeln hinzufügen kann. Ich erhalte den Inhalt mit:

$fileContent = Import-csv $file -header "Date", "Description"

$File gibt zurück.

Date,Description
Text1,text2 
text3,text4

Wie füge ich eine Zeile mit einem neuen Datum und einer neuen Beschreibung hinzu? Sorry, ich bin relativ neu in powershell. Danke an alle, die helfen können

24voto

marceljg Punkte 957

Um einfach an eine Datei in Powershell anzuhängen, können Sie add-content verwenden.

Um also nur eine neue Zeile in die Datei einzufügen, versuchen Sie Folgendes, wobei $IhrNeuesDatum und $IhreBeschreibung die gewünschten Werte enthalten.

$NewLine = "{0},{1}" -f $YourNewDate,$YourDescription
$NewLine | add-content -path $file

Oder,

"{0},{1}" -f $YourNewDate,$YourDescription | add-content -path $file

Dadurch wird lediglich die neue Zeile an das Ende der .csv-Datei angehängt, was bei der Erstellung neuer .csv-Dateien, bei denen Sie die Kopfzeile hinzufügen müssen, nicht funktioniert.

15voto

Andy Arismendi Punkte 47876

Erstellen Sie ein neues benutzerdefiniertes Objekt und fügen Sie es dem Objekt-Array hinzu, das Import-Csv schafft.

$fileContent = Import-csv $file -header "Date", "Description"
$newRow = New-Object PsObject -Property @{ Date = 'Text4' ; Description = 'Text5' }
$fileContent += $newRow

9voto

corky Punkte 173

Ich weiß, dass dies ein alter Thread ist, aber es war der erste, den ich bei meiner Suche gefunden habe. Die += Lösung hat bei mir nicht funktioniert. Der Code, den ich zum Funktionieren gebracht habe, lautet wie folgt.

#this bit creates the CSV if it does not already exist
$headers = "Name", "Primary Type"
$psObject = New-Object psobject
foreach($header in $headers)
{
 Add-Member -InputObject $psobject -MemberType noteproperty -Name $header -Value ""
}
$psObject | Export-Csv $csvfile -NoTypeInformation

#this bit appends a new row to the CSV file
$bName = "My Name"
$bPrimaryType = "My Primary Type"
    $hash = @{
             "Name" =  $bName
             "Primary Type" = $bPrimaryType
              }

$newRow = New-Object PsObject -Property $hash
Export-Csv $csvfile -inputobject $newrow -append -Force

Ich konnte dies als Funktion verwenden, um eine Reihe von Arrays in einer Schleife zu durchlaufen und den Inhalt in die CSV-Datei einzugeben.

Es funktioniert in Powershell 3 und höher.

1voto

Rafiq Punkte 984

Für mich ist das einfach:

$Time = Get-Date -Format "yyyy-MM-dd HH:mm K"
$Description = "Done on time"

"$Time,$Description"|Add-Content -Path $File # Keep no space between content variables

Wenn Sie viele Spalten haben, dann erstellen Sie eine Variable wie $NewRow mögen:

$Time = Get-Date -Format "yyyy-MM-dd HH:mm K"
$Description = "Done on time"
$NewRow = "$Time,$Description" # No space between variables, just use comma(,).

$NewRow | Add-Content -Path $File # Keep no space between content variables

Bitte beachten Sie den Unterschied zwischen Set-Content (überschreibt den vorhandenen Inhalt) und Add-Content (wird an den vorhandenen Inhalt angehängt) der Datei.

0voto

Sebastian Punkte 5743

Ich finde die Verwendung von $newRowToAdd | Export-Csv -Append der einfachste Weg. Ich bin mir allerdings nicht sicher, welche Version eingeführt wurde

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X