PowerShell 修改檔案的 建立時間/修改時間/存取時間 程式
tags: 部落格文章
新文章有更易用的方式詳細請看這篇https://charlottehong.blogspot.com/2022/02/powershell.html
關於檔案的 修改時間 和 存取時間有什麼差別可以看這篇站內文
https://charlottehong.blogspot.com/2021/05/win10.html
字串格式和日期格式怎麼互轉可以參考這一邊
https://charlottehong.blogspot.com/2021/05/powershell-string-datetime.html
修改檔案時間
其實也就是讀檔然後修改而已。
$Date = New-Object DateTime(2021, 12, 31, 18, 30, 59);
$FileName = "Z:\a.txt"
$file = Get-Item $FileName
$file.CreationTime = $Date; #建立日期
$file.LastWriteTime = $Date; #修改日期
$file.LastAccessTime = $Date; #存取日期
懶人包程式
這是封裝好的程式,要使用的話按下 Win+X 在按 A 會跳出一個可以輸入的視窗,把底下全部貼上。
# 產生日期格式
function NewDatetime {
param (
[string]$date = "",
[string]$formatType = "yyyy-MM-dd HH:mm:ss"
)
# 未輸入日期則返回當前時間
if ([string]::IsNullOrEmpty($date)) {
$newDate = (Get-Date)
}
# 格式化日期
else {
$newDate = [DateTime]::ParseExact(
$date.Trim(), $formatType,
[CultureInfo]::InvariantCulture
)
}
return $newDate
}
# 讀取檔案日期
function readFileDate {
param (
[string]$FileName
)
$file = Get-Item $FileName;
Write-Host "建立日期" $file.CreationTime; #建立日期
Write-Host "修改日期" $file.LastWriteTime; #修改日期
Write-Host "存取日期" $file.LastAccessTime; #存取日期
}
# 改變檔案日期
function ChangeFileDate {
param (
# [Parameter(Mandatory, Position=0)]
[Parameter(Mandatory, Position=0)]
[string]$FileName,
[Parameter(ParameterSetName="setDetail")]
[datetime]$CreationTime,
[Parameter(ParameterSetName="setDetail")]
[datetime]$LastWriteTime,
[Parameter(ParameterSetName="setDetail")]
[datetime]$LastAccessTime,
[Parameter(ParameterSetName="setAll")]
[datetime]$AllTime,
[switch]$Preview
)
if ($AllTime) {
$CreationTime = $AllTime;
$LastWriteTime = $AllTime;
$LastAccessTime = $AllTime;
}
$file = Get-Item $FileName
if ($Preview) {
Write-Host "[$FileName]"
Write-Host " " $file.CreationTime "-->" $CreationTime
Write-Host " " $file.LastWriteTime "-->" $LastWriteTime
Write-Host " " $file.LastAccessTime "-->" $LastAccessTime
} else {
if ($CreationTime) {
$file.CreationTime = $CreationTime; #建立日期
} if ($LastWriteTime) {
$file.LastWriteTime = $LastWriteTime; #修改日期
} if ($LastAccessTime) {
$file.LastAccessTime = $LastAccessTime; #存取日期
}
}
}
全部貼上去之後按 Enter 就可以開始使用了
使用方法
在使用前先執行這兩行代碼(記得要按Ennter輸入)
會自動切換到桌面,並建一個檔案等一下要範例用
cd ~\Desktop
"" >> a.txt
好了就可以開始拉
查詢檔案日期
readFileDate a.txt
修改全部日期
ChangeFileDate "a.txt" -AllTime "2021-5-10 23:59:59"
改完之後按 ↑ 兩次選到剛剛執行查詢的代碼,可以看一下有沒有改變
修改單一日期
如果只想改變其中一個而已的話,改法像這樣
# 只改變建立日期
ChangeFileDate "a.txt" -CreationTime "2021-5-11 23:59:59"
# 只改變修改日期
ChangeFileDate "a.txt" -LastWriteTime "2021-5-12 23:59:59"
# 只改變存取日期
ChangeFileDate "a.txt" -LastAccessTime "2021-5-13 23:59:59"
如果要改其中兩個,可以打兩行也可以把後面的部分串起來就好
# 改任意兩個(這3組可以隨便串)
ChangeFileDate "a.txt" -CreationTime "2021-5-14 23:59:59" -LastAccessTime "2021-5-15 23:59:59"
預覽
如果你怕改錯的話可以在加上 -Preview
預覽一下
加上這個之後就不會變更日期,只會看到預覽的訊息
ChangeFileDate "a.txt" -AllTime "2021-5-10 23:59:59" -Preview
沒有留言:
張貼留言