首页 > 解决方案 > 使用格式获取创建日期

问题描述

我想遍历图像并将每个图像移动到创建日期的文件夹中,但我似乎没有看到关于如何格式化生成的日期时间字符串以及 ChildItem 如何工作的要点......

我打算创建一个包含创建日期“2017-03-06”的正确格式字符串的变量,以便我可以创建一个具有该名称的目录并将文件移动到那里。这将发生在循环(for,,foreach...)内。

$files = Get-ChildItem "P:\photos\"

for ($i=0; $i -lt $files.Count; $i++) {
    $outfile = $files[$i].FullName
    Write-Host "file: " $outfile
    $CreationDateStr = Get-ChildItem  $files[$i].CreationTime |
                       Get-Date -f "yyyy-MM-dd"
    Write-Host "file creation time: " $CreationDateStr
}

Read-Host -Prompt "Press Enter to exit"

这不起作用,并且代码不正确:

Get-ChildItem : 未找到光盘。不是名称为“03/06/2017 07”的光盘

这有效,但需要格式化:

$files[$i].CreationTime

文件创建时间:06.03.2017 07:53:21

标签: powershell

解决方案


我们不推荐Write-Host,因为您无法重定向它。

这就是我认为您正在寻找的内容:

Get-ChildItem "P:\Photos" | ForEach-Object {
  $dirName = "{0:yyyy-MM-dd}" -f $_.CreationTime
  if ( -not (Test-Path $dirName -PathType Container) ) {
    [Void] (New-Item $dirName -ItemType Directory)
  }
  Move-Item $_ $dirName -WhatIf
}

所以在循环中,我们检查指定的目录是否不存在(如果不存在则创建它),然后将文件移动到新目录。-WhatIf如果代码执行您想要的操作,请删除。


推荐阅读