我想获取目录名称为YYYY-MM-DD
格式的当前子目录中的所有.JPG文件。
即
D:\Pictures\2018-01-01\DSC_0001.JPG <- yes, include
D:\Pictures\2018\01\DSC_0001.JPG <- do not include
这是我尝试过的,没有运气。
$testFiles = Get-ChildItem -Path $srcFolder -Filter *.JPG | ? { (Split-Path (Split-Path $_ -Parent) -Leaf) -match '^\d{4}-\d{2}-\d{2}$' }
答案 0 :(得分:2)
您差一点就拥有了。
$testFiles = Get-ChildItem -Path $srcFolder -Recurse -Filter *.JPG
| Where-Object { (Split-Path (Split-Path $_.FullName -Parent) -Leaf) -match '^\d{4}-\d{2}-\d{2}$' }
当$_.Fullname
传递整个对象时,您需要使用$_
来设置路径。
答案 1 :(得分:1)
这是获取文件列表的一种稍微不同的方法。 [ grin ]会针对文件的.Directory
属性进行测试。
_ [编辑-原始版本与 entire 目录名匹配,并且仅使用日期模式无法获得目录名。] _
$SourceDir = $env:temp
$Filter = '*.log'
# this pattern will give embedded date patterns
#$DirPattern = '\d{4}-\d{2}-\d{2}'
# this pattern gives ONLY a date pattern
$DirPattern = '^\d{4}-\d{2}-\d{2}$'
$GCI_Params = @{
LiteralPath = $SourceDir
Filter = $Filter
File = $True
Recurse = $True
}
$FileList = Get-ChildItem @GCI_Params |
# this matches against the entire directory
#Where-Object {$_.Directory -match $DirPattern}
# this one correctly filters against only the parent dir
Where-Object {(Split-Path -Path $_.DirectoryName -Leaf) -match $DirPattern}
$FileList.Count
在我的系统上,此时,它返回~~ 67 ~~ 54
作为匹配文件的数量。
答案 2 :(得分:0)
我不确定您对嵌套的分割路径在做什么,但是在我的测试中它不起作用。
这有效,并且可以满足您的需求:
gci *.jpg -Recurse | ? { $_.FullName -match '\\\d{4}-\d{2}-\d{2}\\' }`