此代码运行并为我提供了该文件夹中的文件名,但同时也会引发错误:
Import-Csv:无法验证参数'Path'上的参数。参数为null或为空。提供一个不为null或为空的参数,然后重试该命令。
不确定是什么问题...
$files = Get-ChildItem "C:\Users\MG\Desktop\ScanFolder\*.csv"
foreach ($item in $files) {
$file_name = $item.name
$check = Import-Csv $_
if ($check) { ...
答案 0 :(得分:9)
$_
仅在将数据从管道(即使用|
)传输到cmdlet或函数时自动填充。
由于您使用的是foreach()
循环,因此您应该引用在括号中声明的本地副本,以$item
为例:
foreach($item in $files){
$file_name = $item.name
$check = Import-Csv $item.FullName
# work with $check
}
您还可以将$item
传递到Import-Csv
,并让PowerShell自动将文件的路径绑定到Import-Csv
的{{1}}参数:
LiteralPath
注意 :以下内容解决了该问题的先前版本:
在PowerShell 4.0中,您可以在结果数组上使用属性枚举,如下所示:
foreach($item in $files){
$file_name = $item.name
$check = $item |Import-Csv
# work with $check
}
或使用(Get-ChildItem "C:\Users\MG\Desktop\ScanFolder\*.csv").Name
:
ForEach-Object
如果要编写与以前版本兼容的代码,请使用Get-ChildItem "C:\Users\MG\Desktop\ScanFolder\*.csv" |ForEach-Object Name
:
Select-Object