循环获取文件名
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-Csv
的 LiteralPath
参数:
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
此代码运行并为我提供了文件夹中的文件名,但它也会引发错误:
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-Csv
的 LiteralPath
参数:
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