在循环中获取文件名

MG2*_*016 0 powershell powershell-4.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) { ...
Run Code Online (Sandbox Code Playgroud)

Mat*_*sen 9

$_只有在将|数据传输到cmdlet或函数时才会自动填充.

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

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

你也可以管$itemImport-Csv让PowerShell的自动绑定的文件的路径Import-CsvLiteralPath参数:

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

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

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

(Get-ChildItem "C:\Users\MG\Desktop\ScanFolder\*.csv").Name
Run Code Online (Sandbox Code Playgroud)

或使用ForEach-Object:

Get-ChildItem "C:\Users\MG\Desktop\ScanFolder\*.csv" |ForEach-Object Name
Run Code Online (Sandbox Code Playgroud)

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

Get-ChildItem "C:\Users\MG\Desktop\ScanFolder\*.csv" |Select-Object -ExpandProperty Name
Run Code Online (Sandbox Code Playgroud)