「ファイルの更新日付をまとめて変えたい」
「処理日時を自動でファイル名に入れたい」
「古いファイルの日付を整理したい」
ファイル管理やシステム運用で、こんなふうに思ったことはありませんか?
そんな時に便利なのがPowerShellの日付操作です。
PowerShellなら、ファイルの日付(タイムスタンプ)を書き換えたり、現在の日付を取得してログ名に付けたり、さまざまなことが簡単にできます。
この記事では、Windows PowerShellで日付を取得・変更・ファイルに反映する方法を初心者にもわかるように解説します。
読み終わるころには「PowerShellの日付操作って意外とシンプル!」と感じるはずです。
PowerShellで現在の日付を取得する

Get-Dateコマンドの基本
現在の日付と時刻はGet-Date
コマンドレットで簡単に取得できます。
基本的な使い方
# 現在の日時を表示
Get-Date
実行結果例:
2025年7月5日 13:45:30
日付のみを取得
# 日付のみ(時刻なし)
Get-Date -DisplayHint Date
実行結果:
2025年7月5日
時刻のみを取得
# 時刻のみ(日付なし)
Get-Date -DisplayHint Time
実行結果:
13:45:30
日付フォーマットのカスタマイズ
よく使われるフォーマット例
フォーマット | コマンド | 結果例 |
---|---|---|
年月日(ハイフン) | Get-Date -Format "yyyy-MM-dd" | 2025-07-05 |
年月日(スラッシュ) | Get-Date -Format "yyyy/MM/dd" | 2025/07/05 |
年月日(日本語) | Get-Date -Format "yyyy年MM月dd日" | 2025年07月05日 |
日時(標準) | Get-Date -Format "yyyy-MM-dd HH:mm:ss" | 2025-07-05 13:45:30 |
ファイル名用 | Get-Date -Format "yyyyMMdd_HHmmss" | 20250705_134530 |
ISO 8601形式 | Get-Date -Format "yyyy-MM-ddTHH:mm:ss" | 2025-07-05T13:45:30 |
詳細なフォーマット指定子
指定子 | 意味 | 例 |
---|---|---|
yyyy | 4桁の年 | 2025 |
yy | 2桁の年 | 25 |
MM | 2桁の月 | 07 |
M | 月(ゼロ埋めなし) | 7 |
dd | 2桁の日 | 05 |
d | 日(ゼロ埋めなし) | 5 |
HH | 24時間制の時(2桁) | 13 |
hh | 12時間制の時(2桁) | 01 |
mm | 分(2桁) | 45 |
ss | 秒(2桁) | 30 |
tt | AM/PM | PM |
実践的なフォーマット例
# ログファイル用のタイムスタンプ
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
Write-Host "ログファイル: log_$timestamp.txt"
# 日本語形式
$jpDate = Get-Date -Format "yyyy年MM月dd日(ddd) HH時mm分"
Write-Host $jpDate
# ファイルバックアップ用
$backupSuffix = Get-Date -Format "yyyyMMdd"
Write-Host "backup_file_$backupSuffix.txt"
日付の計算と操作
日付の加算・減算
# 現在日時から計算
$now = Get-Date
# 7日後
$future = $now.AddDays(7)
Write-Host "7日後: $($future.ToString('yyyy-MM-dd'))"
# 3日前
$past = $now.AddDays(-3)
Write-Host "3日前: $($past.ToString('yyyy-MM-dd'))"
# 1時間後
$laterHour = $now.AddHours(1)
Write-Host "1時間後: $($laterHour.ToString('HH:mm:ss'))"
# 30日前
$monthAgo = $now.AddDays(-30)
Write-Host "30日前: $($monthAgo.ToString('yyyy-MM-dd'))"
より複雑な日付計算
# 月の加算・減算
$nextMonth = (Get-Date).AddMonths(1)
$lastYear = (Get-Date).AddYears(-1)
# 月初・月末の取得
$now = Get-Date
$monthStart = Get-Date -Day 1 -Hour 0 -Minute 0 -Second 0
$monthEnd = $monthStart.AddMonths(1).AddDays(-1)
Write-Host "今月の開始: $($monthStart.ToString('yyyy-MM-dd'))"
Write-Host "今月の終了: $($monthEnd.ToString('yyyy-MM-dd'))"
# 曜日の取得
$dayOfWeek = (Get-Date).DayOfWeek
Write-Host "今日は: $dayOfWeek"
PowerShellでファイルの日付(タイムスタンプ)を変更する

ファイルの日付情報の種類
Windowsのファイルには3つの重要な日付情報があります:
項目 | PowerShellプロパティ | 意味 |
---|---|---|
作成日時 | CreationTime | ファイルが作成された日時 |
更新日時 | LastWriteTime | ファイルが最後に変更された日時 |
アクセス日時 | LastAccessTime | ファイルが最後にアクセスされた日時 |
単一ファイルの日付変更
基本的な日付変更
# ファイルの更新日時を変更
$file = Get-Item "C:\example\test.txt"
$file.LastWriteTime = "2025-07-05 12:00:00"
# より簡潔な書き方
(Get-Item "C:\example\test.txt").LastWriteTime = "2025-07-05 12:00:00"
すべての日付情報を一度に変更
$targetDate = "2025-07-01 08:00:00"
$file = Get-Item "C:\example\test.txt"
$file.CreationTime = $targetDate
$file.LastWriteTime = $targetDate
$file.LastAccessTime = $targetDate
Write-Host "ファイルの日付を $targetDate に変更しました"
現在日時に更新
# 現在の日時を更新日時にセット
(Get-Item "C:\example\test.txt").LastWriteTime = Get-Date
# すべての日付を現在日時に
$now = Get-Date
$file = Get-Item "C:\example\test.txt"
$file.CreationTime = $now
$file.LastWriteTime = $now
$file.LastAccessTime = $now
複数ファイルの一括日付変更
特定の拡張子のファイルを一括変更
# .txtファイルをすべて変更
Get-ChildItem "C:\example\*.txt" | ForEach-Object {
$_.LastWriteTime = "2025-07-01 00:00:00"
Write-Host "変更済み: $($_.Name)"
}
フォルダ内のすべてのファイルを変更
# フォルダ内のすべてのファイルの日付を統一
$targetDate = "2025-01-01 09:00:00"
Get-ChildItem "C:\example" -File | ForEach-Object {
$_.CreationTime = $targetDate
$_.LastWriteTime = $targetDate
$_.LastAccessTime = $targetDate
Write-Host "処理完了: $($_.Name)"
}
条件を指定した一括変更
# 1週間以内に作成されたファイルのみ変更
$oneWeekAgo = (Get-Date).AddDays(-7)
$newDate = "2025-06-01 10:00:00"
Get-ChildItem "C:\example" -File | Where-Object {
$_.CreationTime -gt $oneWeekAgo
} | ForEach-Object {
$_.LastWriteTime = $newDate
Write-Host "更新: $($_.Name) - $($_.CreationTime)"
}
サブフォルダも含めた再帰的な変更
# サブフォルダも含めてすべてのファイルを変更
$targetDate = Get-Date "2025-07-01 12:00:00"
Get-ChildItem "C:\example" -Recurse -File | ForEach-Object {
$_.LastWriteTime = $targetDate
Write-Host "変更: $($_.FullName)"
}
実践的な日付操作の応用例
ログファイルの自動生成
日付付きログファイルの作成
# 日次ログファイルの作成
function New-DailyLogFile {
param(
[string]$LogDirectory = "C:\logs",
[string]$Prefix = "system"
)
# ディレクトリが存在しない場合は作成
if (!(Test-Path $LogDirectory)) {
New-Item -Path $LogDirectory -ItemType Directory -Force
}
# 日付付きファイル名を生成
$dateString = Get-Date -Format "yyyy-MM-dd"
$logFileName = "$Prefix`_$dateString.log"
$logFilePath = Join-Path $LogDirectory $logFileName
# ログファイルが存在しない場合は作成
if (!(Test-Path $logFilePath)) {
$header = "=== ログ開始: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') ==="
$header | Out-File -FilePath $logFilePath -Encoding UTF8
Write-Host "新しいログファイルを作成: $logFilePath"
}
return $logFilePath
}
# 使用例
$logFile = New-DailyLogFile -LogDirectory "C:\mylogs" -Prefix "application"
"処理開始: $(Get-Date)" | Add-Content -Path $logFile
時間付きログエントリの追加
function Add-LogEntry {
param(
[string]$LogFile,
[string]$Message,
[string]$Level = "INFO"
)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logEntry = "[$timestamp] [$Level] $Message"
$logEntry | Add-Content -Path $LogFile
Write-Host $logEntry
}
# 使用例
$logFile = "C:\logs\application_$(Get-Date -Format 'yyyy-MM-dd').log"
Add-LogEntry -LogFile $logFile -Message "アプリケーション開始" -Level "INFO"
Add-LogEntry -LogFile $logFile -Message "データベース接続エラー" -Level "ERROR"
ファイルバックアップシステム
日付ベースのバックアップ
function Backup-FilesWithTimestamp {
param(
[string]$SourcePath,
[string]$BackupDirectory,
[string]$FilePattern = "*.*"
)
# バックアップディレクトリを作成
$backupTimestamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
$backupFolder = Join-Path $BackupDirectory "Backup_$backupTimestamp"
if (!(Test-Path $backupFolder)) {
New-Item -Path $backupFolder -ItemType Directory -Force
Write-Host "バックアップフォルダを作成: $backupFolder"
}
# ファイルをコピー
$copiedCount = 0
Get-ChildItem -Path $SourcePath -Filter $FilePattern | ForEach-Object {
$destinationPath = Join-Path $backupFolder $_.Name
Copy-Item -Path $_.FullName -Destination $destinationPath
# コピー先ファイルの日付を元ファイルと同じに設定
$destFile = Get-Item $destinationPath
$destFile.CreationTime = $_.CreationTime
$destFile.LastWriteTime = $_.LastWriteTime
$destFile.LastAccessTime = $_.LastAccessTime
$copiedCount++
Write-Host "バックアップ: $($_.Name)"
}
Write-Host "バックアップ完了: $copiedCount ファイル → $backupFolder"
return $backupFolder
}
# 使用例
Backup-FilesWithTimestamp -SourcePath "C:\important" -BackupDirectory "C:\backups" -FilePattern "*.docx"
古いファイルの整理
指定日数より古いファイルの検索・削除
function Remove-OldFiles {
param(
[string]$Path,
[int]$DaysOld = 30,
[switch]$WhatIf
)
$cutoffDate = (Get-Date).AddDays(-$DaysOld)
$oldFiles = Get-ChildItem -Path $Path -File | Where-Object {
$_.LastWriteTime -lt $cutoffDate
}
Write-Host "=== $DaysOld 日より古いファイルの検索結果 ==="
Write-Host "対象フォルダ: $Path"
Write-Host "基準日: $($cutoffDate.ToString('yyyy-MM-dd'))"
Write-Host "見つかったファイル数: $($oldFiles.Count)"
Write-Host ""
if ($oldFiles.Count -eq 0) {
Write-Host "削除対象のファイルはありません。"
return
}
foreach ($file in $oldFiles) {
$ageInDays = [math]::Round((Get-Date - $file.LastWriteTime).TotalDays, 1)
if ($WhatIf) {
Write-Host "削除予定: $($file.Name) (更新: $($file.LastWriteTime.ToString('yyyy-MM-dd')), $ageInDays 日前)"
} else {
Remove-Item -Path $file.FullName -Force
Write-Host "削除済み: $($file.Name) (更新: $($file.LastWriteTime.ToString('yyyy-MM-dd')), $ageInDays 日前)"
}
}
if ($WhatIf) {
Write-Host ""
Write-Host "※ 実際に削除するには -WhatIf パラメータを外してください"
}
}
# 使用例(まずはテスト実行)
Remove-OldFiles -Path "C:\temp" -DaysOld 7 -WhatIf
# 実際に削除
# Remove-OldFiles -Path "C:\temp" -DaysOld 7
ファイル整理の自動化
日付別フォルダへの自動分類
function Organize-FilesByDate {
param(
[string]$SourcePath,
[string]$DestinationPath,
[string]$DateProperty = "LastWriteTime" # CreationTime, LastWriteTime, LastAccessTime
)
Get-ChildItem -Path $SourcePath -File | ForEach-Object {
# ファイルの日付を取得
$fileDate = $_.$DateProperty
$yearMonth = $fileDate.ToString("yyyy-MM")
# 年月フォルダを作成
$destinationFolder = Join-Path $DestinationPath $yearMonth
if (!(Test-Path $destinationFolder)) {
New-Item -Path $destinationFolder -ItemType Directory -Force
Write-Host "フォルダ作成: $destinationFolder"
}
# ファイルを移動
$destinationFile = Join-Path $destinationFolder $_.Name
Move-Item -Path $_.FullName -Destination $destinationFile
Write-Host "移動: $($_.Name) → $yearMonth\\"
}
}
# 使用例
Organize-FilesByDate -SourcePath "C:\downloads" -DestinationPath "C:\organized" -DateProperty "LastWriteTime"
高度な日付操作テクニック

特定の日付パターンでのファイル検索
# 特定の月に作成されたファイルを検索
function Find-FilesByMonth {
param(
[string]$Path,
[int]$Year,
[int]$Month
)
$startDate = Get-Date -Year $Year -Month $Month -Day 1 -Hour 0 -Minute 0 -Second 0
$endDate = $startDate.AddMonths(1).AddDays(-1)
Write-Host "検索期間: $($startDate.ToString('yyyy-MM-dd')) ~ $($endDate.ToString('yyyy-MM-dd'))"
$files = Get-ChildItem -Path $Path -File | Where-Object {
$_.CreationTime -ge $startDate -and $_.CreationTime -le $endDate
}
Write-Host "見つかったファイル数: $($files.Count)"
$files | ForEach-Object {
Write-Host "$($_.Name) - 作成日: $($_.CreationTime.ToString('yyyy-MM-dd HH:mm:ss'))"
}
return $files
}
# 使用例:2025年6月に作成されたファイルを検索
Find-FilesByMonth -Path "C:\documents" -Year 2025 -Month 6
営業日の計算
function Get-BusinessDays {
param(
[DateTime]$StartDate,
[DateTime]$EndDate,
[DayOfWeek[]]$Weekends = @([DayOfWeek]::Saturday, [DayOfWeek]::Sunday)
)
$businessDays = @()
$currentDate = $StartDate
while ($currentDate -le $EndDate) {
if ($currentDate.DayOfWeek -notin $Weekends) {
$businessDays += $currentDate
}
$currentDate = $currentDate.AddDays(1)
}
return $businessDays
}
# 使用例:今月の営業日を取得
$monthStart = Get-Date -Day 1
$monthEnd = $monthStart.AddMonths(1).AddDays(-1)
$businessDays = Get-BusinessDays -StartDate $monthStart -EndDate $monthEnd
Write-Host "今月の営業日数: $($businessDays.Count)"
$businessDays | ForEach-Object { Write-Host $_.ToString("yyyy-MM-dd (ddd)") }
よくあるエラーと対処法
エラーパターン別の対処法
1. 日付フォーマットエラー
エラー例:
Cannot convert value "2025/13/01" to type "System.DateTime"
原因と対処:
# 間違った例
$date = "2025/13/01" # 13月は存在しない
# 正しい例
$date = "2025/12/01"
$date = Get-Date "2025-12-01"
# 文化圏に依存しない形式を使用
$date = [DateTime]::ParseExact("01/12/2025", "dd/MM/yyyy", $null)
2. ファイルアクセス権限エラー
エラー例:
Access to the path 'C:\protected\file.txt' is denied.
対処法:
# 管理者権限でPowerShellを実行
# または、アクセス可能なファイルかチェック
if (Test-Path "C:\example\file.txt") {
try {
(Get-Item "C:\example\file.txt").LastWriteTime = Get-Date
Write-Host "日付変更成功"
} catch {
Write-Host "エラー: $($_.Exception.Message)"
}
}
3. ファイルが使用中エラー
対処法:
# ファイルが開かれていないかチェック
function Test-FileInUse {
param([string]$FilePath)
try {
$file = [System.IO.File]::Open($FilePath, 'Open', 'Write')
$file.Close()
return $false
} catch {
return $true
}
}
if (Test-FileInUse "C:\example\file.txt") {
Write-Host "ファイルが使用中です。閉じてから再実行してください。"
} else {
(Get-Item "C:\example\file.txt").LastWriteTime = Get-Date
}
まとめ:PowerShellで効率的な日付管理を実現しよう
Windows PowerShellを使えば、面倒なファイル日付の管理や日時処理が驚くほど簡単になります。
今回学んだ重要ポイント
- 日付取得:
Get-Date
で現在日時を自由にフォーマット - ファイル日付変更:
LastWriteTime
等のプロパティで直接変更 - 一括処理:
Get-ChildItem
とForEach-Object
で複数ファイル対応 - 日付計算:
AddDays()
等のメソッドで柔軟な計算 - 実用スクリプト: ログ管理、バックアップ、ファイル整理の自動化
コメント