gpt4 book ai didi

Powershell - 关于 foreach 的澄清

转载 作者:行者123 更新时间:2023-12-02 18:27:02 27 4
gpt4 key购买 nike

我正在学习 powershell,我需要有人给我初步的插入,帮助我完成学习曲线。我熟悉编程和dos,但不熟悉powershell。

我想做的是列出指定目录中的所有文件并将文件名插入数组中。我不太熟悉语法,当我尝试运行测试时,系统询问我输入参数。

有人可以启发我并向我展示获得我想要的东西的正确方法吗?

这就是 powershell 问我的问题:

PS D:\ABC> Test.ps1
cmdlet ForEach-Object at command pipeline position 2
Supply values for the following parameters:
Process[0]:

这是我的测试:

[string]$filePath = "D:\ABC\*.*";

Get-ChildItem $filePath | foreach
{
$myFileList = $_.BaseName;
write-host $_.BaseName
}

为什么 ps 询问 Process[0]?

我希望 ps 列出目录中的所有文件,并将结果通过管道传输到 foreach,在 foreach 中我将每个文件放入 $myFileList 数组中,并打印出文件名。

最佳答案

不要将foreach(语句)与ForEach-Object(cmdlet)混淆。微软在这方面做得很糟糕,因为有一个 foreach 的别名指向 ForEach-Object,所以当你使用 foreach 时,你必须根据您的使用方式了解您正在使用哪个版本。他们的文档进一步将两者混为一谈,使情况变得更糟。

您尝试在代码中使用的是 ForEach-Object,因此您应该使用它的全名来区分它。从那里开始,问题是 { block 从下一行开始。

{} 在 PowerShell 中用于与语句相关的代码块(如 while 循环),但也用于表示 [ScriptBlock] 对象。

当您使用ForEach-Object时,它需要一个脚本 block ,该脚本 block 可以按位置获取,但必须位于同一行。

相反,由于 foreach 是一个语句,因此它可以在下一行使用其 {}

您的代码与ForEach-Object:

Get-ChildItem $filePath | ForEach-Object {
$myFileList = $_.BaseName;
write-host $_.BaseName
}

您的代码与foreach:

$files = Get-ChildItem $filePath
foreach ($file in $Files)
{
$myFileList = $file.BaseName;
write-host $file.BaseName
}

关于Powershell - 关于 foreach 的澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43643827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com