PowerShell Script for Deployment
以下に要件を満たすPowerShellのスクリプトを示します。このスクリプトは、指定のディレクトリに "pj_template.ini" ファイルをコピーし、最新のバージョン番号を持つファイル名にリネームします。
powershell# JSON ファイルからデプロイターゲットパスのリストを取得 $deployTargets = (Get-Content -Path '.\deploy_target.json' | ConvertFrom-Json).project foreach ($targetPath in $deployTargets) { # パスが存在しない場合は作成 if (-not (Test-Path -Path $targetPath)) { New-Item -ItemType Directory -Path $targetPath } # バージョン番号のリストを取得 $versionNumbers = Get-ChildItem -Path $targetPath -Filter '*.ini' | ForEach-Object { $_.BaseName } | Sort-Object {[version]$_} -Descending # 最新バージョン番号を取得し、それを基に次のバージョン番号を生成 $latestVersion = if ($versionNumbers) { [version]$versionNumbers[0] } else { [version]'0.0.0' } $nextVersion = '{0}.{1}.{2}' -f $latestVersion.Major, $latestVersion.Minor, ($latestVersion.Build + 1) # "pj_template.ini" を新しいバージョン番号でコピー Copy-Item -Path '.\pj_template.ini' -Destination (Join-Path -Path $targetPath -ChildPath "$nextVersion.ini") }
このスクリプトをファイル(例えば "deploy.ps1")として保存し、PowerShellから実行します。スクリプトは、スクリプト自身が存在するディレクトリ内の "deploy_target.json" ファイルを読み込み、"pj_template.ini" ファイルをコピーし、新しいバージョン番号でリネームします。
注意点として、このスクリプトはバージョン番号が "メジャー.マイナー.ビルド" 形式(例えば "1.2.3")であり、ビルド番号が最も頻繁に更新されることを前提としています。また、ファイル名のバージョン番号以外の部分(例えば "v1.2.3_extra.ini")がある場合、このスクリプトはそれを正しく解析できない可能性があります。その場合、より複雑なバージョン番号解析やファイル名解析ロジックが必要になります。
たしかに、ご指摘の通り一つのiniファイルしかない場合には問題が生じます。以下に修正したスクリプトを示します。
powershell# JSON ファイルからデプロイターゲットパスのリストを取得 $deployTargets = (Get-Content -Path '.\deploy_target.json' | ConvertFrom-Json).project foreach ($targetPath in $deployTargets) { # パスが存在しない場合は作成 if (-not (Test-Path -Path $targetPath)) { New-Item -ItemType Directory -Path $targetPath } # バージョン番号のリストを取得 $versionNumbers = Get-ChildItem -Path $targetPath -Filter '*.ini' | ForEach-Object { $_.BaseName } | Sort-Object {[version]$_} -Descending # バージョン番号リストが配列でない場合(つまり1つしかファイルがない場合)、配列に変換 if ($versionNumbers -isnot [array]) { $versionNumbers = @($versionNumbers) } # 最新バージョン番号を取得し、それを基に次のバージョン番号を生成 $latestVersion = if ($versionNumbers) { [version]$versionNumbers[0] } else { [version]'0.0.0' } $nextVersion = '{0}.{1}.{2}' -f $latestVersion.Major, $latestVersion.Minor, ($latestVersion.Build + 1) # "pj_template.ini" を新しいバージョン番号でコピー Copy-Item -Path '.\pj_template.ini' -Destination (Join-Path -Path $targetPath -ChildPath "$nextVersion.ini") }
この修正では、$versionNumbersが配列でない場合(つまり1つしかファイルがない場合)、それを配列に変換しています。これにより、配列の最初の要素($versionNumbers[0])へのアクセスが常に正しく行われます。
素晴らしいです、そのスクリプトが問題なく動作したと聞いて嬉しいです! 何か他に質問がありましたら、いつでもお気軽にお知らせください。 PowerShell スクリプトの作成や他のプログラミングに関する質問でも構いません。私は常にここでお手伝いするためにいます。