如何用PowerShell提取目录文件名前4位数字并去重写入文本文件
PowerShell 脚本问题修复方案
原有代码问题
- 调用
SubString(0,4)前没有校验文件名长度,文件名不足4位时会触发索引越界异常 - 正则规则错误:
[0- 9]包含多余空格,仅能匹配「单个数字+空格」的组合,无法匹配开头4位连续数字的规则 - 仅输出了完整文件名,未提取前4位数字,也未做去重处理
- 冗余的变量赋值逻辑,同时走管道输出到文件时
$files不会拿到返回结果
最终可用脚本
把代码里的你的目标目录路径和你的输出文本文件路径替换成实际路径即可:
# 替换为实际要扫描的目录路径 $sourceDir = "你的目标目录路径" # 替换为实际要输出的文本文件路径 $outputPath = "你的输出文本文件路径" Get-ChildItem -Path $sourceDir -File | # 匹配文件名以4个数字开头的规则,自动规避文件名不足4位的异常 Where-Object { $_.Name -match '^(\d{4})' } | # 提取匹配到的前4位数字 ForEach-Object { $matches[1] } | # 去重 Select-Object -Unique | # 写入文件,默认UTF-8编码,需要其他编码可加-Encoding参数指定 Out-File -FilePath $outputPath
可选参数说明
- 如果需要包含子目录下的文件,在
Get-ChildItem后添加-Recurse参数即可 - 如果需要指定输出编码,比如GBK,在
Out-File后添加-Encoding GB2312参数即可 - 如果需要覆盖已存在的输出文件,在
Out-File后添加-Force参数即可
内容的提问来源于stack exchange,提问作者SkyeG
相关产品推荐
相关产品推荐

