Cambie recursivamente la propiedad DateLastModified de la carpeta para que coincida con la del archivo dentro

Cambie recursivamente la propiedad DateLastModified de la carpeta para que coincida con la del archivo dentro

Tengo varias carpetas, cada una con archivos dentro de la carpeta.

La estructura se parece a esto:

Carpeta.No.1
Carpeta_No_2
Carpeta número 3

y los archivos que contiene son algo como:

Folder.No.1\My.Movie.1.avi
Folder.No.1\My.Movie.1.txt

Folder_No_2\My_Movie_2.avi
Folder_No_2\My_Movie_2.jpg
Folder_No_2\My_Movie_2.txt

Folder No 3\My Movie 3.avi

Como puede ver, algunas carpetas contienen .el nombre, otras contienen espacios _y otras contienen espacios.

El único factor consistente es que cada carpetasiemprecontener un archivo .avi, independientemente de cualquier otra cosa.

Por lo tanto, ¿cómo puedo cambiar la Date Modifiedfecha/hora de la carpeta para que coincida con la del archivo .avi contenido en la carpeta? ¿Hay alguna manera de hacer esto copiando el DateLastModifiedarchivo interno (el secundario) a la carpeta principal usando VBScript?

Hasta ahora estoy trabajando en algo como esto:

Function Recursion(strDirectory)
On Error Resume Next 
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strDirectory)
Set colFiles = objFolder.Files
Dim objFolderShellItem

For Each objFile in colFiles
If UCase(objFSO.GetExtensionName(objFile)) = "AVI" Then
    Set objShell = CreateObject("Shell.Application")
    Set objShellFolder = objShell.NameSpace(strDirectory)
    Set objFolderItem = objFolder.Self
    'folder
    objFolderItem.ModifyDate = objFile.DateLastModified
    'file
    'objShellFolder.Items.Item(objFile.Name).ModifyDate = objFile.DateLastModified
    Wscript.Echo "Date of folder" & objFolder.Name & "was updated" 
End If
Next

For Each folder In objFolder.SubFolders
    Recursion(folder)  '<- recurse here
Next

Set objFso = Nothing
Set objFolder = Nothing
set colFiles = Nothing

End Function




Call Recursion("C:\Temp")

pero falla al llamar desde la línea de comando con:cscript CopyDateToParent.vbs

¿Qué es lo que hace que esto no funcione?

Respuesta1

Si tiene un sistema antiguo, así es como lo habría manejado.

Ya no está permitido desde vbs. Necesitará un lenguaje compilado o posibles privilegios a nivel de kernel para hacerlo.

Google PowerShell en este sitio, se hace muy fácilmente.

Function Recursion(strDirectory)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strDirectory)
Set colFiles = objFolder.Files
Dim objFolderShellItem
Dim blnFound



blnFound = false
For Each objFile in colFiles
If UCase(objFSO.GetExtensionName(objFile)) = "AVI" Then
    blnFound = true
    dtDateTime = objFile.DateLastModified
    'if you care only about one file, then you can exit for here for performance, or you have to do more logic on keep thing max date for the avi file or min.  you never said.
    ''file
    ''objShellFolder.Items.Item(objFile.Name).ModifyDate = objFile.DateLastModified
End If
Next

For Each folder In objFolder.SubFolders
    if blnFound = true Then
        Set objShell = CreateObject("Shell.Application")
        Set objShellFolder = objShell.NameSpace(strDirectory)''should be parent folder not 'folder' its in
        Set objFolderItem = objShellFolder.Self
        objFolderItem.ModifyDate = dtDateTime   ''no longer possible since around 2010
    End IF
    Recursion(folder)  '<- recurse here
Next

Set objFso = Nothing
Set objFolder = Nothing
set colFiles = Nothing

End Function




Call Recursion("C:\Temp\")

Lo siento, no tengo ningún sistema "Microsoft" para ayudarte.

function GetFiles($path = $pwd) 
{ 
    foreach ($item in Get-ChildItem $path)
    {
        if (Test-Path $item.FullName -PathType Container) 
        {
            $item.LastWriteTime = $dateToChange 
            GetFiles $item.FullName
        } 
        else 
        {   
            if($item.extension.ToUpper() -eq 'AVI')
            {
                $dateToChange = $item.LastWritten
            }
        }
    } 
}

información relacionada