Table of Contents
はじめに
カレンダーアプリをあえて使わない。1行のテキストで管理する超スマートなタスク管理術 という記事を読んで、ちょっと面白そうだなと思ったので、PowerShellを使って指定した日付範囲のカレンダーデータを生成し、週番号と曜日を付与してテキストファイルに出力するスクリプトを作成してみました。
スクリプトの特徴
主な機能
- 開始日と終了日を指定してカレンダーデータを生成
- 各日付に週番号(ISO週番号準拠)と曜日を自動付与
- 新規ファイル作成または既存ファイルへの追加が可能
- UTF-8エンコーディングでの日本語対応
出力形式
2025-01-01 w1 Wed2025-01-02 w1 Thu2025-01-03 w1 Fri...スプリプトコード
以下がスクリプトの全コードです。
# 日付範囲を指定してファイルに書き込む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 = $startDateTimewhile ($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' に書き込みました。"}スクリプトの詳細
パラメータ
| パラメータ | 型 | デフォルト値 | 説明 |
|---|---|---|---|
| StartDate | string | 今日の日付 | 開始日(yyyy-MM-dd形式) |
| EndDate | string | 1年後 | 終了日(yyyy-MM-dd形式) |
| OutputFile | string | ”Calendar.txt” | 出力ファイル名 |
| Append | switch | false | 追加モード |
使用例
1. 基本的な使用方法(2025年1年分を生成)
.\CreateCalendar.ps1 -StartDate "2025-01-01" -EndDate "2025-12-31" -OutputFile "Calendar2025.txt"2. 既存ファイルに追加(2026年分を追加)
.\CreateCalendar.ps1 -StartDate "2026-01-01" -EndDate "2026-12-31" -OutputFile "Calendar2025.txt" -Append3. パラメータ省略(デフォルト設定で実行)
.\CreateCalendar.ps1