LoginSignup
4
3

More than 5 years have passed since last update.

画像の仕分けスクリプトをPowerShellで書き直す

Last updated at Posted at 2017-12-22

以前、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で作る場合と比べて値の取得(拡張子、ファイルプロパティ)がとても簡単

参考

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3