私はCSVに新しいデータを書き込もうとしていますが、私が望んでいたのと同じくらいうまくいくわけではありません。私のコードをアップ。新しい列をCSVに書き込む
"Code"ヘッダーの下に6桁の長い番号のリストを含むCSVを取得し、 "DivisionCode"という新しい列を作成し、 "Code"フィールドの最初の2桁のみを割り当てますその新しい列。ここで
は、私が現在持っているものです。
$Importcsv = import-csv C:\test.csv
# This takes the named CSV and adds the column "DivisionCode" to the end then
# writes back to the same CSV
$Importcsv | Select-Object *,@{Name='DivisionCode';Expression={''}} |
Export-Csv C:\test.csv -NoTypeInformation
$Importcsv = import-csv C:\test.csv
foreach ($Number in $Importcsv) {
$Code = $Number.Code
$DivisionCode = $Code -replace ".{4}$"
if ($Number.DivisionCode -like "") {
$Number.DivisionCode = $DivisionCode
}
}
$Importcsv | Export-Csv c:\RESONE\test2.csv -NoTypeInformation -Encoding ASCII
私は、単一のスクリプトとして最終的な結果は、私が欲しいものですが、それはすべての行に対してエラーをスローすることを実行したとき。私は何度も新しい列を作成しようとしています。列の作成がForEachループの外にあるので、私には理解できません。次のようにスローエラーは次のとおりです。
Select-Object : Property cannot be processed because property "DivisionCode" already exists. At C:\Trim2.ps1:4 char:30 + $Importcsv | Select-Object <<<< *,@{Name='DivisionCode';Expression={''}} | Export-Csv C:\test.csv + CategoryInfo : InvalidOperation: (@{FirstName=Mad... DivisionCode=}:PSObject) [Select-Object], PSArgumentException + FullyQualifiedErrorId : AlreadyExistingUserSpecifiedPropertyNoExpand,Microsoft.PowerShell.Commands.SelectObjectCommand
私が最初にそれを実行し、独自のスクリプトでSelect-Object
部分を配置する場合は、2番目のスクリプトで休息を実行し、それはすべてが完璧に実行されますが、明らかにそれはほど効率的ではありませんかもしれない。
それに加えて、私は、私が列を作成すると同時に私が列にしたいデータを書き込む方法を見落としていると推測していますが、私は方法を理解することができませんでした。
ええと、エラーを投げたときに新しい列を追加したコードをすでに実行していた可能性はありますが、それは間違いなく説明します。これは、開始する列を持たないcsvの定期的な新しいバージョンで実行されるスクリプトになります。 'e = {$ _。コード - 置き換え '。{4} $'}'は、わからない部分です。どのように動作するかを理解するために 'Select-Object'フォーマットについて勉強しようと思います。 '-Exclude DivisionCode'を理解するのは、すでに存在していれば必要です(私は知っていませんか?) – Zamoz
' -Exclude'はプロパティが存在すればそれを除外し、そうでなければ何もしません。 –
ロジャー。 '-Exclude'部分を省略し、完全に動作しました。私は、エラーの沢山を得たとき、私のテストですでに列を持っていたに違いない。助けてくれてありがとう!これはPowerShellへの私の最初の進出でしたので、私は見落とされていたものがあることを知っていました。 – Zamoz