如何根据文件名将文件传输到不同的子文件夹

时间:2019-05-23 07:31:23

标签: powershell

我有这些文件每天用于CCTV的录制,它们是基于每天日期的默认输出。我只希望脚本将它们与特定通道文件夹一起转移到NAS存储中。

01_20190515_135255
02_20190515_135315
03_20190515_135317
04_20190515_135317

我需要一个脚本根据其频道将其移动到其特定文件夹

N:\Rover\CH1
N:\Rover\CH2
N:\Rover\CH3
N:\Rover\CH4

换句话说,我只想将它们组织到各自的文件夹中,放入我的NAS存储中。我下面的脚本可以进行基本传输。我想我只需要添加一些内容即可将它们组织到NAS存储中。

Get-ChildItem -Path "default path" -Recurse |
Where-Object {$_.LastWriteTime -lt (Get-date).AddDays(-31)} |
Move-Item -destination "destination"

我在网上进行了很多搜索,发现脚本将使用正则表达式进行此类处理。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:0)

$DestinationPath = 'N:\Rover'

Get-ChildItem -Path "MyPath" -Recurse -File | Where-Object {$_.LastWriteTime -lt (Get-date).AddDays(-31)} | ForEach-Object {
    $Channel = ('CH' + $_.BaseName.Split("_")[0].TrimStart('0'))
    $DestinationFolder = Join-Path -Path $DestinationPath -ChildPath $Channel
    Move-Item -Path $_.FullName -Destination $DestinationFolder
}

答案 1 :(得分:0)

$files = Get-ChildItem -Path "default path" -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-31) }

foreach ($file in $files)
{
    $channel     = ($file.BaseName -replace '^([0-9]+)_.*','$1').TrimStart("0")
    $destination = "N:\Rover\CH$channel"
    $file | Move-Item -destination $destination
}

答案 2 :(得分:0)

主题的变化。

  • 由于Move-Item接受管道输入
  • 将基于RegEx的-match运算符与(捕获组)一起使用,以将前两位数字存储在自动变量$Matches[1]中,
  • 使用-f格式运算符在-Destination中构建{script block}

## Q:\Test\2019\05\23\SO_56270164.ps1
$Source = "A:\Test"  # "X:\What\ever"
$Target = "A:\Rover" # "N:\Rover"
$DaysOld = (Get-date).Date.AddDays(-31)

Get-ChildItem -Path "$Source\[0-9][0-9]_*_*" -File -Recurse |
  Where-Object {($_.LastWritetime -lt $DaysOld) -and
                ($_.BaseName -match '^(\d{2})_\d{8}_\d{6}') } |
    Move-Item -Destination {'{0}\CH{1}' -f $Target,([int]$Matches[1]) } -WhatIf
# Remove -WhatIf if the output looks OK

样品运行:

> gci A:\Test

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019-04-15     00:00              0 01_20190415_135255.ext
-a----       2019-05-15     00:00              0 01_20190515_135255.ext
-a----       2019-04-15     00:00              0 02_20190415_135315.ext
-a----       2019-05-15     00:00              0 02_20190515_135315.ext
-a----       2019-04-15     00:00              0 03_20190415_135317.ext
-a----       2019-05-15     00:00              0 03_20190515_135317.ext
-a----       2019-04-15     00:00              0 04_20190415_135317.ext
-a----       2019-05-15     00:00              0 04_20190515_135317.ext

> Q:\Test\2019\05\23\SO_56270164.ps1
> tree A:\ /F
A:\
├───Rover
│   ├───CH1
│   │       01_20190415_135255.ext
│   │
│   ├───CH2
│   │       02_20190415_135315.ext
│   │
│   ├───CH3
│   │       03_20190415_135317.ext
│   │
│   └───CH4
│           04_20190415_135317.ext
│
└───Test
        01_20190515_135255.ext
        02_20190515_135315.ext
        03_20190515_135317.ext
        04_20190515_135317.ext