需要 Windows 脚本来创建以文件日期命名的文件夹并将文件移动到匹配的文件夹

需要 Windows 脚本来创建以文件日期命名的文件夹并将文件移动到匹配的文件夹

我需要一个 CMD 或 Powershell 脚本或批处理文件来

  • 逐一浏览文件列表
  • 如果文件夹不存在,则创建一个以文件日期命名的文件夹,然后
  • 将该文件移动到其匹配的文件夹中。

我有一份大约 400 个文件的列表,如下所示:

在此处输入图片描述

以此为例,脚本应该创建一个包含前两个文件的文件夹,名为2018-05-16,以及一个包含接下来 3 个文件的文件夹,名为2018-05-17等。最好位于与文件现在所在的同一文件夹中。

我使用的是 Windows 8,看是否有什么区别。

答案1

之前的示例目录

> gci

    Verzeichnis: A:\

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2018-05-16     16:02             14 GOPR0150.MP4
-a----       2018-05-16     16:10             14 GOPR0151.MP4
-a----       2018-05-17     01:25             14 GOPR0152.MP4
-a----       2018-05-17     01:32             14 GOPR0153.MP4
-a----       2018-05-17     01:32             14 GOPR0154.MP4

运行这个小型 PowerShell 脚本

## Q:\Test\2018\09\06\SU_1355955.ps
ForEach($File in (Get-ChildItem '.\GOPR*.mp4')){
    $DestFolder = Join-Path $File.DirectoryName $File.LastWriteTime.ToString('yyyy-MM-dd')
    if (!(Test-Path $DestFolder)){MD $DestFolder|Out-Null}
    $File | Move-Item -Destination $DestFolder
}

> gci -recurse -file

    Verzeichnis: A:\2018-05-16

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2018-05-16     16:02             14 GOPR0150.MP4
-a----       2018-05-16     16:10             14 GOPR0151.MP4

    Verzeichnis: A:\2018-05-17

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2018-05-17     01:25             14 GOPR0152.MP4
-a----       2018-05-17     01:32             14 GOPR0153.MP4
-a----       2018-05-17     01:32             14 GOPR0154.MP4

编辑:根据您当地的日期格式,您可能必须
改成.ToString('yyyy\-MM\-dd')

答案2

脚本无法识别 DestFolder,不知道我做错了什么。我还更改了日期格式。在命令提示符中运行,我得到以下内容

E:\Travel Videos\GOPRO\20221015>ForEach($File in (Get-ChildItem '.\GOPR*.mp4')){'ForEach' 未被识别为内部或外部命令、可操作程序或批处理文件。

E:\Travel Videos\GOPRO\20221015> $DestFolder = Join-Path $File.DirectoryName $File.LastWriteTime.ToString('dd\MM\yyyy') '$DestFolder' 未被识别为内部或外部命令、可操作程序或批处理文件。

E:\Travel Videos\GOPRO\20221015> if (!(Test-Path $DestFolder)){MD $DestFolder|Out-Null} $DestFolder)){MD 此时是意外的。

E:\Travel Videos\GOPRO\20221015> $File | Move-Item -Destination $DestFolder '$File' 未被识别为内部或外部命令、可操作程序或批处理文件。

相关内容