首页 > 解决方案 > 根据文件名时间戳powershell将文件移动到年/月文件夹中

问题描述

我有数千个跨越 5 年的文件,我想将它们移动到年/月文件夹中。文件名都以

_yyyy_mm_dd_wxyz.dat

我正在寻找有关如何生成此类文件夹并使用 windows 命令外壳将文件移动到适当文件夹 yyyy/mm 的想法。

标签: powershellrecursiondirectory

解决方案


您需要一个带有(捕获组)的正则表达式来从文件名中提取年/月。
假设年/月文件夹应直接放在文件父位置。

未经-Version 2 测试

## Q:\Test\2018\07\23\SO_51485727.ps1
Push-Location 'x:\folder\to\start'
Get-ChildItem *_*_*_*_*.dat |
  Where-Object {$_.BaseName -match '_(\d{4})_(\d{2})_\d{2}_[a-z]+$'} | ForEach-Object {
    $TargetDir = "{0}\{1}" -f $Matches[1],$Matches[2]
    if (!(Test-Path $TargetDir)){MD $TargetDir | Out-Null}
    $_ | Move -Destination $TargetDir 
}

在我的 ramdriive 上运行脚本后的示例树 /f:

PS A:\> tree /F
A:.
├───2017
│   └───07
│           test_2017_07_24_xyz.dat
└───2018
    └───07
            test_2018_07_24_xyz.dat

推荐阅读