2016年12月12日月曜日

Photoshopのjsxを更新するバッチ

Photoshopスクリプトを作成しているときバージョン管理を行いたい。
スクリプトを作る場合には当然欲しくなります。

でも Photoshopの Presets\Scripts を直接リポジトリに登録するとなると色々面倒。
とりあえず別のところをSVNへコミットしておいてバッチファイルでコピーするのが妥当かな?


まずは、コピーするとき.jsxファイルがバラバラになっていると Presets\Scripts のなかもグチャグチャになるので、スクリプトごとにフォルダへまとめてソレをコピーする感じにしようと思います。
このことを前提にバッチを組んでいるので要注意。

で、バッチファイル。
@title %~nx0
@prompt %~n0$G

:: コピーするフォルダ名
set SCRIPT=hoge

:: Adobe フォルダがあるか調べる
@set ADOBE_PATH=%ProgramFiles%\Adobe\
@if not exist "%ADOBE_PATH%" goto :errAdobe

:: Photoshop フォルダを探す
@set SRC_FOLDER=%~dp0%SCRIPT%
@for /f "delims=*" %%F in ('dir /b "%ADOBE_PATH%" ^| find "Photoshop"') do call :copyAction "%%F"
@goto :endProcess



::------------------------------------------------------------------------------
:copyAction
    @set DST_FOLDER=%ADOBE_PATH%%~1\Presets\scripts\%SCRIPT%\
    @if not exist "%DST_FOLDER%" md "%DST_FOLDER%"
    
    xcopy "%SRC_FOLDER%" "%DST_FOLDER%" /s /y
    @exit /b



:errAdobe
    @echo Adobe のフォルダが見つかりません
    @goto :endProcess



:endProcess
    @pause



単にコピーするだけでは芸がないので、どんなバージョンのPhotoshopにも対応してみました。
ポイントは3箇所。

13行目でdelimsを設定しないとスペースで分割されてしまうのでダミーの文字を指定して分割されないようにしています。
同じく13行目、セット内でdirをfindへパイプするために ^| とエスケープさせています。
20行目callで渡された値はスペースで分割されないようダブルクォーテーション付きで渡されているので%~を使ってダブルクォーテーションを省いています。

たぶんコレでいけるはず。

0 件のコメント:

コメントを投稿