Tweenで使用するハッシュタグリストを曜日ごとに切り替えたい


# これは何に使うの？
アニメのリアルタイム実況ツイートで多くの実況民に愛用されているTwitterクライアント「Tween」、使っているうちにどんどんハッシュタグリストが埋まってしまってすぐに次に使うハッシュタグが見つけられないということありますよね？
そんな時、その日使うハッシュタグだけがハッシュタグリストに出てくるようにするためのモノです。

※バッチファイルだけだとできることが少ないし、PowerShellだと権限設定とかいろいろ面倒くさいことが多いので、バッチファイルにPowerShellを埋め込んで処理させています。


```bat:TweenTAG.bat
@echo off
rem ### DOS窓を隠す
if not "%~0"=="%~dp0.\%~nx0" start /min cmd /c,"%~dp0.\%~nx0" %* & goto :eof
rem ================================
rem Tweenハッシュタグリスト切替バッチ
rem  Rel.2208052   io_oj
rem ================================

rem ---------------- 環 境 設 定 ---------------------
rem ### TweenTAGが保存されているフォルダ
set PT=%~dp0

rem ### Tween.exeが保存されているフォルダ
set PX=%ProgramFiles(86)%\Tween

rem ### SettingCommon.xmlが保存されているフォルダ
set PS=%USERPROFILE%\AppData\Roaming\Tween\Tween

rem ### 曜日切替の時刻(28時間制の場合は午前4時)
set TD=4
rem --------------------------------------------------

echo Tweenハッシュタグリスト更新中・・・

rem ### パス正規化
if "%PT:~-1%"=="\" set PT=%PT:~0,-1%
if "%PX:~-1%"=="\" set PX=%PX:~0,-1%
if "%PS:~-1%"=="\" set PS=%PS:~0,-1%

rem ### 時刻取得
set TS=%time:~0,2%
set TS=%TS: =%

rem ### 初期設定
for /l %%i in (0,1,6) do (
   call :SUB_INT %%i
)

rem ---------------- メイン処理 ---------------------
call :SUB_WKDAY
     echo [OK] TodayTAG :%FN%
call :SUB_TFCHK
     echo [OK] ConfigTAG:%CK%
call :SUB_BACKUP
tasklist | find "Tween.exe" >nul 2>&1
call :SUB_RESTORE
if %ERRORLEVEL%==0 (
   taskkill /IM Tween.exe >nul 2>&1
)
start "" "%PX%\Tween.exe" 
del "%temp%\%~n0_1.tmp" >nul 2>&1
goto :eof

rem ---------------- 実処理部分 ---------------------
rem ### 曜日定義名設定/曜日定義存在チェック
:SUB_INT
   for /f "usebackq delims=" %%A in (`powershell "(Get-Date).AddDays(%1).DayOfWeek.value__"`) do set WN=%%A
   for /f "usebackq delims=" %%A in (`powershell "(Get-Date).AddDays(%1).DayOfWeek"`) do set WT=%%A
   set F%1=#%WN%;%WT:~0,3%_HashTag
   if not exist "%PT%\#%WN%;%WT:~0,3%_HashTag.txt" echo #%WN%;%WT:~0,3%_HashTag> "%PT%\#%WN%;%WT:~0,3%_HashTag.txt"
exit /b


rem ###  今日は何曜日？
:SUB_WKDAY
   rem ## 深夜時間対応
   if %TS% lss %TD% (
      SET FN=%F6%
   ) else (
      SET FN=%F0%
   )
exit /b


rem ###  SettingCommon.xml にロードされている曜日定義をチェックする
:SUB_TFCHK
  rem ## 曜日定義がなければ今日の定義ファイル、有ればその曜日の定義ファイルを出力先に指定
   findstr "#[0-6];[A-Z][a-z][a-z]_HashTag" "%PS%\SettingCommon.xml" >NUL
   if %ERRORLEVEL%==1 (
      set CK=%FN%
   ) else (
      for /f "usebackq delims=" %%A in (`powershell "Get-Content '%PS%\SettingCommon.xml'| Select-String '#[0-6];[A-Z][a-z][a-z]_HashTag' | foreach { $_ -replace '.*#','#'} | foreach { $_ -replace '^.*<string>',''} | foreach { $_ -replace '</string>$',''}"`) do set CK=%%A
   )
exit /b


rem ###  SettingCommon.xml から曜日定義をバックアップする
:SUB_BACKUP
   rem ## 曜日定義を出力
      type "%PT%\%CK%.txt" > "%temp%\%~n0_1.tmp"
      powershell "Get-Content '%PS%\SettingCommon.xml' -Encoding default | Select-String '<string>' | foreach { $_ -replace '^.*<string>',''} | foreach { $_ -replace '</string>.*$',''} | Out-File '%temp%\%~n0_1.tmp' -Encoding default" -Append
      powershell "(Get-Content '%temp%\%~n0_1.tmp' -Encoding default) | ? {$_.trim() -ne '' } | sort -Unique | Out-File '%PT%\%CK%.txt' -Encoding default"
      type nul >"%temp%\%~n0_1.tmp"
   rem ## その他設定を出力
      powershell "Get-Content '%PS%\SettingCommon.xml' -Encoding default | Select-String -Pattern '\<(.?HashTags)|(string)|(HashSelected./)|(/SettingCommon)\>' -NotMatch | Out-File '%temp%\%~n0_1.tmp' -width 1000 -Encoding default"
      powershell "(Get-Content '%temp%\%~n0_1.tmp' -Encoding default) | ? {$_.trim() -ne '' } | Out-File '%PT%\Seting.txt' -Encoding default"
      type nul >"%temp%\%~n0_1.tmp"
exit /b


rem ###  曜日定義から SettingCommon.xml にリストアする
:SUB_RESTORE
   rem ## その他設定を出力
      powershell "(Get-Content '%PT%\Seting.txt' -Encoding default) | Select-String '</SettingCommon>' -NotMatch | Out-File '%temp%\%~n0_1.tmp' -width 1000 -Encoding default"
   rem ## 曜日定義を出力
      powershell "Echo '  <HashTags>' | Out-File '%temp%\%~n0_1.tmp' -Encoding default -Append"
      powershell "Get-Content '%PT%\%FN%.txt' -Encoding default | sort -Unique | foreach { $_ -replace '^','    <string>'} | foreach { $_ -replace '$','</string>'}  | Out-File '%temp%\%~n0_1.tmp' -Encoding default -Append" 
      powershell "Echo '  </HashTags>' | Out-File '%temp%\%~n0_1.tmp' -Encoding default -Append"
      powershell "Echo '  <HashSelected />' | Out-File '%temp%\%~n0_1.tmp' -Encoding default -Append"
      powershell "Echo '</SettingCommon>' | Out-File '%temp%\%~n0_1.tmp' -Encoding default -Append"
      powershell "(Get-Content '%temp%\%~n0_1.tmp' -Encoding default) | ? {$_.trim() -ne '' } | Out-File '%PS%\SettingCommon.xml' -Encoding default"
      type nul >"%temp%\%~n0_1.tmp"
exit /b
```
<br>

## 配置方法
　　1. 適当なパスに配置します
　　2. インストールパスを変えている場合は環境設定の以下の変数設定を変えて下さい
　　　　変数:PX　→Tween.exeが保存されているフォルダ
　　　　変数:PS　→SettingCommon.xmlが保存されているフォルダ

　　3. Tweenの設定ファイルを壊してしまう場合があるため、念のため以下のファイルを
　　　バックアップして下さい。(べつに設定し直せばいいよって人はやらなくてもヨシ)
　　　→%USERPROFILE%\AppData\Roaming\Tween\Tween\SettingCommon.xml

## 使用方法
　・TweenTAG.bat を実行すると、10秒前後でTweenのハッシュタグリストをその曜日の設定に
　　書換えて起動してくれると思います。
　・初期起動時はすべての設定がその日の曜日設定として登録されます。
　・「#0;Sun_HashTag」のようなハッシュタグが登録されますが、どの曜日用の設定なのかを
　　判断するためのものなので、削除/変更をしないで下さい。
　・1日の区切りの時間の初期設定は午前4:00です、午前4:00を境に曜日が切り替わります。
　　午前4:00をまたいで使用する場合、一旦Tweenを終了させてからTweenTAG.batを実行すると
　　その日の設定がロードされて起動します。
　・曜日ごとのハッシュタグリストを直接書き換える場合は、以下のファイルを編集して下さい。
　　　日曜日→ #0;Sun_HashTag.txt
　　　月曜日→ #1;Mon_HashTag.txt
　　　火曜日→ #2;Tue_HashTag.txt
　　　水曜日→ #3;Wed_HashTag.txt
　　　木曜日→ #4;Thu_HashTag.txt
　　　金曜日→ #5;Fri_HashTag.txt
　　　土曜日→ #6;Sat_HashTag.txt

## 既知の不具合
　・環境によって SettingCommon.xml の文字コードがUTF-8で保存されている場合があり、
　　その場合ファイルを壊してしまうことがあります。(設定が初期化されてしまいます)