我有许多文件夹,每个文件夹中都有文件。
结构看起来像这样:
Folder.No.1
Folder_No_2
Folder No 3
和其中的文件类似:
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
如您所见,某些文件夹包含。在名称中,有些包含_,有些包含空格。
一个一致的因素是,每个文件夹都会始终包含.avi文件,而不管其他任何内容。
因此,如何更改文件夹的Date Modified
日期/时间以使其与文件夹中包含的.avi文件的日期/时间匹配?
是否可以使用批处理文件执行此操作?
感谢您的帮助!
如果这个问题已经有了答案(使用命令行批处理脚本),请指导我,因为我已经看过很多答案,但是找不到确切的答案。
答案 0 :(得分:1)
这很容易完成,方法是遍历“ Folder *”目录,标识“ .avi”文件,并将目录LastWriteTime
设置为“ .avi”文件的目录。我尚未对此进行测试,但这应该提供一个很好的起点。
=== Set-FolderToAviTime.ps1
[CmdletBinding()]
Param()
$BaseDir = 'C:\src\t\redatedirs' # Directory containing 'Folder*' directories
$DirMask = 'Folder*' # 'Folder*'
$DirHash = @{}
Get-ChildItem -Path $BaseDir -Filter $DirMask |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
Write-Verbose "Working on directory $($_.FullName)"
$Dir = Get-Item -Path $_.FullName
if (-not (Test-Path -Path "$_\*" -Filter '*.avi')) {
Write-Verbose -Message "No .avi file in $($Dir.fullname)"
}
Get-ChildItem -Path "$_\*" -Filter '*.avi' |
Where-Object { -not $_.PSIsContainer } |
Select-Object -First 1 |
ForEach-Object {
Write-Verbose "Using .avi file $($_.FullName)"
$DirHash[$Dir] = $_.LastWriteTime
}
}
$DirHash.Keys | ForEach-Object { $_.LastWriteTime = $DirHash[$_] }
=== Set-FolderToAviTime.bat
powershell -NoLogo -NoProfile -Command ".\redatedirs.ps1 -Verbose"