You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell查询返回异常:获取最早修改文件夹问题求助

问题排查与修复方案

嘿,我来帮你搞定这个头疼的问题——你的PowerShell命令里藏着两个关键问题,才导致结果不符合预期还每次返回不一样的内容,咱们一步步拆解修复:

1. 排序用错了属性名(这是核心问题!)

你在Sort-Object里写的$_.datemodified其实是错的!PowerShell里表示文件夹最后修改时间的正确属性是**LastWriteTime**。当你引用一个不存在的属性时,PowerShell会把所有对象的排序值都当成null,这时候排序就完全是随机的——这就是为啥每次查结果都不一样的原因!

2. 没明确只找文件夹(潜在坑)

Get-ChildItem默认会把指定路径下的文件和文件夹都列出来,如果你的目录里刚好有符合命名格式的文件,它们也会被混进来筛选。建议加上-Directory参数,明确只拿子目录,这样更精准。

3. 正则可以再精准点(可选,看你的需求)

你提到的非预期文件夹比如4-29-1522845689658894,其实是符合你写的[0-9]+-[0-9]+-[0-9]+正则的,因为这个正则只要是“数字段-数字段-数字段”就匹配,范围太宽。如果你的目标文件夹有更严格的命名规则(比如最后一段是固定13-15位长数字),可以把正则改成这样:

  • 要是前两段是1-2位数字,最后一段13-15位:^\d{1,2}-\d{1,2}-\d{13,15}$
  • 要是前两段位数随意,最后一段至少13位:^\d+-\d+-\d{13,}$
    (加^和$是为了确保整个文件夹名称都符合格式,不会匹配那些名称里包含该格式的其他文件夹)

修复后的完整命令

$folder = Get-ChildItem -Path 'E:\moved-documents\' -Directory | 
          Where-Object { $_.Name -match '^\d+-\d+-\d+$' } | 
          Sort-Object LastWriteTime | 
          Select-Object -First 1

为啥这么改:

  • -Directory:只抓子目录,排除无关文件
  • Sort-Object LastWriteTime:用正确的修改时间属性排序,默认是升序,最早修改的会排在最前面
  • 正则加了^和$:确保整个文件夹名完全匹配格式,不会漏判或误判

先验证再用更稳妥

你可以先跑下面这条命令,看看所有符合条件的文件夹和它们的修改时间,确认排序是不是正确的:

Get-ChildItem -Path 'E:\moved-documents\' -Directory | 
Where-Object { $_.Name -match '^\d+-\d+-\d+$' } | 
Select-Object Name, LastWriteTime | 
Sort-Object LastWriteTime

内容的提问来源于stack exchange,提问作者Razort4x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:04:23