合并语句,同时引用管道中较早的语句
Combining statements, while referring to earlier statement in pipeline
在这里回答问题时,我使用了以下代码
$DataFile = Get-Item 'c:\temp15-01.csv'
Import-Csv -Path $DataFile -Delimiter ';' |
Measure-Object -Property 'E_TodayKwh' -Sum |
Select-Object @{label="NewName";expression={$DataFile.BaseName + '_' + $_.Sum + $DataFile.Extension}} |
Rename-Item $DataFile
这行得通,但我想知道是否有一种方法可以将第一条和第二条语句结合起来,同时仍然能够引用例如$DataFile.BaseName
在第二条语句的管道中。我查看了 -PipelineVariable
,但这似乎不适用于此处(我认为?)。
我认为结合这些特定语句的最佳方法是反转它们。也就是说,而不是 Import-Csv
作为“管道驱动程序”,该操作应该由文件输入驱动,然后 Import-Csv
成为您可以嵌套在重命名操作中的条件操作:
Get-Item 'c:\temp15-01.csv' |Rename-Item -NewName {'{0}_{1}.{2}' -f $_.BaseName,($_ |Import-Csv -Delimiter ';' |Measure-Object -Sum E_TodayKwh).Sum,$_.Extension}
这样以后操作也很容易适配多个文件:
Get-ChildItem -Filter *.csv -Recurse |Rename-Item ...
在这里回答问题时,我使用了以下代码
$DataFile = Get-Item 'c:\temp15-01.csv'
Import-Csv -Path $DataFile -Delimiter ';' |
Measure-Object -Property 'E_TodayKwh' -Sum |
Select-Object @{label="NewName";expression={$DataFile.BaseName + '_' + $_.Sum + $DataFile.Extension}} |
Rename-Item $DataFile
这行得通,但我想知道是否有一种方法可以将第一条和第二条语句结合起来,同时仍然能够引用例如$DataFile.BaseName
在第二条语句的管道中。我查看了 -PipelineVariable
,但这似乎不适用于此处(我认为?)。
我认为结合这些特定语句的最佳方法是反转它们。也就是说,而不是 Import-Csv
作为“管道驱动程序”,该操作应该由文件输入驱动,然后 Import-Csv
成为您可以嵌套在重命名操作中的条件操作:
Get-Item 'c:\temp15-01.csv' |Rename-Item -NewName {'{0}_{1}.{2}' -f $_.BaseName,($_ |Import-Csv -Delimiter ';' |Measure-Object -Sum E_TodayKwh).Sum,$_.Extension}
这样以后操作也很容易适配多个文件:
Get-ChildItem -Filter *.csv -Recurse |Rename-Item ...