循环获取文件名

时间:2018-06-19 22:05:11

标签: powershell powershell-v4.0

此代码运行并为我提供了该文件夹中的文件名,但同时也会引发错误:

  

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) { ...

1 个答案:

答案 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