Powershell 如何使用.csv数据修改多个文件的“创建日期”属性?
我不知道该如何表达我的问题,因为这不是我熟悉的事情, 但Powershell可能是我需要使用的 我看到这个:(4年前) 我想知道我怎样才能把这个应用到我的问题上 我在文件夹Powershell 如何使用.csv数据修改多个文件的“创建日期”属性?,powershell,file,attributes,windows-10-desktop,Powershell,File,Attributes,Windows 10 Desktop,我不知道该如何表达我的问题,因为这不是我熟悉的事情, 但Powershell可能是我需要使用的 我看到这个:(4年前) 我想知道我怎样才能把这个应用到我的问题上 我在文件夹videos中有许多.mp4文件的创建日期属性不正确 我还有一个.csv文件,按时间顺序(使用相应的文件名)列出视频中的所有文件 第一个文件从2019年11月15日开始,每个连续视频在前一个文件之后1天创建 powershell如何帮助我使用.csv文件中的文件行修改每个文件的创建日期属性 CSV文件:包含按时间顺序排列的文件
videos
中有许多.mp4
文件的创建日期属性不正确
我还有一个.csv
文件,按时间顺序(使用相应的文件名)列出视频中的所有文件
第一个文件从2019年11月15日开始,每个连续视频在前一个文件之后1天创建
powershell如何帮助我使用.csv
文件中的文件行修改每个文件的创建日期
属性
CSV文件:包含按时间顺序排列的文件名
视频文件夹:
name date created
video1 dd/mm/yyyy
video2 dd/mm/yyyy
video3 dd/mm/yyyy
... ... <---- dates are incorrect
name date created
video1 15/11/2019
video2 16/11/2019
video3 17/11/2019
... ... <---- dates are in chronological order according to .csv file
name创建日期
视频1日/月/年
视频2年月日
视频3年月日
... ... 假设:
A) 您的所有文件都在同一文件夹中
或者B)CSV中有完整路径
C)您的csv文件头称为文件名
$csvfile='Path\to\csvfile.csv'
$startdate=获取日期2019年11月15日
将位置路径\设置为\视频文件
导入Csv$csvfile | ForEach对象{
#设置creationtime
(获取项目$\文件名)。CreationTime=$startdate
#将日期增加一天
$startdate=$startdate.AddDays(1)
}
@Doug Maurer提供了一个不完整的答案(不起作用),因此以下是可行的解决方案:
$csvfile = 'path/to/csvfile.csv'
$startdate = [datetime]::ParseExact('15/11/2019','dd/MM/yyyy',$null)
Set-Location 'path/to/folder'
Import-Csv $csvfile | ForEach-Object {
#set creationtime
(Get-Item $_.filename).CreationTime = $startdate
#increase date by one day
$startdate = $startdate.AddDays(1)
}
谢谢你,道格!我现在还不会使用您的解决方案,我还需要再获取一些文件,但是在修改之前,我是否需要首先从所有文件中删除错误的创建日期
属性?或者你的解决方案会解决这个问题吗?它会改变它。最后一件事,是基于文件名的搜索?(csv中的文件名与文件夹中的文件名完全相同)。因此:索引0:将在文件夹中查找video1
,并更新其属性,然后索引1:将在文件夹中查找video2
,并更新其属性等?这不是搜索。它将引用csv中列出的每个文件的名称。每个文件名都将使用$\文件名
$csvfile = 'path/to/csvfile.csv'
$startdate = [datetime]::ParseExact('15/11/2019','dd/MM/yyyy',$null)
Set-Location 'path/to/folder'
Import-Csv $csvfile | ForEach-Object {
#set creationtime
(Get-Item $_.filename).CreationTime = $startdate
#increase date by one day
$startdate = $startdate.AddDays(1)
}