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实战] 彻底解决依赖地狱:如何编译全静态、可移植的 Xorriso 工具
运维·devops
智能运维指南2 天前
破解信创改造痛点:国产DevOps平台选型的核心逻辑与实践路径
devops·devops平台·devops系统·devops厂商·研发效能平台
翰德恩咨询2 天前
敏捷咨询实战:如何让DevOps从理念到高效落地
敏捷开发·devops
_运维那些事儿2 天前
GitLabCI/CD语法
linux·服务器·git·ci/cd·gitlab·运维开发·devops
_运维那些事儿2 天前
GitLab&Jenkins
运维·ci/cd·gitlab·jenkins·devops
研发小能3 天前
信创生态认证视角:国产DevOps平台选型的权威认证价值与实操评估方法
devops·devops平台·devops系统·devops厂商·研发效能平台
研发小能4 天前
破解信创改造痛点:国产DevOps平台选型的核心逻辑与实践路径
研发效能·devops·devops平台·devops系统·研发效能平台
切糕师学AI5 天前
什么是灰度发布(Gray Release)?
devops·持续部署·持续集成·灰度发布·release·gray release
研发小能5 天前
从 “工具整合” 到 “数据协同”:破解研发 - 办公数据孤岛的国产 DevOps 平台选型策略
devops·devops产品·devops平台·devops厂商·研发效能平台
研发小能6 天前
国产DevOps平台选型核心指标体系构建:兼容度、安全合规、效能度量与服务支撑
devops·运维安全·devops平台·devops系统·研发效能平台