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

相关推荐
心灵彼岸-诗和远方6 小时前
Devops业务价值流:软件研发最佳实践
运维·产品经理·devops
大卡尔1 天前
Reviewbot 开源 | 为什么我们要打造自己的代码审查服务?
devops·code review·静态检查·工程效率
极小狐1 天前
驭码上新,AI Code Review、基于代码库的知识问答,让研发起飞
gitlab·devsecops·devops·极狐gitlab·安全合规
蚊子不吸吸2 天前
DevOps开发运维简述
linux·运维·ci/cd·oracle·kubernetes·gitlab·devops
思码逸研发效能2 天前
度量数据是人工凭感觉录入的,产生的偏差如何解决?
研发效能·devops·研发效能度量·研发管理
Databuff4 天前
JVM性能优化实战手册:从监控到调优策略
linux·运维·jvm·性能优化·自动化·devops
AshCode5 天前
Docker远程管理和应用容器远程部署
docker·springboot·devops·开发效率·容器部署
晓北斗NorSnow7 天前
瀑布式开发、快速原型开发、迭代式开发、螺旋式开发、敏捷式开发、DevOps开发的简介与对比
运维·devops
winkee7 天前
全面解析!用户证书的使用,用 Nginx 容器搭建 HTTPS 服务器。
https·devops
极小狐7 天前
如何打开/关闭 GitLab 的版本检查功能?
gitlab·devsecops·devops·极狐gitlab·安全合规