Advertisement
hosomi

Kindle for PCのアカウント切り替え.bat

Jan 22nd, 2015
509
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 10.39 KB | None | 0 0
  1. @echo off
  2.  
  3. rem ◆Kindle for PCのアカウント切り替え.bat(Windowsアカウント切り替え不要 切り替え時Kindle本の再ダウンロード不要)
  4. rem http://pastebin.com/Rcik9AE6
  5.  
  6. rem ◇更新履歴
  7. rem 2015/01/26 ver0.0.6 %LocalAppData% が変更されていても動くようにした (hosomi)
  8. rem 2015/01/23 ver0.0.5 排他処理が甘かったのを修正 / Unlockerを使うようにした (hosomi)
  9.  
  10. rem ◇動作確認環境
  11. rem ・Windows7 Ultimate SP1 32bit + Kindle for PC (amazon.co.jp) ver1.11.0(40617)
  12. rem ・Windows7 Ultimate SP1 64bit + Kindle for PC (amazon.co.jp) ver1.11.0(40617)
  13. rem ・Windows8.1 Pro 64bit + Kindle for PC (amazon.co.jp) ver1.11.0(40617)
  14.  
  15. rem ◇使用方法
  16. rem 1. Kindle for PCでログイン、ログイン完了後Kindle for PC終了
  17. rem 2. Kindle本の置き場所(Kindle for PCの設定から確認・変更可能)に、「!User=父.txt」のようなファイルを置く ※「父」の部分はそのKindle本を所有する者を表すわかりやすい名前に変える
  18. rem 3. Kindle本の置き場所のフォルダ名の最後に「#父」を付ける ※「父」の部分は2で指定したものと同じにする ※最後のアカウントの場合のみリネーム不要
  19. rem 4. "%USERPROFILE%\AppData\Local\Amazon\Kindle" に「#父」フォルダを作り、そこに "Cache","Logs","storage","style","webkit" フォルダを移動させる ※「父」の部分は2で指定したものと同じにする ※最後のアカウントの場合のみ移動不要
  20. rem 5. このバッチファイルへのショートカットファイルを作り、第一引数に切り替えたいKindleユーザー名(2で指定したもの)を指定する 例:「"C:\Users\YOU\Documents\Kindle for PCのアカウント切り替え.bat" "父"」
  21. rem 6. 持ってるアカウントの分だけ、1~5を繰り返す
  22. rem 7. 5のショートカットファイルを実行すると、指定アカウントに切り替えてKindle for PCが起動する(通常通り起動させると前回起動時のアカウントで起動するがショートカットからの実行を推奨)
  23. rem 8. 処理の確実さを上げたい場合、作ったショートカットをすべて管理者権限で実行する設定にして、第2引数を1にしておくと、Unlockerを使用します ※Unlockerのインストールが必要です ※激遅
  24.  
  25.  
  26.  
  27. setlocal
  28.  
  29.  
  30. set unlocker=""
  31. if "%~2"=="" (
  32.   echo Unlockerを使用しません
  33. ) else if exist "%ProgramFiles%\Unlocker\Unlocker.exe" (
  34.   echo Unlockerを使用します
  35.   set unlocker="%ProgramFiles%\Unlocker\Unlocker.exe"
  36. ) else if exist "%ProgramFiles(x86)%\Unlocker\Unlocker.exe" (
  37.   echo Unlockerを使用します
  38.   set unlocker="%ProgramFiles(x86)%\Unlocker\Unlocker.exe"
  39. ) else (
  40.   echo Unlocker NotFound
  41. )
  42.  
  43.  
  44. echo.
  45. echo ◆レジストリからKindle for PCの設定ファイルなどの置き場所を取得
  46. rem %USERPROFILE%\AppData\Local
  47. set regname=Local AppData
  48. for /f "tokens=1,2,3*" %%i in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "%regname%"' ) do (
  49.   if "%%i %%j"=="%regname%" call set KINDLE_PATH=%%l\Amazon\Kindle
  50. )
  51. echo %KINDLE_PATH%
  52.  
  53.  
  54. echo.
  55. echo ◆batの排他実行(dirlock)開始
  56. rem 入れ替えてる途中で起動するとごちゃ混ぜになるので
  57. if not exist "%KINDLE_PATH%" goto ERROR_Config
  58. cd /d "%KINDLE_PATH%"
  59. for /l %%i in (1,1,10) do (
  60.   if not exist "!Kindleアカウント切り替えbat処理中" goto unlocked
  61.   timeout /t 1 /nobreak
  62.  rem ping localhost -n 1 > nul
  63. )
  64. echo ERROR: batの排他実行(dirlock)に失敗 強制実行します
  65. pause
  66. :unlocked
  67. mkdir "!Kindleアカウント切り替えbat処理中"
  68.  
  69.  
  70. echo.
  71. echo ◆レジストリからKindle本の置き場所を取得
  72. rem /reg:64
  73. set regname=CONTENT_PATH
  74. for /f "tokens=1,2*" %%i in ('reg query "HKCU\Software\Amazon\Kindle\User Settings" /v "%regname%"' ) do (
  75.   if "%%i"=="%regname%" set CONTENT_PATH=%%k
  76. )
  77. echo %CONTENT_PATH%
  78.  
  79. echo.
  80. echo ◆現在のKindleユーザー名と切り替えたいKindleユーザー名を取得
  81. rem 取得方法がわからないので、現在のKindle本の置き場所に「!User=父.txt」というファイルを置く ※「父」の部分はわかりやすい名前に変える
  82. rem このファイルで現在のKindleユーザーを認識する…
  83. cd /d "%CONTENT_PATH%"
  84. set NowUser=
  85. for /f "usebackq" %%i in (`dir /-D /B !User=*.txt`) do (
  86.   set NowUser=%%~ni
  87. )
  88. if "%NowUser%"=="" goto ERROR_NowUser
  89. set NowUser=%NowUser:~6,1000%
  90. set NewUser=%~1
  91. if "%NewUser%"=="" goto ERROR_NewUser
  92. echo %NowUser% -^> %NewUser%
  93. if "%NowUser%"=="%NewUser%" goto doKindle
  94.  
  95.  
  96. echo.
  97. echo ◆Kindle for PC終了
  98. setlocal enabledelayedexpansion
  99. for /l %%i in (1,1,10) do (
  100.   taskkill /im Kindle.exe
  101.   set PROC=
  102.   for /f "usebackq" %%n in (`tasklist /fi "IMAGENAME eq Kindle.exe" /NH`) do (
  103.     set PROC=%%n
  104.   )
  105.   if /i "!PROC:~0,10!"=="Kindle.exe" (
  106.    rem まだ終了していないので待つ
  107.     timeout /t 1 /nobreak
  108.    rem ping localhost -n 1 > nul
  109.   ) else (
  110.     goto taskkilled
  111.   )
  112. )
  113. echo ERROR: Kindle for PCの終了に失敗 Kindle for PCを強制終了します
  114. pause
  115. for /l %%i in (1,1,10) do (
  116.   taskkill /im Kindle.exe /f
  117.   set PROC=
  118.   for /f "usebackq" %%n in (`tasklist /fi "IMAGENAME eq Kindle.exe" /NH`) do (
  119.     set PROC=%%n
  120.   )
  121.   if /i "!PROC:~0,10!"=="Kindle.exe" (
  122.    rem まだ終了していないので待つ
  123.     timeout /t 1 /nobreak
  124.    rem ping localhost -n 1 > nul
  125.   ) else (
  126.     goto taskkilled
  127.   )
  128. )
  129. echo ERROR: Kindle for PCの強制終了に失敗
  130. echo.
  131. set pause=1
  132. goto end
  133. :taskkilled
  134. setlocal disabledelayedexpansion
  135.  
  136.  
  137. echo.
  138. echo ◆Kindle.exeをリネームして一時的に実行不能化
  139. rem ここでこのbatを使わずにKindle.exeを起動されるとファイルがごっちゃになる危険性があるので
  140. rem loop
  141. if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\application\Kindle.exe" /S
  142. rename "%KINDLE_PATH%\application\Kindle.exe" Kindle.exe.disable
  143.  
  144.  
  145. echo.
  146. echo ◆設定ファイルなど切り替え
  147.  
  148. rem 事前確認 ※Ctrl+CされるとKindle.exeが実効できないままになるので、ここではpauseしない
  149. if not exist "%KINDLE_PATH%" goto ERROR_Config
  150. cd /d "%KINDLE_PATH%"
  151. if not exist "#%NowUser%" mkdir "#%NowUser%"
  152. if exist "#%NowUser%\Cache" (
  153.   echo ERROR: "#%NowUser%\Cache" が既に存在するため、Kindleアカウントの切り替えは行われませんでした
  154.   set pause=1
  155.   goto enableKindle
  156. )
  157. if exist "#%NowUser%\Logs" (
  158.   echo ERROR: "#%NowUser%\Logs" が既に存在するため、Kindleアカウントの切り替えは行われませんでした
  159.   set pause=1
  160.   goto enableKindle
  161. )
  162. if exist "#%NowUser%\storage" (
  163.   echo ERROR: "#%NowUser%\storage" が既に存在するため、Kindleアカウントの切り替えは行われませんでした
  164.   set pause=1
  165.   goto enableKindle
  166. )
  167. if exist "#%NowUser%\style" (
  168.   echo ERROR: "#%NowUser%\style" が既に存在するため、Kindleアカウントの切り替えは行われませんでした
  169.   set pause=1
  170.   goto enableKindle
  171. )
  172. if exist "#%NowUser%\webkit" (
  173.   echo ERROR: "#%NowUser%\webkit" が既に存在するため、Kindleアカウントの切り替えは行われませんでした
  174.   set pause=1
  175.   goto enableKindle
  176. )
  177. if exist "%CONTENT_PATH%#%NowUser%" (
  178.   echo ERROR: "%CONTENT_PATH%#%NowUser%" が既に存在するため、Kindleアカウントの切り替えは行われませんでした
  179.   set pause=1
  180.   goto enableKindle
  181. )
  182.  
  183. if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\Cache" /S
  184. move "Cache" "#%NowUser%\Cache"
  185. if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\Logs" /S
  186. move "Logs" "#%NowUser%\Logs"
  187. if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\storage" /S
  188. move "storage" "#%NowUser%\storage"
  189. if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\style" /S
  190. move "style" "#%NowUser%\style"
  191. if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\webkit" /S
  192. move "webkit" "#%NowUser%\webkit"
  193. if exist "#%NewUser%" (
  194.  rem すでに移動先がある場合…
  195.   if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\#%NewUser%\Cache" /S
  196.   move "#%NewUser%\Cache" "Cache"
  197.   if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\#%NewUser%\Logs" /S
  198.   move "#%NewUser%\Logs" "Logs"
  199.   if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\#%NewUser%\storage" /S
  200.   move "#%NewUser%\storage" "storage"
  201.   if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\#%NewUser%\style" /S
  202.   move "#%NewUser%\style" "style"
  203.   if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\#%NewUser%\webkit" /S
  204.   move "#%NewUser%\webkit" "webkit"
  205. )
  206.  
  207. echo.
  208. echo ◆Kindle本置き場切り替え
  209. move "%CONTENT_PATH%" "%CONTENT_PATH%#%NowUser%"
  210. if exist "%CONTENT_PATH%#%NewUser%" (
  211.   move "%CONTENT_PATH%#%NewUser%" "%CONTENT_PATH%"
  212. ) else (
  213.   mkdir "%CONTENT_PATH%"
  214. )
  215.  
  216.  
  217. goto enableKindle
  218.  
  219.  
  220.  
  221. :enableKindle
  222. echo.
  223. echo ◆Kindle.exe.disableをリネームして実行可能化
  224. rem loop
  225. if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\application\Kindle.exe.disable" /S
  226. rename "%KINDLE_PATH%\application\Kindle.exe.disable" Kindle.exe
  227. goto doKindle
  228.  
  229. :ERROR_Config
  230. echo.
  231. echo ERROR: "%KINDLE_PATH%" が見つかりません。
  232. echo Kindle for PCがインストールされていないか、アップデートされて仕様が変わってしまったようです。
  233. echo.
  234. set pause=1
  235. goto end
  236.  
  237. :ERROR_NowUser
  238. echo.
  239. echo ERROR: Kindle本の置き場所("%CONTENT_PATH%" Kindle for PCの設定から確認・変更可能)に、「!User=父.txt」のようなファイルを置いてください。※「父」の部分はそのKindle本を所有する者を表すわかりやすい名前に変える
  240. echo.
  241. start explorer /root,"%CONTENT_PATH%"
  242. set pause=1
  243. goto end
  244.  
  245. :ERROR_NewUser
  246. echo.
  247. echo ERROR: 第一引数に「父」のようなものを指定してください。
  248. echo よくわからない場合、%0 をメモ帳で開いて使用方法を再確認してください。
  249. echo.
  250. set pause=1
  251. goto end
  252.  
  253. :doKindle
  254. echo.
  255. echo ◆Kindle for PC起動
  256. cd /d "%KINDLE_PATH%\application\content"
  257. start "" /max "%KINDLE_PATH%\application\Kindle.exe"
  258. goto end
  259.  
  260. :end
  261. echo.
  262. echo ◆batの排他実行(dirlock)終了
  263. setlocal disabledelayedexpansion
  264. rem loop
  265. if not %unlocker%=="" %unlocker% "%KINDLE_PATH%\!Kindleアカウント切り替えbat処理中" /S
  266. rmdir "%KINDLE_PATH%\!Kindleアカウント切り替えbat処理中"
  267. echo.
  268. if not "%pause%"=="" pause
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement