Windows批处理文件 - 将文件按修改日期和/或创建日期排序到文件夹中

3
我正在尝试修改StackOverflow上发布的现有批处理文件以完成我的任务,但需要关于批处理文件语法和命令的特定指导。
该任务是将一个装满图像文件的文件夹按创建日期和/或修改日期(以较早的日期为准)排序到子文件夹中。
下面的脚本适用于文件的创建日期,但是,如果一组文件从另一个文件夹复制过来,则它们都具有相同的创建日期(但保留较早的“修改”日期,因此我希望使用较早的日期)。
非常感谢您提供任何建议。
我一直在尝试修改的代码:
    @echo off
    setlocal enabledelayedexpansion
    set RawData="C:\Users\Jernau\source_image\*.jpg"
    set ArchiveFolder="C:\Users\Jernau\source_image\organised\"
    for %%a in ("%RawData%") do (
        echo Processing %%~nxa ...
        set File=%%~fa
        for /f "tokens=1* delims=," %%a in ('wmic datafile where "name=
            '!File:\=\\!'" get 'CreationDate' /format:csv ^| find /i  
            "%ComputerName%"') do (set CreationDate=%%b)
        echo %%~nxa: !CreationDate!
        set cYear=!CreationDate:~0,4!
        set cMonth=!CreationDate:~4,2!
        set cDay=!CreationDate:~6,2!
        set TimeStamp=!cYear!-!cMonth!-!cDay!
        if not exist "%ArchiveFolder%\!TimeStamp!" (
            md "%ArchiveFolder%\!TimeStamp!"
        )
        move "!File!" "%ArchiveFolder%\!TimeStamp!"
    )
1个回答

1
这是我最终得到的(.VBS)脚本。修改自其他地方找到的代码,它通过照片拍摄日期为目标文件夹中的所有照片创建子文件夹。虽然不完美,但对于处理我的相机输出来说,它做得非常好。
folderName = "C:\photos to sort into folder\"

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(folderName)

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(folderName)
Set fc = f.Files

For Each fs In fc
   If lcase(fso.GetExtensionName(fs)) = "jpg" Then

      Set objFolderItem =  objFolder.ParseName(fs.Name)
      strValue = objFolder.GetDetailsOf(objFolderItem, 12)

      If strValue <> "" Then

'Local time settings cause problems with DatePart, so manually split and set strValue to a Date object
strValue = CDate(right(left(strValue,13),4) & "-" & right(left(strValue,7),2) & "-" & right(left(strValue,3),2))

          newYY = DatePart("yyyy", strValue)
          newMM = DatePart("m", strValue)
          If newMM < 10 Then newMM = "0" & newMM
          newDD = DatePart("d", strValue)
            If newDD < 10 Then newDD = "0" & newDD
            newFolder = folderName  & newYY & "-" & newMM & "-" & newDD    'check for valid drive and path

                If Not fso.FolderExists(newFolder) Then 
                fso.CreateFolder(newFolder)
                End If

'               fso.CopyFile fs.Path, newFolder & "\"
                fso.MoveFile fs.Path, newFolder & "\"
        End If 
    End If
Next

是的,发现得很好。一个重要的点。必要的命令在VB中找到,因此这段代码是VBScript脚本文件(.vbs)。 - Jernau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接