首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Powershell - 根据文件名中的日期戳移动文件

Powershell - 根据文件名中的日期戳移动文件
EN

Stack Overflow用户
提问于 2019-03-21 00:03:43
回答 1查看 0关注 0票数 0

我是PowerShell的新手,我有很多文件可以按月与PowerShell一起存档。每个文件在文件名中都有一个YYYYMM日期戳。我想移动日期戳超过24个月的文件。

示例: file1_201903.txt file2_201902.txt ... file3_201703.txt(这应该存档) file4_201702.txt(这应该存档)

请注意,源文件驻留在具有多个子文件夹的目录中。我想要脚本来检查所有子文件夹。不需要在目标中复制文件夹。

这是我到目前为止所尝试的内容。

代码语言:javascript
运行
复制
$SourceDir = 'C:\source'
$DestDir   = 'C:\destination'
$YearsAgo  = 2

$Then = ( Get-Date ).AddYears( -$YearsAgo ).Date

Get-ChildItem -Path $SourceDir |
    Where-Object {
        $DatePart = ( $_.BaseName -split '_' )[1]

        $FileDate = [datetime]::ParseExact( $DatePart, 'yyyyMMdd', [cultureinfo]::CurrentCulture )

        $FileDate -lt $Then
        } |
Move-Item -Destination $DestDir
EN

回答 1

Stack Overflow用户

发布于 2019-03-21 09:50:51

实际上看起来并不那么糟糕。;-)但-FilterScriptWhere-Object需要稍微调整一下:

代码语言:javascript
运行
复制
$SourceDir = 'C:\source'
$DestDir   = 'C:\destination'
$YearsAgo  = -2
$Then = ( Get-Date ).AddYears( $YearsAgo ).Date

Get-ChildItem -Path $SourceDir -Recurse |
    Where-Object {
        [datetime]::ParseExact( $(( $_.BaseName -split '_' )[1]), 'yyyyMMdd', [cultureinfo]::CurrentCulture ) -lt $Then
    } |
        Move-Item -Destination $DestDir

您可以使用更具描述性的方式Foreach-Object。有时这更容易阅读/理解/遵循:

代码语言:javascript
运行
复制
Get-ChildItem -Path $SourceDir -Recurse |
    ForEach-Object{
        $DatePart = ( $_.BaseName -split '_' )[1]
        $FileDate = [datetime]::ParseExact( $DatePart, 'yyyyMMdd', [cultureinfo]::CurrentCulture )
        if ($FileDate -lt $Then) {
            Move-Item -Path $_.FullName -Destination $DestDir
        } 
    }

但我现在无法测试==

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档