以前、ShellScriptで作成したスクリプトをPowerShellで書き直しました。
動機
Windowsのタスクスケジューラで定期的に実行したかったから。
構成
tools/movePictureLocation.ps1
tools/run_mpl.bat(実行用バッチファイル)
コード
movePictureLocation.ps1
############################################################
# READ ME
# 処理対象の画像があるフォルダに、tools以下のファイルを置く
# rul_mpl.batをダブルクリックして実行する
############################################################
# toolsから一つ上の階層へ
Set-Location ..
$PARENT=(Convert-Path .)
Write-Host 'Current Location is '$PARENT
# ファイルプロパティ取得の準備
$SHELL = New-Object -ComObject Shell.Application
$DIRECTORY = $SHELL.NameSpace($PARENT)
# 特定ディレクトリから、画像(jpg, png)のサイズを取得する
$FILELIST=(ls $PARENT)
foreach($TEMP_FILEFULLPATH in $FILELIST){
$TEMP_FILEBASENAME=($TEMP_FILEFULLPATH).BaseName
$TEMP_FILEEXTENSION=($TEMP_FILEFULLPATH).Extension
$TEMP_FILENAME=$TEMP_FILEBASENAME+$TEMP_FILEEXTENSION
# 拡張子がjpg-orig, jpg_origならjpgへリネームする
if(($TEMP_FILEEXTENSION -eq '.jpg-orig') -Or ($TEMP_FILEEXTENSION -eq '.jpg_orig')){
Write-Host 'Rename target'
$OLD_FULLPATH=$TEMP_FILEFULLPATH
$NEW_FULLPATH=$TEMP_FILEBASENAME+'.jpg'
Write-Host $OLD_FULLPATH
Write-Host $NEW_FULLPATH
Move-item -LiteralPath $OLD_FULLPATH $NEW_FULLPATH
$TEMP_FILEEXTENSION='.jpg'
$TEMP_FILENAME=$NEW_FULLPATH
}
if($TEMP_FILEEXTENSION -eq ''){
Write-Host 'This is not a binary file. -> '$TEMP_FILEBASENAME$TEMP_FILEEXTENSION
}elseif(($TEMP_FILEEXTENSION -eq '.jpg') -Or ($TEMP_FILEEXTENSION -eq '.png')){
$OBJECT = $DIRECTORY.ParseName($TEMP_FILENAME)
$HIGHT = $DIRECTORY.GetDetailsOf($OBJECT,169)
$WIDTH = $DIRECTORY.GetDetailsOf($OBJECT,167)
Write-Host
Write-Host $TEMP_FILEBASENAME$TEMP_FILEEXTENSION
Write-Host ' ->hight x width '$HIGHT' x'$WIDTH
if($HIGHT -lt $WIDTH){
Write-Host ' ->縦長'
# ファイルを望む場所へ移動させる
}else{
Write-Host ' ->横長'
# ファイルを望む場所へ移動させる
}
Write-Host
}else{
Write-Host 'This is not a picture. -> '$TEMP_FILEBASENAME$TEMP_FILEEXTENSION
}
}
PowerShellスクリプトは単体で実行し難いので、下記のようなPowerShellスクリプト実行用バッチファイルを用意
run_mpl.bat
@echo off
echo -D executing ps1 file...
powershell -NoProfile -ExecutionPolicy Unrestricted .\movePictureLocation.ps1
echo -D completed
pause > nul
exit
感想
- ShellScriptで作る場合と比べて値の取得(拡張子、ファイルプロパティ)がとても簡単