PowerShell如何从文件夹中捕获第一个文件名?

6

初学powershell,我需要从一个目录中捕获第一个文件名。然而,我的当前脚本捕获了所有文件名。请建议如何修改下面的代码。

#   Storing path of the desired folder
$path = "C:\foo\bar\"
$contents = Get-ChildItem -Path $path -Force -Recurse
$contents.Name

结果如下所示。
test-01.eof
test-02.eof
test-03.eof

我只想要这个列表中的一个文件(任意一个)。所以期望的结果应该是:
test-01.eof
3个回答

14

你可以使用Select-Object命令,带上 -first 参数并将其设置为1


$path = "C:\foo\bar\"
$contents = Get-ChildItem -Path $path -Force -Recurse -File | Select-Object -First 1

我也已经添加了 -File 开关到 Get-ChildItem,因为你只想返回文件。


6
$path = "C:\foo\bar\"
$contents = Get-ChildItem -Path $path -Force -Recurse
$contents # lists out all details of all files
$contents.Name # lists out all files
$contents[0].Name # will return 1st file name
$contents[1].Name # will return 2nd file name
$contents[2].Name # will return 3rd file name

计数从0开始。因此,这里的$contents是一个数组或列表,无论在[]中提到的整数是该数组/列表中项的位置。所以当你输入$contents[9]时,你告诉powershell从数组$contents中获取第9个项目。这就是如何遍历列表。在大多数编程语言中,计数从0开始而不是1。对于刚进入编程世界的人来说可能有点困惑,但你会习惯的。

如果您能更详细地解释一下您的答案,那对于刚接触 PowerShell 的用户来说肯定会很有帮助的 ;) - Paxz

2
请使用下面这个简单而实用的命令。添加recurse选项只会在机器或PowerShell(当代码很多且已经被使用时)上增加轻微的负载。

存储所需文件夹路径

$path = "C:\foo\bar\"
$contents = Get-ChildItem -Path $path | sort | Select-Object -First 1
$contents.Name

输出结果将会与预期一致:

test-01.eof

Select-Object -First会选择每个对象(或行),如果将1作为参数,则提供第一行数据作为输出。


只需执行 $fileName = (Get-ChildItem -Path $path | sort | Select-Object -First 1).Name - T.S.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接