循环获取文件名

Getting file name in loop

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

Import-Csv : Cannot validate argument on parameter 'Path'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.

不确定是什么问题...

$files = Get-ChildItem "C:\Users\MG\Desktop\ScanFolder\*.csv"
foreach ($item in $files) {
    $file_name = $item.name
    $check = Import-Csv $_
    if ($check) { ...

$_ 仅在您将数据通过管道传输(即使用 |)到 cmdlet 或函数时自动填充。

由于您使用的是 foreach() 循环,因此您应该引用您在括号中声明的本地副本,在您的情况下 $item:

foreach($item in $files){
  $file_name = $item.name
  $check = Import-Csv $item.FullName
  # work with $check
}

您还可以将 $item 传送到 Import-Csv,让 PowerShell 自动将文件路径绑定到 Import-CsvLiteralPath 参数:

foreach($item in $files){
  $file_name = $item.name
  $check = $item |Import-Csv
  # work with $check
}

注意:以下内容解决了此问题的先前修订:

在 PowerShell 4.0 中,您可以对结果数组使用 属性 枚举,如下所示:

(Get-ChildItem "C:\Users\MG\Desktop\ScanFolder\*.csv").Name

或使用ForEach-Object:

Get-ChildItem "C:\Users\MG\Desktop\ScanFolder\*.csv" |ForEach-Object Name

如果你想编写与以前版本兼容的代码,请使用Select-Object:

Get-ChildItem "C:\Users\MG\Desktop\ScanFolder\*.csv" |Select-Object -ExpandProperty Name