追記:より良い方法を別記事にしました

要約:
昨日の続きです。両ポータブル版の起動バッチファイルを合わせて下のようにしました。事前にPostGISデータを使うプロジェクトファイル(拡張子qgs)を作っておき、バッチでQGISにロードします。
start_postgis_qgis.batSelectRawtextBitbucket
@echo off
chcp 65001

set pgdir=D:/AppsPortable/PostgreSQLPortable-9.4
set ctl=%pgdir%/bin/pg_ctl
set dir=%pgdir%/data
set pid=%dir%/postmaster.pid

:: set environmental variables for PostGIS Raster
set GDAL_DATA=../gdal-data
set POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL
set POSTGIS_ENABLE_OUTDB_RASTERS=1

:: set environmental variables for PL/Python3
set pythonhome=D:/AppsPortable/WinPython/WinPython-32bit-3.3.5.8/python-3.3.5
set path=%pythonhome%

:: set environmental variables for PL/R
set r_home=D:/AppsPortable/R-Portable/3.1.2
set path=%path%;%pgdir%/bin;%pgdir%/lib;%r_home%/bin/i386

:: indicate Python and its version
echo.
python -V

:: indicate R and its version
echo.
R --version

:: start PostGIS
if exist "%pid%" (
    echo PostgreSQL might have been started.
) else (
    "%ctl%" -D "%dir%" start
)

:: start QGIS
set qgs=example_postgis.qgs
set qgs=%~dp0%qgs%
D:
cd \AppsPortable\QGIS-Portable-CH\bin
call o4w_env.bat
path %OSGEO4W_ROOT%\apps\qgis\bin
set QGIS_PREFIX_PATH=%OSGEO4W_ROOT:\=/%/apps/qgis
set conf=--configpath %OSGEO4W_ROOT%\.qgis2
set proj=--project "%qgs%"
start "" %OSGEO4W_ROOT%\bin\qgis-bin.exe %conf% %proj%

:ask
set /p inp="press [R] to restart PostgreSQL, [Q] to quit : "
if "%inp%"=="R" (
    "%ctl%" -D "%dir%" -w restart
    goto ask
) else if "%inp%"=="Q" (
    "%ctl%" -D "%dir%" -w stop
    goto :eof
)
goto ask

短い説明
ポータブル版PostgreSQLPostGISを入れる手順は、328日の記事を参照。その時のバッチファイルから色々変わっていますが基本は同じで、それに昨日QGIS起動&プロジェクト読み込みを加えたもの。:: start QGISの次にあるexample_postgis.qgsが、事前に作っておくプロジェクトファイルです。

Windows 7 32bitでの様子。普通のコマンドプロンプトでも同様に動きました(画像はConEmu)。最初にPostgreSQLサーバが起動、次にQGISが起動して自動的にデータを表示。バッチファイルはpress [R] to restart PostgreSQL, [Q] to quitという、PostgreSQL再起動or終了の待機状態になります。



QGISプロジェクトファイルの事前作成が面倒
上は、2つのジオメトリ列を読み込みon-the-fly(OTF)で投影する簡単なもの。それでもプロジェクトファイル(拡張子qgs)は26KBもあり、QGISの様々な動作設定が書き込まれています。このqgsファイルを手動修正して別のジオメトリ列やテーブル等に差し替えできればいいのですが、qgsの中身が複雑すぎて無理そう。一度は事前に、PostGISデータをQGISで読み込み&保存する必要があって面倒です。もっと簡単な方法を模索中。
追記:もっと簡単な方法が見つかったので別記事にしました。


そのほか
いったんQGISだけ終了した後、再びデータを表示する場合も同じバッチファイルを利用可能。バッチファイルの中でPostgreSQLが起動中か確認し(postmaster.pidの有無で)起動中ならPostgreSQL might have been started.と表示してQGISだけ立ち上げます。下がその様子。


上の場合、QGIS起動後にバッチファイルを閉じるといいのですが、今日は面倒でそのまま。従ってPostgreSQL再起動・終了を待つコンソールが複数できます。どちらで操作しても特に問題ありませんでした。片方のコンソールで終了した時、もう一方では ↓ のように終了までの状況がログに出ます。