如何在循环中获取文件名?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (35)

这段代码运行并给出了文件夹中的文件名,但它也引发了一个错误:import-csv:无法验证参数‘path’上的参数。参数为空或空。提供一个非空或空的参数,然后再试一次命令。

$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
}

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

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

在PowerShell 3.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

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问9 回答
  • 优惠活动秘书

    0 粉丝2 提问8 回答
  • _逗你玩_

    腾讯 · 客户端安全 (已认证)

    4 粉丝4 提问5 回答
  • uncle_light

    5 粉丝518 提问5 回答

扫码关注云+社区

领取腾讯云代金券