[PowerShell]Blenderランチャ_その2
こちらの記事の続き。
今回は「DnDしたファイルを開く」、「保存されたファイルのバージョンを確認(してから選択して起動する)」という機能を追加しました。
ファイルからバージョン情報を知るてがかりとしてはこちらの記事を確認していただく(?)と良いでしょう。
スクリプト
では早速コードを。
[b_launch.bat]
@echo off
set PS1FILE=%~dp0%
echo %PS1FILE%
if "%1"=="" goto noarg
powershell -NoProfile -ExecutionPolicy Unrestricted %PS1FILE%\b_launch.ps1 -arg %1
goto ende
:noarg
powershell -NoProfile -ExecutionPolicy Unrestricted %PS1FILE%\b_launch.ps1
:ende
[b_launch.ps1]
param($arg)
$bfilepath=""
$bversion=""
$blabel="No File"
function Get-BlendFileVersion([String]$bfilepath)
{
$bver=""
try{
if(Test-Path $bfilepath)
{
$content = Get-Content $bfilepath -Encoding Byte -ReadCount 1KB
$header = [System.Text.Encoding]::UTF8.GetString($content[0][0..6])
if( $header -eq "BLENDER")
{
$bver= [System.Text.Encoding]::UTF8.GetString($content[0][9..11])
return $bver
}
}
}catch{}
return ""
}
if($arg -ne "")
{
$bfilepath = $arg
$bversion =Get-BlendFileVersion($bfilepath)
$blabel= "["+$bversion+"]:" + [System.IO.Path]::GetFileName($bfilepath)
}
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Select a Blender'
$form.Size = New-Object System.Drawing.Size(300,180)
$form.StartPosition = 'CenterScreen'
$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(75,100)
$okButton.Size = New-Object System.Drawing.Size(75,23)
$okButton.Text = 'OK'
$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $okButton
$form.Controls.Add($okButton)
$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(150,100)
$cancelButton.Size = New-Object System.Drawing.Size(75,23)
$cancelButton.Text = 'Cancel'
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $cancelButton
$form.Controls.Add($cancelButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = $blabel
$form.Controls.Add($label)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,40)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = 'Please select a Blender:'
$form.Controls.Add($label)
$listBox = New-Object System.Windows.Forms.ListBox
$listBox.Location = New-Object System.Drawing.Point(10,60)
$listBox.Size = New-Object System.Drawing.Size(260,20)
$listBox.Height = 40
$ble=@(
@("2.82","C:\Program Files\Blender Foundation\Blender 2.82\blender.exe"),
@("2.83","C:\blender-2.83\blender.exe"),
@("2.79","C:\blender-2.79\blender.exe")
)
for( $i=0;$i -lt $ble.Length; $i++)
{
[void] $listBox.Items.Add($ble[$i][0])
}
$form.Controls.Add($listBox)
$form.Topmost = $true
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$x = $listBox.SelectedIndex
if( $x -ge 0 ){
if([String]::IsNullOrEmpty($bfilepath))
{
Start-Process -FilePath $ble[$x][1]
}
else
{
$arglist=($bfilepath)
Start-Process -FilePath $ble[$x][1] -ArgumentList $arglist
}
}
}
2.79も追加しておきましょう。
自身の環境に2.79も追加しておきます。 C:\blender-2.79\blender.exe がプログラムの場所。
ちなみに過去バージョンのBlenderはこちらからGetできます。
DnDしてみる
"untitled.blend"をショートカットにぽぽいのぽい
すると”[ver]:<ファイル名>”の形で表示されます。あとはリストから起動したいバージョンを選んで[OK]ボタンをクリックすると良いです。
あれ?なところ
ただ、なぜかバッチファイルに直接ファイルをDnDしたらうまく動いていないという。もう考えるのやめました。<-対処しました
後、ファイルレイアウト有効で読み込んでしまうので、たとえば2.79のファイルを2.82で開くと2.79のレイアウトのままですね。
お読みいただきありがとうございます。サポートいただいた分はおやつのグレードアップに使おうかと思います。スキ、SNSにシェアもよろしくお願いします!