2016-05-11 15 views
0

Ich habe eine CSV-Datei, die alles gut aussieht, bis es in PowerShell importiert wird, wenn auf jedes Zeichen gefolgt von einem Leerzeichen wie C : \ statt C:\ folgt.PowerShell Import-CSV Hinzufügen von Leerzeichen zwischen Zeichen

Es wäre einfach genug, die Zellen zu formatieren, um Text in Excel zu formatieren (was funktioniert), aber diese CSV-Datei wird auf mehreren Servern in einer Automatisierungsrichtlinie erstellt, so dass das Durchgehen jeder dieser Dateien und deren Formatierung eine Weile dauern wird du kannst dir vorstellen.

Ich frage mich, ob es eine Möglichkeit gibt, wie ich die Zellen zuerst in PowerShell formatieren und dann die CSV importieren kann.

Powershell-Code verwende ich:

$data = import-csv -Path $path -UseCulture -Header @("Path", "Folder", "Size")

CSV Snippet:

C:\,C:\,14.0GB C:\Program Files,Program Files,4.5GB C:\Program Files\Microsoft Office,Microsoft Office,2.8GB

Antwort

0

Es klingt wie die Datei möglicherweise Unicode, aber ohne die richtigen Byte-Reihenfolge Marken, die Powershell würde bewirken, dass der Standard-ASCII verwenden Codierung. Wenn das der Fall ist, müssen Sie die Codierung angeben:

$data = import-csv -Encoding Unicode -Path $path ... 

Eine weitere Option ist die Datei in ASCII vor dem Import [Kredit OP für den Befehl] zu konvertieren:

Get-content C:\path\TestXml.csv | Set-Content -Encoding Ascii TestXml.csv

+0

Import-Csv: Ein Parameter kann nicht gefunden werden, der mit dem Parameternamen 'Encoding' übereinstimmt. Bei Zeile: 5 Zeichen: 29 + $ data = import-csv -Encoding <<<< Unicode -Pfad $ pfad -UseCulture -Header @ ("Pfad", "Ordner", "Größe") + CategoryInfo: InvalidArgument : (:) [Import-Csv], ParameterBindingException + FullyQualifiedErrorId: NamedParameterNotFound, Microsoft.PowerShell.Commands.ImportCsvCommand –

+0

Offenbar kann Encoding nicht gefunden werden. Es ist jedoch ein Parameter? –

+0

Der Encoding-Parameter darf nicht in der Version von PowerShell verfügbar sein, die Sie verwenden ... –

0

könnte dies ein anderes Problem darstellen, aber es kann für das Entfernen aller Räume arbeiten

$data = import-csv -Path $path -UseCulture -Header @("Path", "Folder", "Size") 
$data | % { 
    $_.path = $_.path -replace '\s' 
    $_.folder = $_.folder -replace '\s' 
    $_.size = $_.size -replace '\s' 
} 
$data 
0

Es wäre vorteilhaft, einen Ausschnitt davon zu erhalten, wie die CSV aussieht. Können Sie die Kopfzeile und 1 oder 2 Zeilen angeben?

Ist die Kopfzeile in der CSV-Datei angegeben?

Wenn Sie den Header-Parameter verwenden, löschen Sie die ursprüngliche Kopfzeile aus der CSV-Datei. Andernfalls erstellt Import-Csv ein zusätzliches Objekt aus den Elementen in der Kopfzeile. https://technet.microsoft.com/en-us/library/hh849891.aspx

Sie sind unter Angabe der UseCulture Schalter, der die Standardtrennzeichen von der Umgebung angegeben verwenden. Sie können den folgenden Befehl ausführen, um Ihre Kultur Trennzeichen zu finden:

(Get-Culture).TextInfo.ListSeparator 

https://technet.microsoft.com/en-us/library/hh849891.aspx

+0

ich ihm bewusst keinen Kopf gab als sie mit einem in Powershell zu liefern. Ich habe meine Frage aktualisiert, um ein paar Zeilen hinzuzufügen. –

+0

@SamLucas Verwenden Sie Import CSV, um eine XML-Datei zu importieren? –

+0

Nein, es importiert eine CSV-Datei –

0

@Tony Hinkle schickte mich in die richtige Richtung, so habe ich seine Antwort als richtig markiert, hier ist der Code, den ich verwendet habe:

den Inhalt der CSV-Set aSCII-Kodierung

Get-content C:\Users\sam\Desktop\TestXml.csv | Set-Content -Encoding Ascii TestXml.csv 

Dann importieren Sie die CSV

$data = Import-Csv C:\Users\sam\Desktop\TestXml.csv -Header @("Path", "Folder", "Size") 
+0

Danke für die folgende - froh, dass ich helfen konnte. Ich werde meine Antwort mit diesen Informationen aktualisieren, so dass alles an einem Ort ist. –

Verwandte Themen