我创建了以下命令,用于合并与文件夹内的过滤器匹配的所有 csv 文件,并将其输出到输出文件中。
$mainPath="C:\\users\\myuser\\temp";
$mergeFilter="myfile.csv";
$outFile = "C:\\users\\myuser\temp\test.csv";
Get-ChildItem $mainPath -Recurse -Include $mergeFilter |
Select-Object -ExpandProperty FullName |
Import-Csv -Delimiter ';' |
Select-Object *,@{Name='Date'; Expression={"$dummyvariable"}}; |
Export-Csv $outFile -NoTypeInformation -Delimiter ';'
Run Code Online (Sandbox Code Playgroud)
我的问题是,当使用名为 $dummyvariable 的变量合并某些 CSV 时,我想添加一个额外的列,但我不知道必须在哪里初始化它才能获得 Expression={"..."} 中的值. 如果我之前在管道中声明它就不起作用(我需要在管道上做更高的工作以获得目录名称)
你知道我如何声明这个变量并在以“Select-Object”开头的管道上恢复吗?
提前致谢
此致。
何塞
我认为您正在寻找-PipelineVariable
( -pv
) 公共参数(PSv4+),它将给定 cmdlet 的当前输出对象存储在一个变量中,该变量可以在以后的管道段中的脚本块中引用。
这是一个简化的示例:
# Create sample input file.
@'
foo;bar
1;2
'@ > file.csv
Get-Item file.csv -pv fileObj | Select-Object -ExpandProperty FullName |
Import-Csv -Delimiter ';' | Select-Object *, @{ n='Date'; e={ $fileObj.LastWriteTime } }
Run Code Online (Sandbox Code Playgroud)
上面的结果类似于:
foo bar Date
--- --- ----
1 2 2/17/18 4:17:25 PM
Run Code Online (Sandbox Code Playgroud)
也就是说,-pv fileObj
madeGet-Item
将其当前输出对象存储在 variable 中$fileObj
,最后一个管道段能够在属性定义脚本块中引用它。
归档时间: |
|
查看次数: |
3500 次 |
最近记录: |