在目录中以目录名称格式YYYY-MM-DD获取扩展名为.JPG的文件

时间:2019-02-05 00:39:34

标签: powershell

我想获取目录名称为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}$' }

3 个答案:

答案 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}\\' }`