PowerShell获取文件列表踩坑
Powershell强大的函数库,确实很方便,但是也有些坑。
初步实现
假设有一个路径如下:
需要获取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)
<img src=https://raw.githubusercontent.com/KingofHubGit/ImageFactory/main/Public/image-20240324122812628.png width=180 height=180 />
- 个人主页:@Lucas.D
- GitHub:@KingofHubGit
- CSDN:@Lucas.Deng
- 掘金:@LucasD
- 知乎:@Lucas.D
文档信息
- 本文作者:Lucas.D
- 本文链接:https://kingofhubgit.github.io/fragment/Powershell-getlist-failed/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)