如何在 PowerShell 中根据模式提取文件夹内的文件名
How to extract filename inside the folder based on pattern in PowerShell
我在文件夹
中有四个示例 CSV 文件,如下所示
1234_ABCD_XYZ_Sep 2018_20181130_09-00-18
TestingFile_20181025_CR_090819
FileSample20181130144037-11
SampleFile_20181025_AB_090819
我需要在 Powershell 中提取如下文件名
ABCD_XYZ_Sep 2018
TestingFile_20181025
FileSample20181130
SampleFile_20181025_AB
- 提供存储这些 csv 文件的输入父文件夹路径。
- 为所有模式创建一个数组
- 对于模式列表中的每个模式,循环遍历父文件夹中的每个项目,并比较每个 'file' 项目的名称是否与给定模式匹配。 (只检查文件,不检查文件夹;但是如果适用,递归也用于搜索子文件夹中的任何文件)
继续将每个模式匹配的结果添加到数组列表变量 'filelist'
下面是代码,
# Sample Source Folder Path
$sourceFolderPath = "D:\CSVFilesFolder"
$patterns_array = @(
"ABCD_XYZ_Sep 2018",
"TestingFile_20181025_CR",
"FileSample20181130",
"SampleFile_20181025_AB"
)
$filelist = New-object System.Collections.ArrayList
foreach($pattern in $patterns_array) {
$files = gci $sourceFolderPath -Recurse | ? { $_.PSIsContainer -eq $false -and $_.Name -match "*$pattern*.csv" }
$filelist.Add($files)
}
$filelist
干杯!
~K
我会为此使用正则表达式模式,其中文件名部分与 OR
符号 |
:
连接
$re = 'ABCD_XYZ_Sep 2018|TestingFile_20181025_CR|FileSample20181130|SampleFile_20181025_AB'
(Get-ChildItem -Path 'D:\Test' -Filter *.csv -File | Where-Object { $_.BaseName -match $re }).FullName
如果您使用的 PowerShell 版本低于 3.0,请使用此选项代替 -File
开关:
$re = 'ABCD_XYZ_Sep 2018|TestingFile_20181025_CR|FileSample20181130|SampleFile_20181025_AB'
(Get-ChildItem -Path 'D:\Test' -Filter *.csv | Where-Object { !$_.PsIsContainer -and $_.BaseName -match $re }).FullName
输出:
D:\Test34_ABCD_XYZ_Sep 2018_20181130_09-00-18.csv
D:\Test\FileSample20181130144037-11.csv
D:\Test\SampleFile_20181025_AB_090819.csv
D:\Test\TestingFile_20181025_CR_090819.csv
我在文件夹
中有四个示例 CSV 文件,如下所示1234_ABCD_XYZ_Sep 2018_20181130_09-00-18
TestingFile_20181025_CR_090819
FileSample20181130144037-11
SampleFile_20181025_AB_090819
我需要在 Powershell 中提取如下文件名
ABCD_XYZ_Sep 2018
TestingFile_20181025
FileSample20181130
SampleFile_20181025_AB
- 提供存储这些 csv 文件的输入父文件夹路径。
- 为所有模式创建一个数组
- 对于模式列表中的每个模式,循环遍历父文件夹中的每个项目,并比较每个 'file' 项目的名称是否与给定模式匹配。 (只检查文件,不检查文件夹;但是如果适用,递归也用于搜索子文件夹中的任何文件) 继续将每个模式匹配的结果添加到数组列表变量 'filelist'
下面是代码,
# Sample Source Folder Path
$sourceFolderPath = "D:\CSVFilesFolder"
$patterns_array = @(
"ABCD_XYZ_Sep 2018",
"TestingFile_20181025_CR",
"FileSample20181130",
"SampleFile_20181025_AB"
)
$filelist = New-object System.Collections.ArrayList
foreach($pattern in $patterns_array) {
$files = gci $sourceFolderPath -Recurse | ? { $_.PSIsContainer -eq $false -and $_.Name -match "*$pattern*.csv" }
$filelist.Add($files)
}
$filelist
干杯!
~K
我会为此使用正则表达式模式,其中文件名部分与 OR
符号 |
:
$re = 'ABCD_XYZ_Sep 2018|TestingFile_20181025_CR|FileSample20181130|SampleFile_20181025_AB'
(Get-ChildItem -Path 'D:\Test' -Filter *.csv -File | Where-Object { $_.BaseName -match $re }).FullName
如果您使用的 PowerShell 版本低于 3.0,请使用此选项代替 -File
开关:
$re = 'ABCD_XYZ_Sep 2018|TestingFile_20181025_CR|FileSample20181130|SampleFile_20181025_AB'
(Get-ChildItem -Path 'D:\Test' -Filter *.csv | Where-Object { !$_.PsIsContainer -and $_.BaseName -match $re }).FullName
输出:
D:\Test34_ABCD_XYZ_Sep 2018_20181130_09-00-18.csv D:\Test\FileSample20181130144037-11.csv D:\Test\SampleFile_20181025_AB_090819.csv D:\Test\TestingFile_20181025_CR_090819.csv