【问题标题】:Getting file name in loop循环获取文件名
【发布时间】:2018-06-20 20:53:34
【问题描述】:

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

Import-Csv:无法验证参数“路径”上的参数。参数为 null 或空。提供一个不为 null 或空的参数,然后重试该命令。

不确定是什么问题...

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

【问题讨论】:

  • 您的foreach(){} 循环中没有定义$_ - 改为使用Import-Csv $item.FullName

标签: powershell powershell-4.0


【解决方案1】:

$_ 仅在您通过管道传输(即使用|)数据到 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-16
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多