Powershell - 如何根据文件的最后修改日期创建目录?

时间:2014-02-24 05:11:37

标签: date powershell

我是PS的新手。我发现扫描目录(或递归目录)的脚本并获取文件的最后修改日期属性,但我无法根据此日期创建目录。我想要完成的是这样的事情:

日期-----------文件
2012-01-03 fax1.mfs
2012-01-04 fax2.mfs
2012-01-04 fax3.mfs

创建以下目录:
2012-01-03
2012-01-04

一旦我们有了这个,我们可以使用另一个脚本根据上次修改日期移动文件。

这是我到目前为止所创造的:

Get-ChildItem -Path C:\temp\path | Foreach {$_.LastWriteTime.tostring("MM-dd-yyyy")}

以字符串格式MM-dd-yyyy给出日期。我只需将其作为变量传递给类似

的变量
| % {New-Item -Name ($_).tostring("MMddyyyy") -ItemType directory}

哪些错误输出并且不创建任何目录。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

$Path = 'C:\temp\path'
Get-ChildItem $Path | Foreach-Object {mkdir "$Path\$($_.LastWriteTime.ToString('MM-dd-yyyy'))" -ErrorAction SilentlyContinue}

答案 1 :(得分:1)

基本上在狂汤姆叶片相同,但拉LastWriteTime作为一个单独的流水线级,并用显式的属性值调用的newitem。不那么简洁,但可以说更具可读性。

$p = "h:\temp\240214"

get-childitem -Path $p | 
    Select-Object -ExpandProperty LastWriteTime | 
        foreach-object { 
            New-Item -Path $p 
                -Name $_.ToString("yyyy-MM-dd") 
                -ItemType Directory 
                -ErrorAction SilentlyContinue
            }

解决将文件移动到适当文件夹的后续问题......

$p = "h:\temp\240214"

get-childitem -Path $p |
    Where-Object { ! ($_.PSIsContainer) } | 
    ForEach-Object {
        $newDir = join-path $p ($_.LastWriteTime).ToString("yyyy-MM-dd")
        New-Item -Path $newDir  `
            -ItemType Directory `
            -ErrorAction SilentlyContinue
        $_ | Move-Item -Destination $newDir
    }