PowerShellによりフォルダ内のファイルの更新日時をランダムな日時するサンプルコードを紹介します。
ファイルを自動生成したときとか更新日時が同じになるのですが、大人の事情で更新日時を変えざるを得ないときがあるのです。。
仕様
何かの成果物(設計書、仕様書)をプログラムで一括で作ってしまうと、すべての更新日時が同じになってしまうことがあります。
これを諸事情により人が作ったように、PowerShellでランダムな日付にしてみます。
実行前
実行後
このように更新日時をめちゃくちゃにしてみます。
ファイル
ソースコード
ChangeFileUpdatedDateTime.ps1
$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. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | PowerShell | 5.1 |
以上です。
コメント