[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"をショートカットにぽぽいのぽい

画像1

すると”[ver]:<ファイル名>”の形で表示されます。あとはリストから起動したいバージョンを選んで[OK]ボタンをクリックすると良いです。

画像2

あれ?なところ

ただ、なぜかバッチファイルに直接ファイルをDnDしたらうまく動いていないという。もう考えるのやめました。<-対処しました

後、ファイルレイアウト有効で読み込んでしまうので、たとえば2.79のファイルを2.82で開くと2.79のレイアウトのままですね。

お読みいただきありがとうございます。サポートいただいた分はおやつのグレードアップに使おうかと思います。スキ、SNSにシェアもよろしくお願いします!