2021年5月12日 星期三

PowerShell 修改檔案的 建立時間/修改時間/存取時間 程式

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

沒有留言:

張貼留言