skip to content
barorin&?

PowerShellで日付範囲を指定してカレンダーファイルを生成するスクリプト

/ 3 min read

Table of Contents

はじめに

カレンダーアプリをあえて使わない。1行のテキストで管理する超スマートなタスク管理術 という記事を読んで、ちょっと面白そうだなと思ったので、PowerShellを使って指定した日付範囲のカレンダーデータを生成し、週番号と曜日を付与してテキストファイルに出力するスクリプトを作成してみました。

スクリプトの特徴

主な機能

  • 開始日と終了日を指定してカレンダーデータを生成
  • 各日付に週番号(ISO週番号準拠)と曜日を自動付与
  • 新規ファイル作成または既存ファイルへの追加が可能
  • UTF-8エンコーディングでの日本語対応

出力形式

2025-01-01 w1 Wed
2025-01-02 w1 Thu
2025-01-03 w1 Fri
...

スプリプトコード

以下がスクリプトの全コードです。

Terminal window
# 日付範囲を指定してファイルに書き込むPowerShellスクリプト
# 使い方
# 新規作成
# .\CreateCalendar.ps1 -StartDate "2025-01-01" -EndDate "2025-12-31" -OutputFile "Calendar.txt"
# 既存ファイルへ追加
# .\CreateCalendar.ps1 -StartDate "2026-01-01" -EndDate "2026-12-31" -OutputFile "Calendar.txt" -Append
param (
[Parameter(Mandatory=$false)]
[string]$StartDate = (Get-Date).ToString("yyyy-MM-dd"),
[Parameter(Mandatory=$false)]
[string]$EndDate = (Get-Date).AddYears(1).ToString("yyyy-MM-dd"),
[Parameter(Mandatory=$false)]
[string]$OutputFile = "Calendar.txt",
[Parameter(Mandatory=$false)]
[switch]$Append = $false
)
# 日付文字列をDateTime型に変換
$startDateTime = [DateTime]::ParseExact($StartDate, "yyyy-MM-dd", $null)
$endDateTime = [DateTime]::ParseExact($EndDate, "yyyy-MM-dd", $null)
# 出力内容を格納する配列
$outputLines = @()
# 開始日から終了日まで処理
$currentDate = $startDateTime
while ($currentDate -le $endDateTime) {
# 日付をフォーマット
$formattedDate = $currentDate.ToString("yyyy-MM-dd")
$dayOfWeek = $currentDate.ToString("ddd")
# 週番号を計算(System.Globalization.ISOWeekを使用)
$calendarInfo = [System.Globalization.DateTimeFormatInfo]::CurrentInfo.Calendar
$weekOfYear = $calendarInfo.GetWeekOfYear(
$currentDate,
[System.Globalization.CalendarWeekRule]::FirstFourDayWeek,
[System.DayOfWeek]::Monday
)
# フォーマットされた行を作成
$formattedLine = "$formattedDate w$weekOfYear $dayOfWeek"
$outputLines += $formattedLine
# 次の日に進む
$currentDate = $currentDate.AddDays(1)
}
# ファイル書き込みモードの設定
if ($Append) {
# 追加モード
$outputLines | Out-File -FilePath $OutputFile -Encoding utf8 -Append
Write-Output "日付範囲 $StartDate から $EndDate までの $($outputLines.Count) 行をファイル '$OutputFile' に追加しました。"
} else {
# 上書きモード
$outputLines | Out-File -FilePath $OutputFile -Encoding utf8
Write-Output "日付範囲 $StartDate から $EndDate までの $($outputLines.Count) 行をファイル '$OutputFile' に書き込みました。"
}

スクリプトの詳細

パラメータ

パラメータデフォルト値説明
StartDatestring今日の日付開始日(yyyy-MM-dd形式)
EndDatestring1年後終了日(yyyy-MM-dd形式)
OutputFilestring”Calendar.txt”出力ファイル名
Appendswitchfalse追加モード

使用例

1. 基本的な使用方法(2025年1年分を生成)

Terminal window
.\CreateCalendar.ps1 -StartDate "2025-01-01" -EndDate "2025-12-31" -OutputFile "Calendar2025.txt"

2. 既存ファイルに追加(2026年分を追加)

Terminal window
.\CreateCalendar.ps1 -StartDate "2026-01-01" -EndDate "2026-12-31" -OutputFile "Calendar2025.txt" -Append

3. パラメータ省略(デフォルト設定で実行)

Terminal window
.\CreateCalendar.ps1