PowerShell获取文件列表踩坑

本文讲述了在使用PowerShell获取文件列表时遇到的问题,尤其是在递归搜索文件时,当文件数量较少时Length可能会出错。作者分享了如何通过Count属性正确处理单个文件的情况,并提供了进阶实现方法和资源链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PowerShell-getlist

PowerShell获取文件列表踩坑

Powershell强大的函数库,确实很方便,但是也有些坑。

初步实现

假设有一个路径如下:

image-20240324110625507

需要获取abc_开头还有a_开头的的文件列表, 并打印/处理

按照常规思路,简单写一个:

$file_list=Get-ChildItem ./ -Recurse  abc_*

for ($i=0; $i -lt $file_list.Length; $i++)
{
    write-host $i":" $file_list[$i].FullName
}

运行结果如下:

0: E:\Test\abc_a.txt
1: E:\Test\abc_b.txt
2: E:\Test\abc_d.txt

把上面的abc_*换成a_*

$file_list=Get-ChildItem ./ -Recurse  a_*

for ($i=0; $i -lt $file_list.Length; $i++)
{
    write-host $i":" $file_list[$i].FullName
}

运行结果如下:

0: E:\Test\a_bcd.txt
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 

咋这样了呢?

发现是当文件只有一个的时候,就会翻车!

查看了一下:

PS E:\Test> cat .\a_bcd.txt
01234

PS E:\Test> $file_list.Length
16

此时的$file_list.Length代表的是$file_list文件的长度

所以不能用Length,改成Count。

优化实现

$file_list=Get-ChildItem ./ -Recurse  a_*

for ($i=0; $i -lt $file_list.Count; $i++)
{
    write-host $i":" $file_list[$i].FullName
}

运行结果:

0: E:\Test\a_bcd.txt

进阶实现

保险起见,将这个$file_list定义为数组。

$file_list=@()
$file_list+=Get-ChildItem ./ -Recurse  a_*
for ($i=0; $i -lt $file_list.Count; $i++)
{
    write-host $i":" $file_list[$i].FullName
}

用Count还是Length均可。


【更多干货分享】

  • 微信公众号"Lucas-Den"(Lucas.D)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lucas.Deng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值