gpt4 book ai didi

powershell - 如何根据过滤器选择特定的子串长度

转载 作者:行者123 更新时间:2023-12-01 13:16:33 25 4
gpt4 key购买 nike

我有多个不同名称的 CSV 文件,其中包含今天的日期、客户编号和扩展名。例如:

2019-01-23 XYZF-105.csv
2019-01-23 ABCD-205.csv
2019-01-23 Different nonstandard name.csv
2019-01-23 ##ABCD-305(Trial).csv

我想获取名称中仅包含客户编号的部分,例如 ABCD-305。

尝试使用子字符串从点开始选择 8 个字符,但这对后缀为 (Trial) 的字符不起作用。它也不会从头开始工作 11 个字符,因为它将包含 ##。此外,它必须避免使用非标准名称。

我用过

$allitems = Get-ChildItem -Path 'C:\Downloads\Customers\*.csv'
$res = @()
foreach ($item in $allitems){
$item = $item.Name.substring($item.Name.Length - 12,8)
$res += $Item
}

这样,对于正确的名称,我得到了很好的结果,但前提是 CSV 的名称类似于 2019-01-23 ABCD-205.csv。

跳过日期、跳过 .csv 扩展名并只获得包含 8 个字符且在第 4 个字符后有破折号的结果的方法应该是什么?提前致谢

最佳答案

尝试以下(PSv3+ 语法):

$res = (Get-ChildItem -Path C:\Downloads\Customers\*.csv).Name | 
Select-String -CaseSensitive '\b[A-Z]{4}-\d{3}\b' |
ForEach-Object { $_.Matches[0].Value }
  • (Get-ChildItem -Path C:\Downloads\Customers\*.csv).Name 输出目录下所有CSV文件的文件名。 C:\Downloads\Customers

  • Select-String -CaseSensitive '\b[A-Z]{4}-\d{3}\b' 使用区分大小写的正则表达式(regular-expression)匹配来只选择包含 4 个 ({4}) 个大写字符的文件名。 [A-Z],后接-,再接3位数字(\d),字边界(\b >)

  • ForEach-Object 脚本 block 然后输出每个匹配文件名中与正则表达式匹配的部分 ($_.Matches[0].Value) , 这样只有匹配文件名的相关部分被收集到 $res 中,作为一个数组。

关于powershell - 如何根据过滤器选择特定的子串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54336573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com