Powershell-Skript zum Anhängen einer Erweiterung an eine Datei, Eingabe aus CSV

Powershell-Skript zum Anhängen einer Erweiterung an eine Datei, Eingabe aus CSV

Ich benötige lediglich eine Excel-Liste mit Dateipfaden und kann mit Powershell an jede Datei die gleiche Erweiterung anhängen (nicht ersetzen).

Es sollte doch ganz einfach sein, oder? Das Problem, das ich sehe, ist, dass import-csv -path myfile.csv | write-hostich die folgende Ausgabe erhalte:

@{FullName=C:\Users\jpalumbo\test\appendto.me} 
@{FullName=C:\Users\jpalumbo\test\append_list.csv} 
@{FullName=C:\Users\jpalumbo\test\leavemealone.txt}

Mit anderen Worten sieht es so aus, als würde auch die CSV-„Formatierung“ ausgegeben.

Wenn ich jedoch nur eingebe import-csv -path myfile.csv, ist die Ausgabe wie erwartet:

FullName
--------
C:\Users\jpalumbo\test\appendto.me
C:\Users\jpalumbo\test\append_list.csv
C:\Users\jpalumbo\test\leavemealone.txt

Offensichtlich gibt es keine Datei mit dem Namen „@{FullName=C:\Users\jpalumbo\test\leavemealone.txt}“ und eine Umbenennung funktioniert nicht. Daher bin ich nicht sicher, wie ich diese Daten am besten aus dem Befehl „import-csv“ herausbekomme, ob ich sie in einem Objekt speichern soll oder was.

Danke!!

Antwort1

Versuche dies

$list=import-csv("myfile.csv")
foreach ($entry in $list) {
    $withExt=$entry.FullName+".txt"
    write-host $withExt
}

Der schwierige Teil ist, dass import-csv im Wesentlichen ein Array von Arrays zurückgibt. Aus diesem Grund ist unsere erste Version so formatiert, wie sie ist, da write-host eine Liste von Listen erhält. Sie müssen über jede Zeile iterieren und jede Zeile einzeln behandeln. Zumindest ist das eine Möglichkeit, dies zu tun.

Massimo hat hierzu den passenden Einzeiler parat.

Antwort2

Versuche dies:

Import-Csv -path myfile.csv | ForEach-Object { Write-Host $_.FullName }

Sie können im Skriptblock von ForEach-Object natürlich alles tun, was Sie möchten, anstatt nur den Wert des Felds „FullName“ auszugeben.

Dadurch wird die Erweiterung „.ext“ an alle Dateinamen angehängt:

Import-Csv -path myfile.csv | ForEach-Object { Write-Host $_.FullName + ".ext" }

Der Trick dabei ist:

1) Verwenden Sie es, ForEach-Objectum auf die tatsächlich von erstellten Objekte einzuwirken Import-Csv.
2) Verwenden Sie es, $_.FieldNameum auf den Wert eines bestimmten Felds in jedem Objekt zu verweisen (entspricht dem Wert des gleichnamigen Felds in der importierten CSV-Datei).

verwandte Informationen