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均可。

相关推荐
牛奶咖啡132 天前
DevOps自动化运维实践_ansible-playbook的使用
运维·自动化·ansible·devops·playbook·playbook模块及其示例
q_30238195563 天前
告别kubectl命令地狱!MCP-K8s让AI成为你的智能运维助手
运维·人工智能·语言模型·chatgpt·kubernetes·文心一言·devops
信创DevOps先锋5 天前
Gitee:中国DevOps生态的数字化转型引擎
运维·gitee·devops
信创DevOps先锋6 天前
中国企业DevOps工具链选型趋势:本土化与安全可控成核心指标
运维·安全·devops
智能运维指南6 天前
嘉为蓝鲸 DevOps 平台与 AI 技术结合:推动数字化转型的行业标杆
运维·人工智能·devops
信创DevOps先锋6 天前
中国DevOps工具链选型指南:本土化与安全合规成企业数字化转型关键
运维·安全·devops
信创DevOps先锋7 天前
本土化DevOps突围战:Gitee如何重构企业研效基因
重构·gitee·devops
Luke~7 天前
已上架阿里云计算巢!Loki AI 事故分析引擎正式开放一键部署,帮 SRE 快速完成故障复盘
人工智能·阿里云·云计算·loki·devops·aiops·sre
信创DevOps先锋8 天前
Gitee DevOps:国产化研发体系的破局者与赋能者
运维·安全·devops
研发小能8 天前
AI 助力 DevOps 智能化:提升企业研发效能的革命性变革
devops