@ECHO OFF
SETLOCAL
SET BATDIR=%~dp0
REM //--------------------------------------------------------------------------
REM //フレーズのコピー元フォルダを、相対パス,又は,絶対パスで定義して下さい。
REM //下記の例は一つのフォルダしか指定していませんが、複数のフォルダを指定しても構いません。
REM //複数のフォルダを指定する場合は、空白で区切ってください。例:「SET PHRDIR=sozai1 sozai2 sozai3」
SET PHRDIR=sozai
REM //--------------------------------------------------------------------------
REM //フレーズの拡張子を定義して下さい。
REM //左側に定義された拡張子ほど優先度が高いと見なします。
REM //同じベース名で拡張子が異なるファイルが存在する場合、優先度が高いファイルだけをコピーします。
SET PHREXT=*.hca *.adx *.ogg *.mp3 *.wav
REM //--------------------------------------------------------------------------
REM //各種設定を行うテキストのファイル名を、相対パス,又は,絶対パスで定義して下さい。
REM //不要な設定のテキストファイル名は、空文字を設定するか,又は,未設定にして下さい。
SET PHSDEF_TXT=PhsDef.txt
REM //--------------------------------------------------------------------------
REM //バッチスクリプトと同じファイル名で拡張子が.cfgのファイルが有れば、各行が'変数名=設定値'である設定ファイルと見なして読み込み、デフォルトの設定値を上書きします。
REM //「URAMIRAIKAN」さんの「2014年05月27日 バッチファイルで外部設定ファイルを読み込む」(https://www.uramiraikan.net/Works/entry-1876.html)を参考にさせて頂きました。
REM // - "〜 tokens=1,2"ではなく"〜 tokens=1,*"とした事に注意して下さい。
REM //   "〜 tokens=1,2"では、設定値の中に区切り文字が含まれていると、設定値がそこで切られてしまうからです。
REM //   尚、"〜 tokens=1,*"と書いても"〜 tokens=1*"と書いても、同じ結果になるようです。(FORコマンドのヘルプでは後者の書き方ですが、前者の方が判り易いと思いました。)
SET CFGFILE=%~dpn0.cfg
IF EXIST "%CFGFILE%" (
  FOR /F "usebackq delims== tokens=1,*" %%i IN ("%CFGFILE%") DO (
    SET %%i=%%j
  )
)

REM //--------------------------------------------------------------------------
REM // * Tue Feb 23 21:40:12 JST 2016 Naoyuki Sawa
REM // - 1st リリース。
REM // * Wed May 04 21:28:21 JST 2016 Naoyuki Sawa
REM // - 環境変数PHREXTに、'*.adx','*.hca'を追加しました。
REM // * Tue May 17 21:36:02 JST 2016 Naoyuki Sawa
REM // - 環境変数PHRDIRに、複数のフォルダを指定出来るようにしました。
REM // - 同じベース名で拡張子が異なるファイルが存在する場合、優先度が高いファイルだけをコピーするようにしました。
REM //   例えば、同じコピー元フォルダの中にfoo.wav(変換元ファイル)とfoo.ogg(変換後ファイル)が存在する場合、foo.ogg(変換後ファイル)だけがコピーされるようになりました。
REM //   これまでは、foo.wav(変換元ファイル)を削除しておく必要が有りましたが、今後は、foo.wav(変換元ファイル)が残っていても構わなくなりました。
REM // * Wed Aug 24 21:05:06 JST 2016 Naoyuki Sawa
REM // - PHRDIR,PHREXT等の定義を直接書き換えずに、外部設定ファイルを読み込んで定義を変更する方法を追加しました。
REM //   具体的には、"MkPhrNo.cfg"というファイルの、各行に"変数名=設定値"という書式で定義を書けば、上記の設定が上書きされます。
REM //   上記の方法を追加した理由は、当バッチスクリプトの変更管理のために、極力、アプリケーション毎に、当バッチスクリプトを直接書き換えないで済むようにしたいと思ったからです。
REM // * Tue Sep 20 21:19:56 JST 2016 Naoyuki Sawa
REM // - PhsDef.txtのファイル名を、処理の中に直接書かずに、変数で指定するように変更しました。(/clip/test.win/grp/MkTexNo.batの2016/09/09の変更と同様です。)
REM //   変更した理由は、これらのテキストファイルを別のフォルダで管理したいケースが有り、MkPhrNo.cfgに書いて変更したいと思ったからです。

REM //--------------------------------------------------------------------------
REM //□フレーズのコピー元フォルダ以下に有るフレーズを全て、phrフォルダにコピーする。
IF EXIST phr\ RMDIR /S /Q phr\
MKDIR phr\
IF ERRORLEVEL 1 GOTO L_ERR
REM //各フォルダについて…
FOR /D %%i IN (%PHRDIR%) DO (
  REM //そのフォルダ以下の階層内に存在する、各拡張子のファイルを、コピー先フォルダにコピーする。
  REM //ここに直接'FOR /R'を書くと、何故か%%変数が上手く展開されなかったので、サブルーチン呼び出しする事にした。
  CALL :COPY_FILES %%i "%PHREXT%" phr
)

REM //--------------------------------------------------------------------------
REM //□PhrDef.txtを生成する。
DIR /B /S phr\*.* > PhrDef.txt
IF ERRORLEVEL 1 GOTO L_ERR
(onigsed.exe -e "s/^.*\\\(snd\\.*\)$/\"\1\"/" -i~ PhrDef.txt) && (DEL *~)
IF ERRORLEVEL 1 GOTO L_ERR

REM //--------------------------------------------------------------------------
REM //□EnmPhrDef.txtとRegPhrDef.txtを生成する。
env.exe DPHRDEFC_OPTION=-n WIN32=1 MkPhrDef.bat PhrDef.txt %PHSDEF_TXT%
IF ERRORLEVEL 1 GOTO L_ERR
REM //□PhrDef.txtはもう不要なので削除する。
DEL PhrDef.txt

REM //--------------------------------------------------------------------------
	ECHO 完了しました。
	TIMEOUT /T 3 /NOBREAK
EXIT /B

REM //--------------------------------------------------------------------------
:L_ERR
REM //□不完全な最終出力ファイルを確実に削除します。
IF EXIST    PhrDef.txt DEL    PhrDef.txt
IF EXIST EnmPhrDef.txt DEL EnmPhrDef.txt
IF EXIST RegPhrDef.txt DEL RegPhrDef.txt
ECHO ###エラーが発生しました。
	PAUSE
EXIT /B 1

REM //--------------------------------------------------------------------------
REM //フォルダ(%1)以下の階層内に存在する、各拡張子(%2)のファイルを、コピー先フォルダ(%3)にコピーする。
REM //[in]
REM //  %1 = コピー元フォルダ(一つ)
REM //  %2 = コピー元の複数の拡張子を"〜"で囲ったもの	⇒"〜"で囲まないと一つの引数として渡せないからです。当サブルーチンの中で'%~2'で"〜"を削除しています。
REM //  %3 = コピー先フォルダ(一つ)
:COPY_FILES
FOR /R %1 %%j IN (%~2) DO (
  REM //コピー先フォルダの中に、既に同じベース名のファイルが存在したら、既に存在するファイルの方が優先度が高いと見なして、新しいフォルダのコピーを行わない。
  IF NOT EXIST %3\%%~nj.* (
    REM //新しいファイルをコピーする。
    ECHO %%j >&2
    COPY "%%j" %3\ > NUL
    IF ERRORLEVEL 1 GOTO L_ERR
  )
)
EXIT /B
