PowerShell获取文件列表踩坑

PowerShell获取文件列表踩坑

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

初步实现

假设有一个路径如下:

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

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

perl 复制代码
$file_list=Get-ChildItem ./ -Recurse  abc_*
​
for ($i=0; $i -lt $file_list.Length; $i++)
{
    write-host $i":" $file_list[$i].FullName
}

运行结果如下:

makefile 复制代码
0: E:\Test\abc_a.txt
1: E:\Test\abc_b.txt
2: E:\Test\abc_d.txt

把上面的abc_*换成a_*

perl 复制代码
$file_list=Get-ChildItem ./ -Recurse  a_*
​
for ($i=0; $i -lt $file_list.Length; $i++)
{
    write-host $i":" $file_list[$i].FullName
}

运行结果如下:

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

咋这样了呢?

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

查看了一下:

bash 复制代码
PS E:\Test> cat .\a_bcd.txt
01234
​
PS E:\Test> $file_list.Length
16

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

所以不能用Length,改成Count。

优化实现

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

运行结果:

makefile 复制代码
0: E:\Test\a_bcd.txt

进阶实现

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

perl 复制代码
$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均可。

相关推荐
Azure DevOps10 小时前
Azure DevOps Server:扩充数据库服务器的磁盘
服务器·数据库·microsoft·azure·devops
大傻^1 天前
OpenClaw 彻底卸载指南:从服务治理到残留清理的完整架构实践
devops·aiagent·系统清理·架构治理·openclaw
wangruofeng1 天前
ripgrep 完全指南:比 grep 快 100 倍的命令行搜索利器
前端·devops
wangruofeng1 天前
fnm vs nvm:Node.js 版本管理工具深度对比
node.js·devops
智能运维指南3 天前
信创背景下,国产 DevOps 平台如何实现真正的“全栈适配”?
运维·devops
代码派3 天前
NineData社区版:免费+本地化部署,满足数据库DevOps、数据复制与一致性对比的数据库管理平台
运维·数据库·database·devops·数据库管理工具·ninedata·数据库迁移
2301_787328493 天前
57.DevOps入门
运维·devops
逻极3 天前
深入剖析Docker核心架构:从组件交互到内核原理详解
docker·系统架构·linux内核·devops·容器技术
NineData4 天前
NineData 社区版 V4.10.0 发布:新增 9 条异构数据库复制链路,DevOps 能力再升级!
运维·数据库·devops·数据库管理工具·ninedata·迁移工具·异构迁移
智能运维指南5 天前
信创改造 “二次开发陷阱“:国产DevOps 平台选型的原生功能完整性评估要点
运维·devops