我想用重播增益信息重新标记我的所有音乐收藏(MP3,OGG 等),但我不想丢失它们原始的文件时间戳,因为有时我想知道何时将文件添加到我的收藏中,这样可以帮助我按日期在我最喜欢的文件管理器中对它们进行排序来找到它们。
所以我的问题是:是否有一个工具(或一个可以在批处理文件中使用的命令)可用于在重新标记之前批量备份所有文件的时间戳,然后稍后再恢复它们的文件时间戳?如果可以递归地对所有文件夹执行此操作,那就太好了!
答案1
假设你使用 Windows,你可以这样做TakeCommand 控制台 LE。
要备份时间戳,请使用以下命令:
pdir /(fpn"|"dy/m/d"|"th:m:s) /s /a:-d * >c:\flist.txt
这将创建一个文件(此处c:\flist.txt
),其中包含文件名(包括路径)及其日期(y/m/d 格式)和时间(h:m:s 格式)。这/s
使它具有递归性,因此它将选择子目录中的文件。
为了避免目录和名称中的空格问题,此版本的命令使用“|”符号作为字段的分隔符。
上述命令生成的示例文件:
[C:\Test]type c:\flist.txt
C:\Downloaded Files\JPSoft\TCCLE10\English.dll|2009/08/29|13:11:36
C:\Downloaded Files\JPSoft\TCCLE10\French.dll|2009/08/29|13:11:38
C:\Downloaded Files\JPSoft\TCCLE10\German.dll|2009/08/29|13:11:38
C:\Downloaded Files\JPSoft\TCCLE10\license.txt|2009/01/25|20:09:04
...
要恢复,请使用以下命令:
for /f "tokens=1,2,3 delims=|" %a in (@c:\flist.txt) do touch /d%b /t%c "%a"
此命令将解析上面存储的文件并运行几个touch
命令,将保存的日期和时间重新设置到文件中。“|”符号表示字段的分隔符。
答案2
PowerShell 解决方案(归功于 Co-Pilot):
读取文件日期备份.ps1
Get-ChildItem "C:\Path\to\Folder" -Force -Recurse | Select-Object FullName, CreationTime, LastAccessTime, LastWriteTime | Export-Csv "C:\temp\Timestamps.csv"
写入文件日期备份.ps1
# Read the CSV file (adjust the path as needed)
$csvPath = "C:\temp\Timestamps.csv"
$timestamps = Import-Csv $csvPath
# Update timestamps for each file
foreach ($entry in $timestamps) {
$filePath = $entry.FullName
$creationTime = [DateTime]::ParseExact($entry.CreationTime, "M/d/yyyy h:mm:ss tt", $null)
$lastAccessTime = [DateTime]::ParseExact($entry.LastAccessTime, "M/d/yyyy h:mm:ss tt", $null)
$lastWriteTime = [DateTime]::ParseExact($entry.LastWriteTime, "M/d/yyyy h:mm:ss tt", $null)
Set-ItemProperty -Path $filePath -Name CreationTime -Value $creationTime
Set-ItemProperty -Path $filePath -Name LastAccessTime -Value $lastAccessTime
Set-ItemProperty -Path $filePath -Name LastWriteTime -Value $lastWriteTime
}