CSV からの入力に拡張子を追加する Powershell スクリプト

CSV からの入力に拡張子を追加する Powershell スクリプト

必要なのは、ファイル パスの Excel リストを用意し、Powershell を使用して各ファイルに同じ拡張子を追加する (置き換えるのではなく) ことだけです。

とても簡単なはずですよね? 私が見ている問題は、実行するとimport-csv -path myfile.csv | write-host次のような出力が得られることです:

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

言い換えれば、CSV の「フォーマット」も出力しているように見えます。

ただし、 を発行するだけでimport-csv -path myfile.csv、出力は期待どおりになります。

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

明らかに、「@{FullName=C:\Users\jpalumbo\test\leavemealone.txt}」というファイルは存在せず、名前を変更しても機能しないため、import-csv コマンドからこのデータを取得する最適な方法や、オブジェクトに保存するかどうかなどがわかりません。

ありがとう!!

答え1

これを試して

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

難しいのは、import-csv が本質的に配列の配列を返すことです。これが、最初のバージョンがこのようにフォーマットされている理由です。write-host が取得するのはリストのリストです。各行を反復処理し、各行を個別に処理する必要があります。少なくとも、それが実行方法の 1 つです。

これについてはマッシモがワンライナーを言っています。

答え2

これを試して:

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

もちろん、「FullName」フィールドの値を書き出すだけでなく、ForEach-Object のスクリプト ブロックで必要な操作を何でも実行できます。

これにより、すべてのファイル名に「.ext」拡張子が追加されます。

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

ここでの秘訣は次のとおりです。

1)ForEach-Objectによって作成された実際のオブジェクトを操作するために使用しますImport-Csv。2
)$_.FieldName各オブジェクト内の特定のフィールドの値を参照するために使用します (インポートされた CSV ファイル内の同じ名前のフィールドの値に対応します)。

関連情報