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

相关推荐
一只拉古1 天前
DevOps 的 Linux 基础(第一部分)
linux·自动化运维·devops
SirLancelot12 天前
K8s-kubernetes(二)资源限制-详细介绍
微服务·云原生·容器·kubernetes·k8s·devops·kubelet
数据智能老司机4 天前
AI 原生软件交付——混沌工程与服务可靠性
aigc·devops·aiops
数据智能老司机4 天前
基于 Kubernetes 的平台工程——云原生应用的挑战
云原生·kubernetes·devops
数据智能老司机4 天前
基于 Kubernetes 的平台工程——Kubernetes 上的平台化浪潮
kubernetes·云计算·devops
苦逼IT运维4 天前
Jenkins + SonarQube 从原理到实战三:SonarQube 打通 Windows AD(LDAP)认证与踩坑记录
运维·服务器·windows·docker·云计算·jenkins·devops
朱小弟cs65 天前
Orange的运维学习日记--41.Ansible基础入门
linux·运维·学习·ci/cd·自动化·ansible·devops
数据智能老司机5 天前
AI 原生软件交付——发布到生产
aigc·devops·aiops
数据智能老司机6 天前
自动化 API 交付——API工件的CI/CD(二):构建阶段与API配置部署
架构·api·devops
数据智能老司机6 天前
自动化 API 交付——API 一致性:模式测试
架构·api·devops