PowerShellによりフォルダ内のファイルの更新日時をランダムな日時するサンプルコード

PowerShell
記事内に広告が含まれています。

PowerShellによりフォルダ内のファイルの更新日時をランダムな日時するサンプルコードを紹介します。

ファイルを自動生成したときとか更新日時が同じになるのですが、大人の事情で更新日時を変えざるを得ないときがあるのです。。

仕様

何かの成果物(設計書、仕様書)をプログラムで一括で作ってしまうと、すべての更新日時が同じになってしまうことがあります。

これを諸事情により人が作ったように、PowerShellでランダムな日付にしてみます。

実行前

実行後

このように更新日時をめちゃくちゃにしてみます。

ファイル

ソースコード

ChangeFileUpdatedDateTime.ps1

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$files = Get-Item *.xlsx
 
foreach($file in $files){
 
    # 現在の日時
    $randomDay = (Get-Date)
 
    # 減算する日時の値を取得
    # 年(0~5年)
    $minusYear = Get-Random -Maximum 5 -Minimum 0
    # 月(0~3か月)
    $minusMonth = Get-Random -Maximum 3 -Minimum 0
    # 日(0~31日)
    $minusDay = Get-Random -Maximum 28 -Minimum 0
    # 時(0~23時間)
    $minusHour = Get-Random -Maximum 23 -Minimum 0
    # 分(0~59分)
    $minusMinute = Get-Random -Maximum 59 -Minimum 0
    # 秒(0~59秒)
    $minusSecond = Get-Random -Maximum 59 -Minimum 0
 
    # 減算する日時の設定
    $randomDay = $randomDay.AddYears(-$minusYear)
    $randomDay = $randomDay.AddMonths(-$minusMonth)
    $randomDay = $randomDay.AddDays(-$minusDay)
    $randomDay = $randomDay.AddHours(-$minusHour)
    $randomDay = $randomDay.AddMinutes(-$minusMinute)
    $randomDay = $randomDay.Addseconds(-$minusSecond)
 
    # 更新日時の設定
    Set-ItemProperty $file -name LastWriteTime -value $randomDay
    #Set-ItemProperty $file -name LastWriteTime -value '2016/11/13 09:00:00'
 
}
 
Pause

対象ファイルは「*.xlsx」としていますが、*.txtなどでも実行可能です。

このプログラムは現在時刻を取得して、そこから年月日時分秒をランダムに減算していきます。

今が2023年だったら-5年して今~5年前程度、今が6月だったら-3か月して、4月~6月の範囲・・・という具合にです。

時刻はあえて0~23の範囲にして、24時間仕事をしているようにします。

なお、間違っても未来の更新日時にしないようにしましょう。改ざんの疑いをかけられます。

ファイル配置

以下のようにソースコードと更新対象のファイルを同じディレクトリに格納します。

テスト実行

実行は右クリックメニューの「PowerShellで実行」をクリックします。

すると、*.xlsxの更新日付が過去のランダムな日付に変わっています。

参考情報

環境

下記の環境で作成・実行しております。

No.環境バージョン
1OSWindows10
2PowerShell5.1
環境一覧

以上です。