@echo off
chcp 932 >nul
setlocal enabledelayedexpansion

:: コンソールウィンドウのサイズ(表示枠: 幅62x高さ30)と、スクロールバッファ(3000行)を独立設定
powershell -NoProfile -Command "$w=$Host.UI.RawUI; $s=$w.WindowSize; $s.Width=62; $s.Height=30; $w.WindowSize=$s; $b=$w.BufferSize; $b.Width=62; $b.Height=3000; $w.BufferSize=$b" >nul 2>&1

:: ========================================================
:: [1] 管理者権限の確認と自動昇格
:: ========================================================
openfiles >nul 2>&1
if %errorlevel% neq 0 (
    echo 管理者権限を取得しています...
    powershell -NoProfile -ExecutionPolicy Bypass -Command "Start-Process -FilePath '%~f0' -Verb RunAs"
    exit /b
)

:: ========================================================
:: [2] ANSIエスケープシーケンスの有効化 (カラー化用)
:: ========================================================
for /f %%A in ('echo prompt $E^|cmd') do set "ESC=%%A"
:: キッティング用オレンジ色 (ANSI 256color)
set "ESC_ORG=%ESC%[38;5;208m"

:: オープニング／ツール・コマンド用紫色
set "ESC_PUR=%ESC%[38;5;141m"

:: スクリプトが存在する場所を作業ディレクトリに設定
cd /d "%~dp0"
set "BASE_DIR=%~dp0"

:: 初期モード設定 (MAINT: メンテナンス / SETUP: 販売PC設定)
set "APP_MODE=MAINT"

:: 各種状態トグルのフラグ (未実行 / PROGRESS / DONE または CHANGING / RESTORED)
set "PWR_STATE="
set "WU_MAINT_STATE="
set "WU_SETUP_STATE="
set "SOFT_MAINT_STATE="
set "SOFT_SETUP_STATE="
set "OEM_MAINT_STATE="
set "OEM_SETUP_STATE="

cls
echo(
echo(
echo(
echo %ESC_PUR%+----------------------------------------------------+%ESC%[0m
echo %ESC_PUR%^|%ESC%[0m      SYSTEM MAINTENANCE ^& PC KITTING TOOLKIT       %ESC_PUR%^|%ESC%[0m
echo %ESC_PUR%+----------------------------------------------------+%ESC%[0m
echo(
echo     %ESC%[33m^>^> INITIALIZING HARDWARE SPECIFICATION QUERY ^<^<%ESC%[0m
echo(
echo     [+] Querying CPU ^& Architecture ......... %ESC%[32m[ OK ]%ESC%[0m
echo     [+] Querying Physical Memory Capacity ... %ESC%[32m[ OK ]%ESC%[0m
echo     [+] Scanning Primary Storage Volume [C:]  %ESC%[32m[ OK ]%ESC%[0m
echo(
echo             ============================
echo               設定を読み込んでいます...
echo               しばらくお待ちください。
echo             ============================
echo(
echo                Now reading system parameters...
echo(
echo %ESC_PUR%+----------------------------------------------------+%ESC%[0m
echo %ESC_PUR%^|%ESC%[0m      Windows Automated Setup ^& Diagnostic Suite    %ESC_PUR%^|%ESC%[0m
echo %ESC_PUR%+----------------------------------------------------+%ESC%[0m
echo(
echo(
echo(
echo(
echo(
echo(
echo(

:: ========================================================
:: OSエディションとバージョン (24H2等) の取得
:: ========================================================
for /f "tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul ^| find "REG_SZ"') do set "OS_NAME=%%B"
for /f "tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v DisplayVersion 2^>nul ^| find "REG_SZ"') do set "OS_VER=%%B"
for /f "tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentBuild 2^>nul ^| find "REG_SZ"') do set "OS_BUILD=%%B"

:: Windows 11 なのにレジストリ上は Windows 10 と記録されている問題の補正
if %OS_BUILD% GEQ 22000 set "OS_NAME=%OS_NAME:Windows 10=Windows 11%"

:: --- PC固有ID (UUID) の取得 ＆ 作業ログの初期ロード ---
set "PC_UUID="
for /f "usebackq tokens=*" %%I in (`powershell -NoProfile -Command "(Get-CimInstance Win32_ComputerSystemProduct).UUID.Replace('-','').Trim()"`) do set "PC_UUID=%%I"
if not defined PC_UUID set "PC_UUID=UNKNOWN_HOST"

:: ハードウェア情報キャッシュの確認 (存在時は即時展開、存在しない初回のみ実測取得)
set "SPEC_CACHE_FILE=%BASE_DIR%tools\log\SPEC_%PC_UUID%.dat"
if exist "%SPEC_CACHE_FILE%" (
    for /f "usebackq tokens=1-5 delims=," %%A in ("%SPEC_CACHE_FILE%") do (
        set "SYS_CPU=%%A"
        set "SYS_RAM=%%B"
        set "DRV_TOTAL=%%C"
        set "DRV_FREE=%%D"
        set "DISP_DATE=%%E"
    )
) else (
    call :REFRESH_HARDWARE_INFO
)

:: 過去30日以内のログを照会して進捗フラグをメモリに展開
call :LOAD_PC_LOG

:: ========================================================
:: バージョン情報 ＆ オンラインアップデート設定
:: ========================================================
set "APP_VER=0.9b"
:: 自宅Linuxサーバーの公開URL (ドメインやIPを指定)
set "UPDATE_SERVER_URL=https://rufieallan.com"

:: ========================================================
:: [3] 非推奨環境(ネットワーク・回復環境)のパッシブ検知
:: ========================================================
set "ENV_WARN="
set "CUR_DRV=%~d0"
if /i "%CUR_DRV%"=="X:" set "ENV_WARN=【警告】回復環境(WinRE)での実行です。SFC等一部機能が正常動作しません。"
if "%CUR_DRV%"=="\\" set "ENV_WARN=【警告】ネットワーク上からの実行です。ツールの動作が不安定になる恐れがあります。"


:: ========================================================
:: メインメニュー (ページ 1/2: メンテナンス実行フロー)
:: ========================================================
:PAGE1
:: 1 ページ目ツールの配置状況チェック
set "STAT_CDI=%ESC%[31m[NG]%ESC%[0m"
set "EXE_CDI="
if exist "%BASE_DIR%tools\CrystalDiskInfo\DiskInfo64.exe" (set "STAT_CDI=%ESC%[32m[OK]%ESC%[0m" & set "EXE_CDI=DiskInfo64.exe")
if not defined EXE_CDI if exist "%BASE_DIR%tools\CrystalDiskInfo\DiskInfo32.exe" (set "STAT_CDI=%ESC%[32m[OK]%ESC%[0m" & set "EXE_CDI=DiskInfo32.exe")
if not defined EXE_CDI if exist "%BASE_DIR%tools\CrystalDiskInfo\DiskInfo.exe" (set "STAT_CDI=%ESC%[32m[OK]%ESC%[0m" & set "EXE_CDI=DiskInfo.exe")

:: Erk / Eek 配置判定
set "STAT_KIT=%ESC%[31m[NG]%ESC%[0m"
set "LABEL_KIT=Erk / Eek"
set "EXE_KIT="
set "DIR_KIT="
set "TYPE_KIT="

:: 1. Erk 判定
if exist "%BASE_DIR%tools\Erk\Start Scanner.exe" (
    set "STAT_KIT=%ESC%[32m[OK]%ESC%[0m"
    set "LABEL_KIT=Erk"
    set "EXE_KIT=Start Scanner.exe"
    set "DIR_KIT=%BASE_DIR%tools\Erk"
    set "TYPE_KIT=ERK"
)

:: 2. Eek 判定 (Erk未配置時: tools\EEK または tools\Eek)
if not defined TYPE_KIT (
    if exist "%BASE_DIR%tools\EEK\Start Scanner.exe" (
        set "STAT_KIT=%ESC%[32m[OK]%ESC%[0m"
        set "LABEL_KIT=Eek"
        set "EXE_KIT=Start Scanner.exe"
        set "DIR_KIT=%BASE_DIR%tools\EEK"
        set "TYPE_KIT=EEK"
    ) else if exist "%BASE_DIR%tools\Eek\Start Scanner.exe" (
        set "STAT_KIT=%ESC%[32m[OK]%ESC%[0m"
        set "LABEL_KIT=Eek"
        set "EXE_KIT=Start Scanner.exe"
        set "DIR_KIT=%BASE_DIR%tools\Eek"
        set "TYPE_KIT=EEK"
    )
)

cls
:: メンテナンス用ステータスタグ生成 (未: 灰色 / 済: 赤色)
set "TAG_MB= %ESC%[90m[未]%ESC%[0m" & if "%DONE_MAINT_B%"=="1" set "TAG_MB= %ESC%[31m[済]%ESC%[0m"
set "TAG_M1= %ESC%[90m[未]%ESC%[0m" & if "%DONE_MAINT_1%"=="1" set "TAG_M1= %ESC%[31m[済]%ESC%[0m"
set "TAG_M2= %ESC%[90m[未]%ESC%[0m" & if "%DONE_MAINT_2%"=="1" set "TAG_M2= %ESC%[31m[済]%ESC%[0m"
set "TAG_M3= %ESC%[90m[未]%ESC%[0m" & if "%DONE_MAINT_3%"=="1" set "TAG_M3= %ESC%[31m[済]%ESC%[0m"

:: M4: Windows Update
set "TAG_M4= %ESC%[90m[未]%ESC%[0m"
if "%WU_MAINT_STATE%"=="PROGRESS" set "TAG_M4= %ESC%[33m[更新中]%ESC%[0m"
if "%WU_MAINT_STATE%"=="DONE"     set "TAG_M4= %ESC%[31m[済]%ESC%[0m"
if not defined WU_MAINT_STATE if "%DONE_MAINT_4%"=="1" set "TAG_M4= %ESC%[31m[済]%ESC%[0m"

:: M5: ソフトアップデート
set "TAG_M5= %ESC%[90m[未]%ESC%[0m"
if "%SOFT_MAINT_STATE%"=="PROGRESS" set "TAG_M5= %ESC%[33m[更新中]%ESC%[0m"
if "%SOFT_MAINT_STATE%"=="DONE"     set "TAG_M5= %ESC%[31m[済]%ESC%[0m"
if not defined SOFT_MAINT_STATE if "%DONE_MAINT_5%"=="1" set "TAG_M5= %ESC%[31m[済]%ESC%[0m"

set "TAG_M6= %ESC%[90m[未]%ESC%[0m" & if "%DONE_MAINT_6%"=="1" set "TAG_M6= %ESC%[31m[済]%ESC%[0m"
set "TAG_M7= %ESC%[90m[未]%ESC%[0m" & if "%DONE_MAINT_7%"=="1" set "TAG_M7= %ESC%[31m[済]%ESC%[0m"
set "TAG_M8= %ESC%[90m[未]%ESC%[0m" & if "%DONE_MAINT_8%"=="1" set "TAG_M8= %ESC%[31m[済]%ESC%[0m"

:: M9: 電源・スリープ設定
set "TAG_M9= %ESC%[90m[未]%ESC%[0m"
if "%PWR_STATE%"=="CHANGING" set "TAG_M9= %ESC%[33m[変更中]%ESC%[0m"
if "%PWR_STATE%"=="RESTORED" set "TAG_M9= %ESC%[31m[済]%ESC%[0m"
if not defined PWR_STATE if "%DONE_MAINT_9%"=="1" set "TAG_M9= %ESC%[31m[済]%ESC%[0m"

:: MO: メーカーツール
set "TAG_MO= %ESC%[90m[未]%ESC%[0m"
if "%OEM_MAINT_STATE%"=="PROGRESS" set "TAG_MO= %ESC%[33m[更新中]%ESC%[0m"
if "%OEM_MAINT_STATE%"=="DONE"     set "TAG_MO= %ESC%[31m[済]%ESC%[0m"
if not defined OEM_MAINT_STATE if "%DONE_MAINT_O%"=="1" set "TAG_MO= %ESC%[31m[済]%ESC%[0m"

echo %ESC%[36m== メンテナンス ====== 実行パス: %CD% === [Page 1/2] ==%ESC%[0m
echo  OS: %OS_NAME% %OS_VER% / CPU: %SYS_CPU%
echo  RAM: %SYS_RAM% GB / C: 全体: %DRV_TOTAL% GB / 空き %DRV_FREE% GB
echo %ESC%[36m=== Ctrl + マウスホイール 操作で表示サイズ変更可能 ===%ESC%[0m
echo  %ESC%[33m-- [ATCメンテナンス実行フロー] ----------------------%ESC%[0m
echo  [B] %ESC%[32mBitLocker 状態確認・管理%ESC%[0m                %TAG_MB%
echo  [1] %ESC%[32mウィルスフルスキャン%ESC%[0m                    %TAG_M1%
echo  [2] %ESC%[32mCrystalDiskInfo%ESC%[0m                    %STAT_CDI% %TAG_M2%
if "%LABEL_KIT%"=="Erk"       echo  [3] %ESC%[32mErk%ESC%[0m                                %STAT_KIT% %TAG_M3%
if "%LABEL_KIT%"=="Eek"       echo  [3] %ESC%[32mEek%ESC%[0m                                %STAT_KIT% %TAG_M3%
if "%LABEL_KIT%"=="Erk / Eek" echo  [3] %ESC%[32mErk / Eek%ESC%[0m                          %STAT_KIT% %TAG_M3%
echo  [4] %ESC%[32mWindows Update 画面を開く%ESC%[0m               %TAG_M4%
echo  [5] %ESC%[32mソフトアップデート%ESC%[0m                      %TAG_M5%
echo  [6] %ESC%[32mメーカーアップデート・リカバリUSB作成%ESC%[0m   %TAG_MO%
echo  [7] %ESC%[32msfc / dism%ESC%[0m                              %TAG_M6%
echo  [8] %ESC%[32mディスククリーンアップ%ESC%[0m                  %TAG_M7%
echo  [9] %ESC%[32m復元ポイントの作成%ESC%[0m                      %TAG_M8%
echo  [O] %ESC%[32m電源・スリープ ＆ スクリーンセーバー設定%ESC%[0m%TAG_M9%
echo  %ESC%[33m-- [個別機能 ＆ ハードウェア詳細] -------------------%ESC%[0m
echo  [W] %ESC%[32m回復ドライブの作成 (recoverydrive)%ESC%[0m
echo  [X] %ESC%[32mPCスペック ＆ システム詳細レポート表示%ESC%[0m
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo  [L] このPCの作業履歴・ログ一覧を表示
echo  [M] このページの説明
echo  [N] 次のページへ (Page 2: ツール・コマンド)
echo  [K] %ESC_ORG%【切替】キッティングメニューへ%ESC%[0m
echo  [0] %ESC%[31m終了%ESC%[0m
echo %ESC%[36m== Ver.%APP_VER% == [R]efresh ========== %DISP_DATE% ==%ESC%[0m
if defined LOG_MAINT_MSG echo  %ESC%[33m%LOG_MAINT_MSG%%ESC%[0m
if defined ENV_WARN echo        %ESC%[31m%ENV_WARN%%ESC%[0m
choice /c B123456789OWXLMNK0R /n /m "番号またはキーを入力してください: "

if errorlevel 19 (
    call :REFRESH_HARDWARE_INFO
    goto PAGE1
)
if errorlevel 18 set "EXIT_ORIGIN=PAGE1" & goto CONFIRM_EXIT
if errorlevel 17 goto SWITCH_TO_SETUP
if errorlevel 16 goto PAGE2
if errorlevel 15 goto PAGE1_MANUAL
if errorlevel 14 goto VIEW_PC_LOG
if errorlevel 13 goto SHOW_PC_SUMMARY
if errorlevel 12 goto RUN_RECOVERYDRIVE
if errorlevel 11 goto POWER_SLEEP_MENU
if errorlevel 10 goto RESTORE_POINT_MENU
if errorlevel 9 goto RUN_CLEANMGR
if errorlevel 8 goto SYSTEM_REPAIR_MENU
if errorlevel 7 goto OEM_TOOL_MENU
if errorlevel 6 goto RUN_APP_UPDATES
if errorlevel 5 goto RUN_WINUPDATE
if errorlevel 4 goto RUN_KIT
if errorlevel 3 goto RUN_DISKINFO
if errorlevel 2 goto VIRUS_SCAN_MENU
if errorlevel 1 goto RUN_BITLOCKER_MAINT

:SWITCH_TO_SETUP
set "APP_MODE=SETUP"
goto SETUP_PAGE1


:: ========================================================
:: 販売PC設定メニュー (購入PC・初回キッティングフロー)
:: ========================================================
:SETUP_PAGE1
cls
:: 各項目のステータスタグ生成 (未: 灰色 / 済: 赤色)
set "TAG_SB= %ESC%[90m[未]%ESC%[0m" & if "%DONE_SETUP_B%"=="1" set "TAG_SB= %ESC%[31m[済]%ESC%[0m"
set "TAG_S1= %ESC%[90m[未]%ESC%[0m" & if "%DONE_SETUP_1%"=="1" set "TAG_S1= %ESC%[31m[済]%ESC%[0m"
set "TAG_S2= %ESC%[90m[未]%ESC%[0m" & if "%DONE_SETUP_2%"=="1" set "TAG_S2= %ESC%[31m[済]%ESC%[0m"

:: S3: Windows Update
set "TAG_S3= %ESC%[90m[未]%ESC%[0m"
if "%WU_SETUP_STATE%"=="PROGRESS" set "TAG_S3= %ESC%[33m[更新中]%ESC%[0m"
if "%WU_SETUP_STATE%"=="DONE"     set "TAG_S3= %ESC%[31m[済]%ESC%[0m"
if not defined WU_SETUP_STATE if "%DONE_SETUP_3%"=="1" set "TAG_S3= %ESC%[31m[済]%ESC%[0m"

:: S4: ソフトアップデート
set "TAG_S4= %ESC%[90m[未]%ESC%[0m"
if "%SOFT_SETUP_STATE%"=="PROGRESS" set "TAG_S4= %ESC%[33m[更新中]%ESC%[0m"
if "%SOFT_SETUP_STATE%"=="DONE"     set "TAG_S4= %ESC%[31m[済]%ESC%[0m"
if not defined SOFT_SETUP_STATE if "%DONE_SETUP_4%"=="1" set "TAG_S4= %ESC%[31m[済]%ESC%[0m"

:: S5: メーカーツール
set "TAG_S5= %ESC%[90m[未]%ESC%[0m"
if "%OEM_SETUP_STATE%"=="PROGRESS" set "TAG_S5= %ESC%[33m[更新中]%ESC%[0m"
if "%OEM_SETUP_STATE%"=="DONE"     set "TAG_S5= %ESC%[31m[済]%ESC%[0m"
if not defined OEM_SETUP_STATE if "%DONE_SETUP_5%"=="1" set "TAG_S5= %ESC%[31m[済]%ESC%[0m"

set "TAG_S6= %ESC%[90m[未]%ESC%[0m" & if "%DONE_SETUP_6%"=="1" set "TAG_S6= %ESC%[31m[済]%ESC%[0m"
set "TAG_S7= %ESC%[90m[未]%ESC%[0m" & if "%DONE_SETUP_7%"=="1" set "TAG_S7= %ESC%[31m[済]%ESC%[0m"
set "TAG_S8= %ESC%[90m[未]%ESC%[0m" & if "%DONE_SETUP_8%"=="1" set "TAG_S8= %ESC%[31m[済]%ESC%[0m"
set "TAG_S9= %ESC%[90m[未]%ESC%[0m" & if "%DONE_SETUP_9%"=="1" set "TAG_S9= %ESC%[31m[済]%ESC%[0m"
set "TAG_SI= %ESC%[90m[未]%ESC%[0m" & if "%DONE_SETUP_I%"=="1" set "TAG_SI= %ESC%[31m[済]%ESC%[0m"

echo %ESC_ORG%== キッティング ====== 実行パス: %CD% === [Page 1/2] ==%ESC%[0m
echo  OS: %OS_NAME% %OS_VER% / CPU: %SYS_CPU%
echo  RAM: %SYS_RAM% GB / C: 全体: %DRV_TOTAL% GB / 空き %DRV_FREE% GB
echo %ESC_ORG%=== Ctrl + マウスホイール 操作で表示サイズ変更可能 ===%ESC%[0m
echo  %ESC%[33m-- [初期セットアップ実行フロー] ---------------------%ESC%[0m
echo  [B] %ESC%[32mBitLocker 状態確認・管理%ESC%[0m                %TAG_SB%
echo  [1] %ESC%[32mデスクトップ基本アイコン一括配置%ESC%[0m        %TAG_S1%
echo  [2] %ESC%[32mAdobe Acrobat Reader インストール%ESC%[0m       %TAG_S2%
echo  [3] %ESC%[32mWindows Update 画面を開く%ESC%[0m               %TAG_S3%
echo  [4] %ESC%[32mソフトアップデート%ESC%[0m                      %TAG_S4%
echo  [5] %ESC%[32mメーカーアップデート・リカバリUSB作成%ESC%[0m   %TAG_S5%
echo  [6] %ESC%[32mMSアカウント作成・Office設定%ESC%[0m            %TAG_S6%
echo  [7] %ESC%[32m[https://ex.Pegasus2.jp/tb/]を開く%ESC%[0m      %TAG_S7%
echo  [8] %ESC%[32mアイコン配置 / クイックPLUS%ESC%[0m             %TAG_S8%
echo  [9] %ESC%[32mバスター/みやブル インストール%ESC%[0m          %TAG_S9%
echo  [I] %ESC%[32mリモサポアイコンをデスクトップに配置%ESC%[0m    %TAG_SI%
echo  %ESC%[33m-- [点検 ＆ 補助ツール] -----------------------------%ESC%[0m
echo  [W] %ESC%[32m回復ドライブの作成 (recoverydrive)%ESC%[0m
echo  [X] %ESC%[32mPCスペック ＆ システム詳細レポート表示%ESC%[0m
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
echo  [L] このPCの作業履歴・ログ一覧を表示
echo  [M] このページの説明
echo  [N] 次のページへ (Page 2: ツール・コマンド)
echo  [K] %ESC%[36m【切替】メンテナンスメニューへ%ESC%[0m
echo  [0] %ESC%[31m終了%ESC%[0m
echo %ESC_ORG%== Ver.%APP_VER% == [R]efresh ========== %DISP_DATE% ==%ESC%[0m
if defined LOG_SETUP_MSG echo  %ESC%[33m%LOG_SETUP_MSG%%ESC%[0m
choice /c B123456789IWXLMNK0R /n /m "番号またはキーを入力してください: "

:: 19キー対応: Rは19、0(終了)は18
if errorlevel 19 (
    call :REFRESH_HARDWARE_INFO
    goto SETUP_PAGE1
)
if errorlevel 18 set "EXIT_ORIGIN=SETUP_PAGE1" & goto CONFIRM_EXIT
if errorlevel 17 goto SWITCH_TO_MAINT
if errorlevel 16 goto PAGE2
if errorlevel 15 goto SETUP_PAGE1_MANUAL
if errorlevel 14 goto VIEW_PC_LOG
if errorlevel 13 goto SHOW_PC_SUMMARY
if errorlevel 12 goto RUN_RECOVERYDRIVE
if errorlevel 11 goto DEPLOY_REMOTE_ICON
if errorlevel 10 goto SETUP_SECURITY_MENU
if errorlevel 9 goto QUICK_PLUS_MENU
if errorlevel 8 goto OPEN_PEGASUS2
if errorlevel 7 goto SETUP_OFFICE_MENU
if errorlevel 6 goto OEM_TOOL_MENU
if errorlevel 5 goto RUN_APP_UPDATES
if errorlevel 4 goto RUN_WINUPDATE_SETUP
if errorlevel 3 goto RUN_ADOBE_INSTALL
if errorlevel 2 goto ENABLE_DESKTOP_ICONS
if errorlevel 1 goto RUN_BITLOCKER_SETUP


:: ========================================================
:: メインメニュー (ページ 2/2: ツール・コマンド)
:: ========================================================
:PAGE2
:: ISO ファイル配置状況チェック
set "STAT_ISO=%ESC%[31m[NG]%ESC%[0m"
if exist "%BASE_DIR%Win11.iso" set "STAT_ISO=%ESC%[32m[OK]%ESC%[0m"

:: 2 ページ目ツールの配置状況チェック
set "STAT_CPU=%ESC%[31m[NG]%ESC%[0m"
set "EXE_CPU="
if exist "%BASE_DIR%tools\CPU-Z\cpuz_x64.exe" (set "STAT_CPU=%ESC%[32m[OK]%ESC%[0m" & set "EXE_CPU=cpuz_x64.exe")
if not defined EXE_CPU if exist "%BASE_DIR%tools\CPU-Z\cpuz.exe" (set "STAT_CPU=%ESC%[32m[OK]%ESC%[0m" & set "EXE_CPU=cpuz.exe")

set "STAT_HWM=%ESC%[31m[NG]%ESC%[0m"
set "EXE_HWM="
if exist "%BASE_DIR%tools\HWMonitor\HWMonitor_x64.exe" (set "STAT_HWM=%ESC%[32m[OK]%ESC%[0m" & set "EXE_HWM=HWMonitor_x64.exe")
if not defined EXE_HWM if exist "%BASE_DIR%tools\HWMonitor\HWMonitor.exe" (set "STAT_HWM=%ESC%[32m[OK]%ESC%[0m" & set "EXE_HWM=HWMonitor.exe")

set "STAT_FUR=%ESC%[31m[NG]%ESC%[0m"
set "EXE_FUR="
if exist "%BASE_DIR%tools\FurMark\FurMark.exe" (set "STAT_FUR=%ESC%[32m[OK]%ESC%[0m" & set "EXE_FUR=FurMark.exe")
if not defined EXE_FUR if exist "%BASE_DIR%tools\FurMark\FurMark_x64.exe" (set "STAT_FUR=%ESC%[32m[OK]%ESC%[0m" & set "EXE_FUR=FurMark_x64.exe")
if not defined EXE_FUR if exist "%BASE_DIR%tools\FurMark\Geeks3D FurMark.exe" (set "STAT_FUR=%ESC%[32m[OK]%ESC%[0m" & set "EXE_FUR=Geeks3D FurMark.exe")

set "STAT_VIC=%ESC%[31m[NG]%ESC%[0m"
set "EXE_VIC="
if exist "%BASE_DIR%tools\Victoria\Victoria.exe" (set "STAT_VIC=%ESC%[32m[OK]%ESC%[0m" & set "EXE_VIC=Victoria.exe")

:: Erk / Eek 個別配置チェック
set "STAT_P2_ERK=%ESC%[31m[NG]%ESC%[0m"
if exist "%BASE_DIR%tools\Erk\Start Scanner.exe" set "STAT_P2_ERK=%ESC%[32m[OK]%ESC%[0m"

set "STAT_P2_EEK=%ESC%[31m[NG]%ESC%[0m"
set "DIR_P2_EEK="
if exist "%BASE_DIR%tools\EEK\Start Scanner.exe" (
    set "STAT_P2_EEK=%ESC%[32m[OK]%ESC%[0m" & set "DIR_P2_EEK=%BASE_DIR%tools\EEK"
) else if exist "%BASE_DIR%tools\Eek\Start Scanner.exe" (
    set "STAT_P2_EEK=%ESC%[32m[OK]%ESC%[0m" & set "DIR_P2_EEK=%BASE_DIR%tools\Eek"
)

:: KeyFreeze 配置チェック
set "STAT_KF=%ESC%[31m[NG]%ESC%[0m"
set "EXE_KF="
if exist "%BASE_DIR%tools\KeyFreeze\KeyFreeze_x64.exe" (
    set "STAT_KF=%ESC%[32m[OK]%ESC%[0m" & set "EXE_KF=%BASE_DIR%tools\KeyFreeze\KeyFreeze_x64.exe"
) else if exist "%BASE_DIR%tools\KeyFreeze\KeyFreeze.exe" (
    set "STAT_KF=%ESC%[32m[OK]%ESC%[0m" & set "EXE_KF=%BASE_DIR%tools\KeyFreeze\KeyFreeze.exe"
)

cls
echo %ESC_PUR%== ツール・コマンド == 実行パス: %CD% === [Page 2/2] ==%ESC%[0m
echo  OS: %OS_NAME% %OS_VER% / CPU: %SYS_CPU%
echo  RAM: %SYS_RAM% GB / C: 全体: %DRV_TOTAL% GB / 空き %DRV_FREE% GB
echo %ESC_PUR%=== Ctrl + マウスホイール 操作で表示サイズ変更可能 ===%ESC%[0m
if defined ENV_WARN echo        %ESC%[31m%ENV_WARN%%ESC%[0m
echo  [U] %ESC%[32mWin11 ISO アップグレード実行%ESC%[0m             %STAT_ISO%
echo  [C] %ESC%[32mCPU-Z           (CPU・メモリ)%ESC%[0m            %STAT_CPU%
echo  [H] %ESC%[32mHWMonitor       (温度・電圧)%ESC%[0m             %STAT_HWM%
echo  [F] %ESC%[32mFurMark         (GPU 負荷)%ESC%[0m               %STAT_FUR%
echo  [V] %ESC%[32mVictoria        (ストレージ診断)%ESC%[0m         %STAT_VIC%
echo  [E] %ESC%[32mErk%ESC%[0m                                      %STAT_P2_ERK%
echo  [K] %ESC%[32mEek%ESC%[0m                                      %STAT_P2_EEK%
echo  [L] %ESC%[32mKeyFreeze       (キーボード清掃)%ESC%[0m         %STAT_KF%
echo  [D] %ESC%[32mデバイスマネージャー (devmgmt.msc)%ESC%[0m
echo  [S] %ESC%[32m診断ツール配置状況 ＆ フォルダを開く%ESC%[0m
echo  %ESC_PUR%-----------------------------------------------------%ESC%[0m
echo  [1] %ESC%[32mコマンドリスト (CMD / PowerShell)%ESC%[0m
echo  [A] %ESC%[32m本バッチを C:\AP (隠しフォルダ) へ配備・構築%ESC%[0m
echo  [B] %ESC%[32mオンラインアップデート%ESC%[0m
echo %ESC_PUR%------------------------------------------------------%ESC%[0m
echo  [M] このページのマニュアル・解説
echo  [P] 前のページに戻る
echo  [0] %ESC%[31m終了%ESC%[0m
echo %ESC_PUR%== Ver.%APP_VER% == [R]efresh ========== %DISP_DATE% ==%ESC%[0m
choice /c UCHFVEKLDS1ABPM0ZR /n /m "番号またはキーを入力してください: "

:: 18キー対応: R(18), Z(17), 0(16), M(15), P(14), B(13), A(12), 1(11)...
if errorlevel 18 (
    call :REFRESH_HARDWARE_INFO
    goto PAGE2
)
if errorlevel 17 goto SHOW_OPENING_DEMO
if errorlevel 16 set "EXIT_ORIGIN=PAGE2" & goto CONFIRM_EXIT
if errorlevel 15 goto PAGE2_MANUAL
if errorlevel 14 goto BACK_TO_CURRENT_MENU
if errorlevel 13 goto UPDATE_MENU
if errorlevel 12 goto INSTALL_TO_AP
if errorlevel 11 goto CMD_PS_MENU
if errorlevel 10 goto CHECK_TOOL_STATUS
if errorlevel 9 goto RUN_DEVMGMT
if errorlevel 8 goto RUN_KEYFREEZE
if errorlevel 7 goto RUN_PAGE2_EEK
if errorlevel 6 goto RUN_PAGE2_ERK
if errorlevel 5 goto RUN_VICTORIA
if errorlevel 4 goto RUN_FURMARK
if errorlevel 3 goto RUN_HWMONITOR
if errorlevel 2 goto RUN_CPUZ
if errorlevel 1 goto RUN_WIN11_UPGRADE


:SWITCH_TO_MAINT
set "APP_MODE=MAINT"
goto PAGE1

:BACK_TO_CURRENT_MENU
if "%APP_MODE%"=="SETUP" goto SETUP_PAGE1
goto PAGE1

:: ========================================================
:: [SETUP-M] 販売PC 初期設定メニュー 機能解説
:: ========================================================
:SETUP_PAGE1_MANUAL
cls
echo %ESC_ORG%======================================================%ESC%[0m
echo %ESC%[33m       販売PC 初期設定 ＆ キッティング: 解説マニュアル%ESC%[0m
echo  %ESC%[90m※ 下へスクロールして閲覧できます / [任意のキー] で戻る%ESC%[0m
echo %ESC_ORG%======================================================%ESC%[0m
echo.
echo %ESC%[32m[進捗管理と手動ステータス変更について]%ESC%[0m
echo   各メニューの右側に表示される [済] や [更新中] のタグは、作業の進行状況を表します。
echo   - 自動判定: 実行するだけで自動的に [済] になる項目。
echo   - 手動判定: Windows Update や 各種アップデート などの時間がかかる項目は、
echo               実行後に「更新中」か「済(完了)」かを自分で選択して記録します。
echo               ※例: Windows Updateは開始時に[1]で「更新中」にし、
echo                     すべて終わってから[2]で「済」に設定してください。
echo.
echo %ESC%[32m[B] BitLocker 状態確認・管理%ESC%[0m
echo   - 目的: 出荷前のドライブ暗号化状態の把握と解除、進行状況の追跡。
echo.
echo %ESC%[32m[1] デスクトップ基本アイコン一括表示 (PC/ゴミ箱/ユーザー/コンパネ)%ESC%[0m
echo   - 動作: PC、ごみ箱、ユーザーファイル、コントロールパネルをデスクトップに表示。
echo.
echo %ESC%[32m[2] Adobe Acrobat Reader インストール%ESC%[0m
echo   - 動作: toolsフォルダ内のインストーラーを起動。
echo.
echo %ESC%[32m[3] Windows Update 画面を開く%ESC%[0m
echo   - 動作: OS標準の更新画面を開き、最新状態になるまで適用。
echo.
echo %ESC%[32m[4] ソフトアップデート (Store ブラウザ Adobe Office)%ESC%[0m
echo   - 動作: ストア、Edge、Chromeなどの基本ソフトの更新画面を管理。
echo.
echo %ESC%[32m[5] メーカーアップデート・リカバリUSB作成%ESC%[0m
echo   - 動作: PCメーカーを自動判別し、専用ツールやリカバリ作成画面を呼び出し。
echo.
echo %ESC%[32m[6] MSアカウント作成・アプリインストール%ESC%[0m
echo   - 動作: OfficeやWPS、MSアカウント関連のセットアップWebページを開く。
echo.
echo %ESC%[32m[7] バスター/みやブル インストール%ESC%[0m
echo   - 動作: 既存セキュリティの確認後、指定ソフトのインストーラーやWebを起動。
echo.
echo %ESC%[32m[8] 筆ぐるめ 公式サイトを開く%ESC%[0m
echo   - 動作: Webブラウザで公式サイトを直接開き、導入・設定を補助。
echo.
echo %ESC%[32m[9] リモサポアイコンをデスクトップに配置%ESC%[0m
echo   - 動作: 指定のリモートサポート用ツールをユーザーのデスクトップにコピー。
echo.
echo %ESC%[32m[W] 回復ドライブの作成 (recoverydrive)%ESC%[0m
echo   - 動作: OS標準の回復ドライブ作成ウィザードを起動。
echo.
echo %ESC%[32m[X] PCスペック ＆ システム詳細レポート表示%ESC%[0m
echo   - 目的: 出荷前スペックの最終確認とテキスト保存、ディスク調査への遷移。
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
echo  何かキーを押すとメニューに戻ります...
powershell -NoProfile -Command "[Console]::WindowTop = 0"
pause >nul
goto SETUP_PAGE1

:: ========================================================
:: [7] Pegasus サイトを開く
:: ========================================================
:OPEN_PEGASUS2
call :RECORD_ACTION SETUP SETUP_7 "Pegasus サイトオープン"
echo.
echo Pegasus サイトを開いています...
start "" "https://ex.pegasus2.jp/tb/"
timeout /t 1 >nul
goto SETUP_PAGE1

:: ========================================================
:: [8] アイコン配置 / クイックPLUS メニュー
:: ========================================================
:QUICK_PLUS_MENU
cls
echo %ESC%[36m======================================================%ESC%[0m
echo %ESC%[33m       アイコン配置 / クイックPLUS メニュー%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo  [1] 電源系アイコン (シャットダウン・再起動) の配置
echo  [2] Edgeお気に入りの一括適用 (※tools\Bookmarksを使用)
echo  [3] LINE のインストール
echo  [4] Zoom のインストール
echo  [5] Zoom アイコンをデスクトップへ配置
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo  [0] メインメニューへ戻る (戻る際に状態を確認します)
echo %ESC%[36m======================================================%ESC%[0m
choice /c 123450 /n /m "番号またはキーを入力してください: "

if errorlevel 6 goto QUICK_PLUS_CHECK_STATE
if errorlevel 5 goto QUICK_ZOOM_ICON
if errorlevel 4 goto QUICK_ZOOM_INST
if errorlevel 3 goto QUICK_LINE_INST
if errorlevel 2 goto QUICK_EDGE_BM
if errorlevel 1 goto QUICK_POWER_ICON

:QUICK_PLUS_CHECK_STATE
cls
echo %ESC_ORG%======================================================%ESC%[0m
echo  %ESC%[33mアイコン配置 / クイックPLUS 状態確認%ESC%[0m
echo %ESC_ORG%======================================================%ESC%[0m
echo  現在の作業ステータスを選択してください:
echo   [1] %ESC%[32m設定完了 (ステータスを [済] にする)%ESC%[0m
echo   [0] 状態を変更せずメニューへ戻る
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
choice /c 10 /n /m "番号を選択してください [1 / 0]: "

if errorlevel 2 goto BACK_TO_CURRENT_MENU
if errorlevel 1 (
    call :RECORD_ACTION SETUP SETUP_8 "クイックPLUS設定完了"
    goto BACK_TO_CURRENT_MENU
)

:: --- 各種処理 ---
:QUICK_POWER_ICON
echo.
echo 電源系アイコンをデスクトップにコピーしています...
copy /y "%~dp0tools\電源を切る(シャットダウン).lnk" "%USERPROFILE%\Desktop\" >nul 2>&1
copy /y "%~dp0tools\再起動.lnk" "%USERPROFILE%\Desktop\" >nul 2>&1
echo 完了しました。
pause
goto QUICK_PLUS_MENU

:QUICK_EDGE_BM
echo.
echo %ESC%[33m【注意】Edgeのお気に入り適用について%ESC%[0m
echo Edgeのお気に入り全体を上書きする処理を行います。
echo 処理が始まると、現在あるお気に入りの内容が全て消えます。
echo デフォルトで登録されたお気に入りを消したくない場合は、
echo 「クイックPLUS用.html」を使ってインポートしてください。
echo お気に入りを適用するため、現在開いているEdgeを強制終了します。
echo Edgeで作業中の画面がある場合は、入力中のデータが消えます。
echo 作業中の場合は「N」で戻り、作業を済ませて再実行してください。
echo.
choice /c YN /n /m "Edgeを強制終了して適用を続行しますか？ [Y/N]: "
if errorlevel 2 (
    echo キャンセルしました。
    pause
    goto QUICK_PLUS_MENU
)

echo.
echo Edgeのお気に入りを適用しています...
taskkill /f /im msedge.exe >nul 2>&1
timeout /t 2 /nobreak >nul
set "DEST_DIR=%LOCALAPPDATA%\Microsoft\Edge\User Data\Default"
if not exist "%DEST_DIR%" mkdir "%DEST_DIR%" >nul 2>&1
copy /y "%~dp0tools\Bookmarks" "%DEST_DIR%\Bookmarks" >nul 2>&1
echo 完了しました。
pause
goto QUICK_PLUS_MENU

:QUICK_LINE_INST
echo.
echo LINEのインストーラを起動しています...
start "" "%~dp0tools\LineInst.exe"
goto QUICK_PLUS_MENU

:QUICK_ZOOM_INST
echo.
echo Zoomのインストーラを起動しています...
start "" "%~dp0tools\ZoomInstallerFull.exe"
goto QUICK_PLUS_MENU

:QUICK_ZOOM_ICON
echo.
echo Zoomのショートカットをデスクトップに配置しています...
:: ユーザープロファイル側のスタートメニューからデスクトップへコピー
copy /y "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Zoom\Zoom.lnk" "%USERPROFILE%\Desktop\" >nul 2>&1
echo 完了しました。
pause
goto QUICK_PLUS_MENU

:: ========================================================
:: [Page 1-1] ウィルスフルスキャン サブメニュー
:: ========================================================
:VIRUS_SCAN_MENU
cls
echo %ESC%[36m======================================================%ESC%[0m
echo        %ESC%[33mウィルスフルスキャン メニュー%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m

set "AV_DEF=0"
set "AV_CNT=0"
set "AV_TPLIST="
set "AV_MIYA=0"
set "AV_TREND=0"
set "AV_NORTON=0"
set "AV_MCAFEE=0"

for /f "usebackq tokens=1,* delims==" %%A in (`powershell -NoProfile -Command "$a=@(Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue); $d=0; $t=@(); foreach($x in $a){if($x.displayName -like '*Windows Defender*'){$d=1}else{$t+=$x.displayName}}; Write-Output ('DEF=' + $d); Write-Output ('CNT=' + $t.Count); Write-Output ('TP=' + ($t -join ' / '))"`) do (
    if "%%A"=="DEF" set "AV_DEF=%%B"
    if "%%A"=="CNT" set "AV_CNT=%%B"
    if "%%A"=="TP" set "AV_TPLIST=%%B"
)

if "%AV_CNT%"=="" set "AV_CNT=0"
if %AV_CNT% gtr 0 (
    echo  %ESC%[32m【現状態】以下の他社セキュリティソフトが検出されました:%ESC%[0m
    echo         %ESC%[33m%AV_TPLIST%%ESC%[0m
    echo %AV_TPLIST% | find /i "みやブル" >nul && set "AV_MIYA=1"
    echo %AV_TPLIST% | find /i "ウイルスバスター" >nul && set "AV_TREND=1"
    echo %AV_TPLIST% | find /i "Trend Micro" >nul && set "AV_TREND=1"
    echo %AV_TPLIST% | find /i "Norton" >nul && set "AV_NORTON=1"
    echo %AV_TPLIST% | find /i "McAfee" >nul && set "AV_MCAFEE=1"
) else (
    if "%AV_DEF%"=="1" (
        echo  %ESC%[32m【現状態】Windows Defender 【OS標準保護】が有効です%ESC%[0m
    ) else (
        echo  %ESC%[32m【現状態】有効なセキュリティソフトは検出されていません%ESC%[0m
    )
)
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo  [1] %ESC%[32mWindows Defender (Windows セキュリティ) を開く%ESC%[0m
echo  [2] %ESC%[32mウイルスバスター 起動 (検出時のみ有効)%ESC%[0m
echo  [3] %ESC%[32mみやブル 起動 (検出時のみ有効)%ESC%[0m
echo  [4] %ESC%[32mNorton 起動 (検出時のみ有効)%ESC%[0m
echo  [5] %ESC%[32mMcAfee 起動 (検出時のみ有効)%ESC%[0m
echo  %ESC%[33m------------------------------------------------------%ESC%[0m
echo  [W] %ESC%[32mウイルスバスター Webコンソール (ログイン画面) を開く%ESC%[0m
echo  [0] メニューに戻る
echo %ESC%[36m======================================================%ESC%[0m
choice /c 12345W0 /n /m "番号またはキーを入力してください: "

if errorlevel 7 goto BACK_TO_CURRENT_MENU
call :RECORD_ACTION MAINT MAINT_1 "ウィルススキャン実行"
if errorlevel 6 goto OPEN_TREND_WEB
if errorlevel 5 goto LAUNCH_MCAFEE
if errorlevel 4 goto LAUNCH_NORTON
if errorlevel 3 goto LAUNCH_MIYA
if errorlevel 2 goto LAUNCH_TREND
if errorlevel 1 goto LAUNCH_DEFENDER

:LAUNCH_DEFENDER
start windowsdefender:
goto VIRUS_SCAN_MENU

:LAUNCH_TREND
if "%AV_TREND%"=="1" goto DO_LAUNCH_TREND
if "%AV_MIYA%"=="1" goto DO_LAUNCH_TREND
echo.
echo %ESC%[31m[!] ウイルスバスターは検出されませんでした。%ESC%[0m
pause
goto VIRUS_SCAN_MENU

:DO_LAUNCH_TREND
echo ウイルスバスター を起動中...
if exist "%ProgramFiles%\Trend Micro\Titanium\ShorcutLauncher.exe" (
    start "" "%ProgramFiles%\Trend Micro\Titanium\ShorcutLauncher.exe" -OpenMainConsole
    goto VIRUS_SCAN_MENU
)
echo 実行ファイルが見つかりません。
pause
goto VIRUS_SCAN_MENU

:LAUNCH_MIYA
if "%AV_MIYA%"=="1" goto DO_LAUNCH_MIYA
echo.
echo %ESC%[31m[!] みやブルは検出されませんでした。%ESC%[0m
pause
goto VIRUS_SCAN_MENU

:DO_LAUNCH_MIYA
echo みやブル を起動中...

:: 1. WMI (SecurityCenter2) から OS 登録済みの正規起動パスを取得して実行
set "MIYA_EXE="
for /f "usebackq delims=" %%I in (`powershell -NoProfile -Command "$p=(Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Where-Object { $_.displayName -like '*みやブル*' }).pathToSignedProductExe; if($p){ [System.Environment]::ExpandEnvironmentVariables($p) }" 2^>nul`) do (
    if exist "%%~I" set "MIYA_EXE=%%~I"
)
if defined MIYA_EXE (
    start "" "%MIYA_EXE%"
    goto VIRUS_SCAN_MENU
)

:: 2. スタートメニューの登録ショートカットから探索 (All Users / Current User)
if exist "%ProgramData%\Microsoft\Windows\Start Menu\Programs\*みやブル*.lnk" (
    for %%F in ("%ProgramData%\Microsoft\Windows\Start Menu\Programs\*みやブル*.lnk") do (
        start "" "%%F"
        goto VIRUS_SCAN_MENU
    )
)
if exist "%APPDATA%\Microsoft\Windows\Start Menu\Programs\*みやブル*.lnk" (
    for %%F in ("%APPDATA%\Microsoft\Windows\Start Menu\Programs\*みやブル*.lnk") do (
        start "" "%%F"
        goto VIRUS_SCAN_MENU
    )
)

echo.
echo %ESC%[31m[!] みやブルの実行ファイルが見つかりませんでした。%ESC%[0m
pause
goto VIRUS_SCAN_MENU

:LAUNCH_NORTON
if "%AV_NORTON%"=="1" goto DO_LAUNCH_NORTON
echo.
echo %ESC%[31m[!] Norton は検出されませんでした。%ESC%[0m
pause
goto VIRUS_SCAN_MENU

:DO_LAUNCH_NORTON
echo Norton を起動中...
if exist "%ProgramFiles%\Norton Security\Engine\uistub.exe" (
    start "" "%ProgramFiles%\Norton Security\Engine\uistub.exe"
    goto VIRUS_SCAN_MENU
)
echo 実行ファイルが見つかりません (バージョンによりパスが異なる場合があります)。
pause
goto VIRUS_SCAN_MENU

:LAUNCH_MCAFEE
if "%AV_MCAFEE%"=="1" goto DO_LAUNCH_MCAFEE
echo.
echo %ESC%[31m[!] McAfee は検出されませんでした。%ESC%[0m
pause
goto VIRUS_SCAN_MENU

:DO_LAUNCH_MCAFEE
echo McAfee を起動中...

:: 1. 最新版 McAfee (WPS / mc-launch.exe) を最優先で起動
if exist "%ProgramFiles%\McAfee\wps\mc-launch.exe" (
    start "" "%ProgramFiles%\McAfee\wps\mc-launch.exe" /source:desktop_shortcut
    goto VIRUS_SCAN_MENU
)

:: 2. WMI (SecurityCenter2) から OS 登録済みの正規起動パスを取得して実行
set "MCAFEE_EXE="
for /f "usebackq delims=" %%I in (`powershell -NoProfile -Command "(Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Where-Object { $_.displayName -like '*McAfee*' }).pathToSignedProductExe" 2^>nul`) do (
    if exist "%%~I" set "MCAFEE_EXE=%%~I"
)
if defined MCAFEE_EXE (
    start "" "%MCAFEE_EXE%"
    goto VIRUS_SCAN_MENU
)

:: 3. 従来版・他世代の固定配置パスを順次フォールバック探索
if exist "%ProgramFiles%\McAfee\MSC\mcuihost.exe" (
    start "" "%ProgramFiles%\McAfee\MSC\mcuihost.exe"
    goto VIRUS_SCAN_MENU
)
if exist "%ProgramFiles%\Common Files\McAfee\Platform\McUICnt.exe" (
    start "" "%ProgramFiles%\Common Files\McAfee\Platform\McUICnt.exe"
    goto VIRUS_SCAN_MENU
)
if exist "%ProgramFiles%\McAfee.com\Agent\mcagent.exe" (
    start "" "%ProgramFiles%\McAfee.com\Agent\mcagent.exe"
    goto VIRUS_SCAN_MENU
)

:: 4. スタートメニューの登録ショートカットから起動
if exist "%ProgramData%\Microsoft\Windows\Start Menu\Programs\McAfee*.lnk" (
    for %%F in ("%ProgramData%\Microsoft\Windows\Start Menu\Programs\McAfee*.lnk") do (
        start "" "%%F"
        goto VIRUS_SCAN_MENU
    )
)

echo 実行ファイルが見つかりませんでした。
pause
goto VIRUS_SCAN_MENU

:OPEN_TREND_WEB
echo ウイルスバスター Webコンソールを開いています...
start "" "https://account.trendmicro.com/"
goto VIRUS_SCAN_MENU


:: ========================================================
:: [Page 2-A] 本バッチを C:\AP (隠しフォルダ) へ配備・構築
:: ========================================================
:INSTALL_TO_AP
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m本バッチ環境を C:\AP へ配備・構築します%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo.
echo  【処理内容】
echo   1. C:\AP フォルダを隠し属性 (Hidden) で作成
echo   2. 現在のバッチファイル本体を C:\AP 配下へコピー
echo   3. C:\AP\tools フォルダと C:\AP\tools\log フォルダを作成
echo   ※ 外部ツール群 (exe等) は容量の都合上コピーしません。
echo.
choice /c yn /m "配備を実行しますか？ (Y/N): "
if errorlevel 2 goto PAGE2

echo.
if not exist "C:\AP" (
    md "C:\AP"
    attrib +h "C:\AP"
    echo [OK] C:\AP フォルダを隠し属性で作成しました。
) else (
    echo [SKIP] C:\AP フォルダは既に存在します。
)

copy /y "%~f0" "C:\AP\%~nx0" >nul
if %errorlevel% equ 0 (
    echo [OK] バッチファイルを C:\AP へコピーしました。
) else (
    echo %ESC%[31m[!] バッチファイルのコピーに失敗しました。%ESC%[0m
)

if not exist "C:\AP\tools" md "C:\AP\tools"
if not exist "C:\AP\tools\log" md "C:\AP\tools\log"
echo [OK] フォルダ構造 (tools / tools\log) を構築しました。

echo.
echo %ESC%[32m配備が完了しました。%ESC%[0m
pause
goto PAGE2

:: ========================================================
:: [Page 2-B] オンライン アップデート サブメニュー
:: ========================================================
:UPDATE_MENU
cls
echo %ESC_PUR%======================================================%ESC%[0m
echo         %ESC%[33mオンライン アップデート ＆ バージョン管理%ESC%[0m
echo %ESC_PUR%======================================================%ESC%[0m
echo  現在のバージョン : Ver.%APP_VER%
echo  更新サーバー     : %UPDATE_SERVER_URL%
echo %ESC_PUR%------------------------------------------------------%ESC%[0m
echo  [1] %ESC%[32m最新バージョンの確認 ＆ アップデート実行%ESC%[0m
echo  [2] %ESC%[32mアップデート更新履歴 (changelog) を確認%ESC%[0m
echo %ESC_PUR%------------------------------------------------------%ESC%[0m
echo  [0] ツール・コマンドメニューへ戻る
echo %ESC_PUR%======================================================%ESC%[0m
choice /c 120 /n /m "番号を入力してください [1-2 / 0]: "

if errorlevel 3 goto PAGE2
if errorlevel 2 goto VIEW_CHANGELOG
if errorlevel 1 goto CHECK_AND_UPDATE

:CHECK_AND_UPDATE
cls
echo %ESC_PUR%======================================================%ESC%[0m
echo  %ESC%[33mサーバーに接続して更新を確認しています...%ESC%[0m
echo %ESC_PUR%======================================================%ESC%[0m
echo.

set "LATEST_VER="
for /f "usebackq tokens=*" %%V in (`curl -s -f --connect-timeout 5 "%UPDATE_SERVER_URL%/version.txt" 2^>nul`) do (
    set "LATEST_VER=%%V"
)

if not defined LATEST_VER (
    echo %ESC%[31m[!] サーバーへの接続に失敗しました。%ESC%[0m
    echo     サーバーが稼働しているか、ネットワーク接続を確認してください。
    echo     接続先: %UPDATE_SERVER_URL%/version.txt
    echo.
    pause
    goto UPDATE_MENU
)

:: 前後の余白を除去
set "LATEST_VER=%LATEST_VER: =%"

echo 現在のバージョン : Ver.%APP_VER%
echo サーバー最新版   : Ver.%LATEST_VER%
echo.

if "%APP_VER%"=="%LATEST_VER%" (
    echo %ESC%[32m[OK] お使いのバッチファイルは最新の状態です。%ESC%[0m
    echo.
    pause
    goto UPDATE_MENU
)

echo %ESC%[33m新しいバージョン [ Ver.%LATEST_VER% ] が利用可能です！%ESC%[0m
echo.
choice /c yn /m "最新版へアップデートを実行しますか？ (Y/N): "
if errorlevel 2 goto UPDATE_MENU

echo.
echo 最新版バッチファイルをダウンロードしています...
set "TEMP_UPDATE_BAT=%TEMP%\update_temp.bat"
if exist "%TEMP_UPDATE_BAT%" del "%TEMP_UPDATE_BAT%"

curl -s -f --connect-timeout 10 -o "%TEMP_UPDATE_BAT%" "%UPDATE_SERVER_URL%/Maintenance.bat"
if not exist "%TEMP_UPDATE_BAT%" (
    echo %ESC%[31m[!] ダウンロードに失敗しました。更新を中断します。%ESC%[0m
    pause
    goto UPDATE_MENU
)

:: ファイルサイズチェック (空ファイル防止: 1KB以上)
for %%F in ("%TEMP_UPDATE_BAT%") do (
    if %%~zF LSS 1024 (
        echo %ESC%[31m[!] 取得ファイルが不正です (サイズが極端に小さいです)。%ESC%[0m
        del "%TEMP_UPDATE_BAT%"
        pause
        goto UPDATE_MENU
    )
)

echo %ESC%[32mダウンロード完了。安全に入れ替え処理を実行します...%ESC%[0m

:: 一時スワッパーバッチの生成
set "SWAPPER_BAT=%TEMP%\updater_swapper.bat"
> "%SWAPPER_BAT%" echo @echo off
>> "%SWAPPER_BAT%" echo chcp 932 ^>nul
>> "%SWAPPER_BAT%" echo timeout /t 1 /nobreak ^>nul
>> "%SWAPPER_BAT%" echo copy /y "%TEMP_UPDATE_BAT%" "%~f0" ^>nul
>> "%SWAPPER_BAT%" echo del "%TEMP_UPDATE_BAT%" ^>nul
>> "%SWAPPER_BAT%" echo start "" "%~f0"
>> "%SWAPPER_BAT%" echo (goto) 2^>nul ^& del "%%~f0"

:: スワッパーを別窓起動して即時終了
start "" "%SWAPPER_BAT%"
exit

:: ========================================================
:: [アップデータ] 更新履歴 (changelog) の閲覧画面
:: ========================================================
:VIEW_CHANGELOG
cls
echo %ESC_PUR%======================================================%ESC%[0m
echo          %ESC%[33mアップデート更新履歴 (Changelog)%ESC%[0m
echo  %ESC%[90m※ 下へスクロールして閲覧できます / [任意のキー] で戻る%ESC%[0m
echo %ESC_PUR%======================================================%ESC%[0m
echo.

set "TEMP_CHANGELOG=%TEMP%\changelog_temp.txt"
if exist "%TEMP_CHANGELOG%" del "%TEMP_CHANGELOG%"

curl -s -f --connect-timeout 5 -o "%TEMP_CHANGELOG%" "%UPDATE_SERVER_URL%/changelog.txt" 2>nul

if exist "%TEMP_CHANGELOG%" (
    type "%TEMP_CHANGELOG%"
    del "%TEMP_CHANGELOG%" 2>nul
) else (
    echo %ESC%[31m[!] 更新履歴の取得に失敗しました。%ESC%[0m
    echo     サーバーに接続できないか、changelog.txt が存在しません。
)

echo.
echo %ESC_PUR%------------------------------------------------------%ESC%[0m
echo  何かキーを押すとアップデートメニューに戻ります...
powershell -NoProfile -Command "[Console]::WindowTop = 0"
pause >nul
goto UPDATE_MENU

:: ========================================================
:: [終了確認] 戻し忘れ・やり残し警告付き
:: ========================================================
:CONFIRM_EXIT
cls
if "%APP_MODE%"=="SETUP" goto CE_TITLE_SETUP
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33mツールの終了確認%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
goto CE_AFTER_TITLE

:CE_TITLE_SETUP
echo %ESC_ORG%======================================================%ESC%[0m
echo  %ESC%[33mツールの終了確認%ESC%[0m
echo %ESC_ORG%======================================================%ESC%[0m

:CE_AFTER_TITLE
set "WARN_FOUND=0"
if not "%PWR_STATE%"=="CHANGING" goto CE_BUILD_LIST

set "WARN_FOUND=1"
echo  %ESC%[31m【警告】スリープ・画面消灯設定が「変更中」のままです！%ESC%[0m
echo  作業用の設定から通常設定へ元に戻しましたか？
echo  戻し忘れの場合は [N] でメニューに戻り [9] を再実行してください。
if "%APP_MODE%"=="SETUP" (echo %ESC_ORG%------------------------------------------------------%ESC%[0m) else (echo %ESC%[36m------------------------------------------------------%ESC%[0m)

:CE_BUILD_LIST
set "WARN_LIST="
if "%APP_MODE%"=="SETUP" goto CE_WARN_SETUP

:: MAINTの場合のリスト構築
if "%WU_MAINT_STATE%"=="PROGRESS" set "WARN_LIST=%WARN_LIST% Windows Update /"
if "%SOFT_MAINT_STATE%"=="PROGRESS" set "WARN_LIST=%WARN_LIST% ソフト更新 /"
if "%OEM_MAINT_STATE%"=="PROGRESS" set "WARN_LIST=%WARN_LIST% メーカーツール /"
goto CE_WARN_CHECK

:CE_WARN_SETUP
:: SETUPの場合のリスト構築
if "%WU_SETUP_STATE%"=="PROGRESS" set "WARN_LIST=%WARN_LIST% Windows Update /"
if "%SOFT_SETUP_STATE%"=="PROGRESS" set "WARN_LIST=%WARN_LIST% ソフト更新 /"
if "%OEM_SETUP_STATE%"=="PROGRESS" set "WARN_LIST=%WARN_LIST% メーカーツール /"

:CE_WARN_CHECK
if not defined WARN_LIST goto CE_NO_WARN

set "WARN_FOUND=1"
echo  %ESC%[31m【警告】以下の項目が「更新中」のままです！%ESC%[0m
echo   -[%WARN_LIST%]
echo  すべての更新が完了して「最新の状態」になっていますか？
echo  確認済みの場合は [N] で戻り、再度該当メニューから「済」にしてください。
if "%APP_MODE%"=="SETUP" (echo %ESC_ORG%------------------------------------------------------%ESC%[0m) else (echo %ESC%[36m------------------------------------------------------%ESC%[0m)

:CE_NO_WARN
echo.
choice /c yn /m "メンテナンスツールを終了しますか？ (Y/N): "
if errorlevel 2 (
    if defined EXIT_ORIGIN goto %EXIT_ORIGIN%
    goto BACK_TO_CURRENT_MENU
)
goto EXIT_MENU

:: --- BitLocker 起動中継 ---
:RUN_BITLOCKER_MAINT
call :RECORD_ACTION MAINT MAINT_B "BitLocker状態確認・管理"
goto RUN_BITLOCKER

:RUN_BITLOCKER_SETUP
call :RECORD_ACTION SETUP SETUP_B "BitLocker状態確認・管理"
goto RUN_BITLOCKER

:: --- 販売PC: デスクトップ基本アイコン一括表示 ---
:ENABLE_DESKTOP_ICONS
cls
echo %ESC_ORG%======================================================%ESC%[0m
echo  %ESC%[33mデスクトップ基本アイコン 一括表示設定%ESC%[0m
echo %ESC_ORG%======================================================%ESC%[0m
echo 対象: PC / ごみ箱 / ユーザーファイル / コントロールパネル
echo.

set "KEY_NSP=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel"
set "KEY_CSM=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu"

:: コンピューター (PC)
reg add "%KEY_NSP%" /v "{20D04FE0-3AEA-1069-A2D8-08002B30309D}" /t REG_DWORD /d 0 /f >nul
reg add "%KEY_CSM%" /v "{20D04FE0-3AEA-1069-A2D8-08002B30309D}" /t REG_DWORD /d 0 /f >nul

:: ごみ箱
reg add "%KEY_NSP%" /v "{645FF040-5081-101B-9F08-00AA002F954E}" /t REG_DWORD /d 0 /f >nul
reg add "%KEY_CSM%" /v "{645FF040-5081-101B-9F08-00AA002F954E}" /t REG_DWORD /d 0 /f >nul

:: ユーザーのファイル
reg add "%KEY_NSP%" /v "{59031a47-3f72-44a7-89c5-5595fe6b30ee}" /t REG_DWORD /d 0 /f >nul
reg add "%KEY_CSM%" /v "{59031a47-3f72-44a7-89c5-5595fe6b30ee}" /t REG_DWORD /d 0 /f >nul

:: コントロール パネル
reg add "%KEY_NSP%" /v "{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}" /t REG_DWORD /d 0 /f >nul
reg add "%KEY_CSM%" /v "{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}" /t REG_DWORD /d 0 /f >nul

:: シェルへ変更通知
powershell -NoProfile -Command "$c = '[DllImport(' + [char]34 + 'shell32.dll' + [char]34 + ')] public static extern void N(int e, int f, IntPtr a, IntPtr b);'; Add-Type -MemberDefinition $c -Name W -Namespace S; [S.W]::N(0x08000000, 0, [IntPtr]::Zero, [IntPtr]::Zero)" >nul 2>&1

call :RECORD_ACTION SETUP SETUP_1 "デスクトップ基本アイコン一括表示"
echo %ESC%[32m[OK] 4つの基本アイコンを表示状態に設定しました。%ESC%[0m
timeout /t 2 >nul
goto BACK_TO_CURRENT_MENU

:: --- 販売PC: Adobe インストーラー起動 ---
:RUN_ADOBE_INSTALL
cls
echo %ESC_ORG%======================================================%ESC%[0m
echo  %ESC%[33mAdobe Acrobat Reader インストーラー起動%ESC%[0m
echo %ESC_ORG%======================================================%ESC%[0m
set "ADOBE_INSTALLER=%BASE_DIR%tools\Reader_jp_install.exe"

if not exist "%ADOBE_INSTALLER%" goto ADOBE_INSTALL_NOT_FOUND

call :RECORD_ACTION SETUP SETUP_2 "Adobe Acrobat Reader インストール起動"
echo 起動中: Reader_jp_install.exe
start "" "%ADOBE_INSTALLER%"
goto SETUP_PAGE1

:ADOBE_INSTALL_NOT_FOUND
echo %ESC%[31m[!] インストーラーが見つかりませんでした。%ESC%[0m
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
echo 【配置方法】
echo 「tools」フォルダ直下に「Reader_jp_install.exe」を配置してください。
echo パス: %BASE_DIR%tools\Reader_jp_install.exe
echo.
echo ※ ファイルがない場合はWebから直接ダウンロードも可能です。
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
choice /c yn /m "公式ダウンロードサイトをブラウザで開きますか？ (Y/N): "
if errorlevel 2 goto SETUP_PAGE1
call :RECORD_ACTION SETUP SETUP_2 "Adobe Acrobat Reader Webオープン"
start "" "https://get.adobe.com/jp/reader/"
goto SETUP_PAGE1

:: --- 販売PC: Windows Update 起動中継 (自己申告トグル) ---
:RUN_WINUPDATE_SETUP
cls
echo %ESC_ORG%======================================================%ESC%[0m
echo  %ESC%[33mWindows Update の実行 ＆ 状態確認%ESC%[0m
echo %ESC_ORG%======================================================%ESC%[0m
echo Windows Update 画面を開いています...
start ms-settings:windowsupdate
echo.
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
echo  現在の更新ステータスを選択してください:
echo   [1] %ESC%[33m更新適用中 / 再起動待ち (ステータスを [更新中] にする)%ESC%[0m
echo   [2] %ESC%[32m最新の状態を確認した     (ステータスを [済] にする)%ESC%[0m
echo   [0] 状態を変更せずメニューへ戻る
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
choice /c 120 /n /m "番号を選択してください [1-2 / 0]: "

if errorlevel 3 goto BACK_TO_CURRENT_MENU
if errorlevel 2 (
    set "WU_SETUP_STATE=DONE"
    call :RECORD_ACTION SETUP SETUP_3 "Windows Update 最新確認完了"
    goto BACK_TO_CURRENT_MENU
)
if errorlevel 1 (
    set "WU_SETUP_STATE=PROGRESS"
    call :RECORD_ACTION SETUP SETUP_3_ING "Windows Update 更新中"
    goto BACK_TO_CURRENT_MENU
)

:: ========================================================
:: [6] 販売PC: Office 導入 ＆ アカウント準備 サブメニュー
:: ========================================================
:SETUP_OFFICE_MENU
cls
echo %ESC_ORG%======================================================%ESC%[0m
echo        %ESC%[33mOffice 導入 ＆ アカウント準備%ESC%[0m
echo %ESC_ORG%======================================================%ESC%[0m
echo  [1] Microsoft アカウント サインイン / 新規作成
echo  [2] Pegasus サイト (https://ex.pegasus2.jp/tb/)
echo  [3] Microsoft Office セットアップ (office.com/setup)
echo  [4] WPS Office 公式サイト (キングソフト)
echo  [5] 一括ですべて開く (1-4)
echo  [0] メインメニューへ戻る (戻る際に状態を確認します)
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
choice /c 123450 /n /m "番号を入力してください [1-5 / 0]: "

if errorlevel 6 goto SETUP_OFFICE_CHECK_STATE
if errorlevel 5 (
    start "" "https://account.microsoft.com/"
    start "" "https://ex.pegasus2.jp/tb/"
    start "" "https://setup.office.com/"
    start "" "https://www.kingsoft.jp/wps/"
    goto SETUP_OFFICE_MENU
)
if errorlevel 4 start "" "https://www.kingsoft.jp/wps/" & goto SETUP_OFFICE_MENU
if errorlevel 3 start "" "https://setup.office.com/" & goto SETUP_OFFICE_MENU
if errorlevel 2 start "" "https://ex.pegasus2.jp/tb/" & goto SETUP_OFFICE_MENU
if errorlevel 1 start "" "https://account.microsoft.com/" & goto SETUP_OFFICE_MENU

:SETUP_OFFICE_CHECK_STATE
cls
echo %ESC_ORG%======================================================%ESC%[0m
echo  %ESC%[33mOffice 導入 ＆ アカウント設定 状態確認%ESC%[0m
echo %ESC_ORG%======================================================%ESC%[0m
echo  現在の作業ステータスを選択してください:
echo   [1] %ESC%[32m設定完了 (ステータスを [済] にする)%ESC%[0m
echo   [0] 状態を変更せずメニューへ戻る
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
choice /c 10 /n /m "番号を選択してください [1 / 0]: "

if errorlevel 2 goto BACK_TO_CURRENT_MENU
if errorlevel 1 (
    call :RECORD_ACTION SETUP SETUP_6 "Office/アカウント設定完了"
    goto BACK_TO_CURRENT_MENU
)

:: ========================================================
:: [9] 販売PC: セキュリティソフト インストール サブメニュー
:: ========================================================
:SETUP_SECURITY_MENU
cls
echo %ESC_ORG%======================================================%ESC%[0m
echo     %ESC%[33mセキュリティソフト インストール (取扱製品)%ESC%[0m
echo %ESC_ORG%======================================================%ESC%[0m

set "AV_DEF=0"
set "AV_CNT=0"
set "AV_TPLIST="

for /f "usebackq tokens=1,* delims==" %%A in (`powershell -NoProfile -Command "$a=@(Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct -ErrorAction SilentlyContinue); $d=0; $t=@(); foreach($x in $a){if($x.displayName -like '*Windows Defender*'){$d=1}else{$t+=$x.displayName}}; Write-Output ('DEF=' + $d); Write-Output ('CNT=' + $t.Count); Write-Output ('TP=' + ($t -join ' / '))"`) do (
    if "%%A"=="DEF" set "AV_DEF=%%B"
    if "%%A"=="CNT" set "AV_CNT=%%B"
    if "%%A"=="TP" set "AV_TPLIST=%%B"
)

if "%AV_CNT%"=="" set "AV_CNT=0"
if %AV_CNT% geq 2 goto AV_MSG_MULTI
if %AV_CNT% equ 1 goto AV_MSG_SINGLE
goto AV_MSG_NONE

:AV_MSG_MULTI
echo  %ESC%[31m【警告】他社セキュリティソフトが【複数】検出されています:%ESC%[0m
echo         %ESC%[33m%AV_TPLIST%%ESC%[0m
echo  極端な動作低下や競合不具合を防ぐため、既存ソフトを削除してください。
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
goto AV_MENU_BODY

:AV_MSG_SINGLE
echo  %ESC%[31m【注意】他社セキュリティソフトが検出されています:%ESC%[0m
echo         %ESC%[33m%AV_TPLIST%%ESC%[0m
echo  競合を防ぐため、新規導入前に必ずアンインストールしてください。
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
goto AV_MENU_BODY

:AV_MSG_NONE
if "%AV_DEF%"=="1" (
    echo  %ESC%[32m【現状態】Windows Defender 【OS標準保護】が有効です%ESC%[0m
    echo  ※ Windows Defender は削除不要です。
    echo   他社ソフト導入時に自動休止します。
) else (
    echo  %ESC%[32m【現状態】有効なセキュリティソフトは検出されていません%ESC%[0m
)
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
goto AV_MENU_BODY

:AV_MENU_BODY
echo  [U] %ESC%[32mプログラムのアンインストール画面を開く(コンパネ)%ESC%[0m
echo  [S] %ESC%[32m設定の「インストールされているアプリ」を開く%ESC%[0m
echo %ESC%[33m------------------------------------------------------%ESC%[0m
echo  [1] %ESC%[32mウイルスバスター / 詐欺バスター (setup/landing Web)%ESC%[0m
echo  [2] %ESC%[32mみやブル インストール (miyabullSetup-MN.5.2.0R)%ESC%[0m
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
echo  [0] メインメニューへ戻る (戻る際に状態を確認します)
echo %ESC_ORG%======================================================%ESC%[0m
choice /c US120 /n /m "番号またはキーを入力してください: "

if errorlevel 5 goto SETUP_SECURITY_CHECK_STATE
if errorlevel 4 goto RUN_MIYABULL_INSTALL
if errorlevel 3 (
    start "" "https://account.trendlife.com/setup/landing"
    goto SETUP_SECURITY_MENU
)
if errorlevel 2 (
    start ms-settings:appsfeatures
    goto SETUP_SECURITY_MENU
)
if errorlevel 1 (
    start appwiz.cpl
    goto SETUP_SECURITY_MENU
)

:SETUP_SECURITY_CHECK_STATE
cls
echo %ESC_ORG%======================================================%ESC%[0m
echo  %ESC%[33mセキュリティソフト インストール 状態確認%ESC%[0m
echo %ESC_ORG%======================================================%ESC%[0m
echo  現在の作業ステータスを選択してください:
echo   [1] %ESC%[32m導入完了 (ステータスを [済] にする)%ESC%[0m
echo   [0] 状態を変更せずメニューへ戻る
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
choice /c 10 /n /m "番号を選択してください [1 / 0]: "

if errorlevel 2 goto BACK_TO_CURRENT_MENU
if errorlevel 1 (
    call :RECORD_ACTION SETUP SETUP_9 "セキュリティソフト導入完了"
    goto BACK_TO_CURRENT_MENU
)

:RUN_MIYABULL_INSTALL
cls
echo %ESC_ORG%======================================================%ESC%[0m
echo  %ESC%[33mみやブル インストーラー起動%ESC%[0m
echo %ESC_ORG%======================================================%ESC%[0m
set "MIYABULL_INSTALLER=%BASE_DIR%tools\miyabullSetup-MN.5.2.0R.exe"

if not exist "%MIYABULL_INSTALLER%" goto MIYABULL_NOT_FOUND

echo 起動中: miyabullSetup-MN.5.2.0R.exe
start "" "%MIYABULL_INSTALLER%"
goto SETUP_SECURITY_MENU

:MIYABULL_NOT_FOUND
echo %ESC%[31m[!] インストーラーが見つかりませんでした。%ESC%[0m
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
echo 【配置方法】
echo 「tools」フォルダ直下に以下を配置してください。
echo パス: %BASE_DIR%tools\miyabullSetup-MN.5.2.0R.exe
echo.
echo ※ ファイルがない場合はWebトライアルページから直接ダウンロードも可能です。
echo %ESC_ORG%------------------------------------------------------%ESC%[0m
choice /c yn /m "公式トライアルページをブラウザで開きますか？ (Y/N): "
if errorlevel 2 goto SETUP_SECURITY_MENU
start "" "https://miyabull.jp/trial/?a=trial-windows"
goto SETUP_SECURITY_MENU

:: --- 販売PC: 筆ぐるめ ---
:OPEN_FUDEGURUME
call :RECORD_ACTION SETUP SETUP_8 "筆ぐるめ 公式サイトオープン"
echo 筆ぐるめ 公式サイトを開いています...
start "" "https://fudegurume.jp/"
goto SETUP_PAGE1

:: --- 販売PC: リモートサポート アイコン配置 ---
:DEPLOY_REMOTE_ICON
cls
echo %ESC_ORG%======================================================%ESC%[0m
echo  %ESC%[33mリモートサポート アイコンの配置%ESC%[0m
echo %ESC_ORG%======================================================%ESC%[0m
set "SRC_SUPPORT=%BASE_DIR%tools\アプライド_サポートTEL0570-783-792.exe"
for /f "usebackq tokens=*" %%D in (`powershell -NoProfile -Command "[Environment]::GetFolderPath('Desktop')"`) do set "REAL_DESKTOP=%%D"
set "DST_DESKTOP=%REAL_DESKTOP%\アプライド_サポートTEL0570-783-792.exe"

if not exist "%SRC_SUPPORT%" (
    echo %ESC%[31m[!] tools\アプライド_サポートTEL0570-783-792.exe が見つかりませんでした。%ESC%[0m
    echo     USB内の tools フォルダに アプライド_サポートTEL0570-783-792.exe を配置してください。
    echo.
    pause
    goto SETUP_PAGE1
)

copy /y "%SRC_SUPPORT%" "%DST_DESKTOP%" >nul
if %errorlevel% equ 0 (
    call :RECORD_ACTION SETUP SETUP_I "リモサポアイコン配置完了"
    echo %ESC%[32m[OK] デスクトップに アプライド_サポートTEL0570-783-792.exe を正常に配置しました。%ESC%[0m
    echo      配置先: %DST_DESKTOP%
) else (
    echo %ESC%[31m[!] コピーに失敗しました。権限を確認してください。%ESC%[0m
)
echo.
pause
goto SETUP_PAGE1

:: ========================================================
:: コマンドリスト (CMD / PowerShell) サブメニュー
:: ========================================================
:CMD_PS_MENU
cls
echo %ESC_PUR%======================================================%ESC%[0m
echo                %ESC%[33mコマンドリスト%ESC%[0m
echo %ESC_PUR%======================================================%ESC%[0m
echo  --- [ CMD コマンド ] --------------------------------
echo  [1] %ESC%[32mディスクエラー検査 (chkdsk)%ESC%[0m
echo  [2] %ESC%[32mディスクパーティション管理 (diskpart)%ESC%[0m
echo  [3] %ESC%[32mキャッシュクリア ＆ IP再取得 (ipconfig)%ESC%[0m
echo  [4] %ESC%[32mネットワーク初期化 (Winsock / TCP/IP リセット)%ESC%[0m
echo  [5] %ESC%[32mシステム整合性修復 (SFC / DISM)%ESC%[0m
echo  [6] %ESC%[32mバッテリー劣化診断レポート出力 (powercfg)%ESC%[0m
echo  [7] %ESC%[32mUEFI (BIOS) 設定画面へ再起動%ESC%[0m
echo  %ESC_PUR%-----------------------------------------------------%ESC%[0m
echo  --- [ PowerShell コマンド ] -------------------------
echo  [8] %ESC%[32m物理ストレージ健全性確認 (Get-PhysicalDisk)%ESC%[0m
echo  [9] %ESC%[32m直近の重大システムエラー抽出 (Get-WinEvent)%ESC%[0m
echo  [D] %ESC%[32m導入済みドライバ一括退避 (Export-WindowsDriver)%ESC%[0m
echo  [T] %ESC%[32mネットワーク詳細疎通テスト (Test-NetConnection)%ESC%[0m
echo %ESC_PUR%======================================================%ESC%[0m
echo  [M] このページの説明
echo  [0] メニューに戻る (Page 2)
echo %ESC_PUR%======================================================%ESC%[0m
choice /c 123456789DTM0 /n /m "番号またはキーを入力してください: "

if errorlevel 13 goto PAGE2
if errorlevel 12 goto CMD_PS_MANUAL
if errorlevel 11 goto RUN_PS_TESTNET
if errorlevel 10 goto RUN_PS_EXPORTDRIVER
if errorlevel 9 goto RUN_PS_CRITICALLOG
if errorlevel 8 goto RUN_PS_DISKS
if errorlevel 7 goto RUN_REBOOT_UEFI
if errorlevel 6 goto RUN_BATTERY_REPORT
if errorlevel 5 goto RUN_SFC_DISM
if errorlevel 4 goto RUN_NET_RESET
if errorlevel 3 goto RUN_NET_FLUSH
if errorlevel 2 goto RUN_DISKPART
if errorlevel 1 goto RUN_CHKDSK

:: ========================================================
:: コマンドリスト このページの説明 (2ページ構成)
:: ========================================================
:CMD_PS_MANUAL
cls
echo %ESC_PUR%======================================================%ESC%[0m
echo            %ESC%[33mこのページの説明 [Page 1/2]%ESC%[0m
echo %ESC_PUR%======================================================%ESC%[0m
echo  [1] %ESC%[32mchkdsk (ディスク検査)%ESC%[0m
echo      Cドライブの論理エラーを読み取り専用で点検します。
echo      修復が必要な場合は次回再起動時のスキャンを予約。
echo  [2] %ESC%[32mdiskpart (パーティション管理)%ESC%[0m
echo      ボリュームやパーティション操作の対話型ツール。
echo      非常に強力なため誤操作に注意。exit で終了。
echo  [3] %ESC%[32mipconfig (ネットワーク再取得)%ESC%[0m
echo      DNSキャッシュ破棄とIP解放・再取得を一括実行。
echo      一時的な回線不調や名前解決エラーを解消します。
echo  [4] %ESC%[32mWinsock / TCP/IP リセット%ESC%[0m
echo      ソケット層とTCP/IPスタックを初期状態へ戻します。
echo      深刻な通信障害時に使用 (実行後要PC再起動)。
echo  [5] %ESC%[32mSFC / DISM (システム整合性修復)%ESC%[0m
echo      DISMでコンポーネントストアを修復後、SFCで
echo      破損したOSシステムファイルを検出・自動修復。
echo  [6] %ESC%[32mpowercfg (バッテリーレポート)%ESC%[0m
echo      設計容量と実容量を比較したHTMLレポートを出力。
echo      バッテリーの損耗率やサイクル数を即座に確認。
echo  [7] %ESC%[32mUEFI (BIOS) 設定画面へ再起動%ESC%[0m
echo      次回起動時に直接BIOS/UEFI画面へ突入させます。
echo %ESC_PUR%------------------------------------------------------%ESC%[0m
echo  何かキーを押すと PowerShell編 へ進みます...
echo %ESC_PUR%======================================================%ESC%[0m
pause >nul

cls
echo %ESC_PUR%======================================================%ESC%[0m
echo            %ESC%[33mこのページの説明 [Page 2/2]%ESC%[0m
echo %ESC_PUR%======================================================%ESC%[0m
echo  [8] %ESC%[32mGet-PhysicalDisk (物理ストレージ一覧)%ESC%[0m
echo      接続された全ディスクの種別 (SSD/HDD/NVMe) と
echo      ハードウェア的な健全性 (Healthy等) を一覧表示。
echo  [9] %ESC%[32mGet-WinEvent (重大エラー抽出)%ESC%[0m
echo      イベントログから直近の「重大」「エラー」のみを
echo      抽出表示。Kernel-Power 41 等の不意の落ちを調査。
echo  [D] %ESC%[32mExport-WindowsDriver (ドライバ退避)%ESC%[0m
echo      稼働中のOSからサードパーティ製ドライバのみを
echo      INF形式でデスクトップへ丸ごと抽出・保存します。
echo      クリーンインストール前のドライバ保全に最適。
echo  [T] %ESC%[32mTest-NetConnection (詳細疎通テスト)%ESC%[0m
echo      8.8.8.8 に対するPing疎通、DNS、ルート検証を行い
echo      ネットワークのどこで詰まっているかを診断します。
echo %ESC_PUR%------------------------------------------------------%ESC%[0m
echo  何かキーを押すと メニュー へ戻ります...
echo %ESC_PUR%======================================================%ESC%[0m
pause >nul
goto CMD_PS_MENU

:: ========================================================
:: 追加コマンド実行サブルーチン群
:: ========================================================

:RUN_SFC_DISM
cls
echo %ESC%[33m[!] システム整合性修復を実行します...%ESC%[0m
echo DISM コンポーネントストアの修復を開始...
dism /online /cleanup-image /restorehealth
echo.
echo SFC システムファイルスキャンを開始...
sfc /scannow
echo.
echo 処理が完了しました。
pause
goto CMD_PS_MENU

:RUN_BATTERY_REPORT
cls
echo バッテリー診断レポートを生成しています...
powercfg /batteryreport /output "%USERPROFILE%\Desktop\battery_report.html" >nul 2>&1
if exist "%USERPROFILE%\Desktop\battery_report.html" (
    echo %ESC%[32m[OK] デスクトップに battery_report.html を出力しました。%ESC%[0m
    start "" "%USERPROFILE%\Desktop\battery_report.html"
) else (
    echo %ESC%[31m[!] バッテリーが搭載されていないか、生成に失敗しました。%ESC%[0m
)
pause
goto CMD_PS_MENU

:RUN_REBOOT_UEFI
cls
echo %ESC%[31m======================================================%ESC%[0m
echo  【警告】次回起動時に UEFI (BIOS) 画面へ入るよう再起動します。
echo %ESC%[31m======================================================%ESC%[0m
choice /c YN /n /m "今すぐ再起動を実行しますか？ [Y/N]: "
if errorlevel 2 goto CMD_PS_MENU
shutdown /r /fw /t 0
if %errorlevel% neq 0 (
    echo.
    echo %ESC%[31m[!] UEFI再起動の要求に失敗しました。%ESC%[0m
    echo (本機能は UEFI/GPT 環境でのみ動作します)
    pause
)
goto CMD_PS_MENU

:RUN_PS_DISKS
cls
echo %ESC_PUR%=== 物理ストレージ健全性・種別一覧 ===%ESC%[0m
powershell -NoProfile -Command "Get-PhysicalDisk | Select-Object DeviceId, FriendlyName, MediaType, HealthStatus, OperationalStatus | Format-Table -AutoSize"
echo.
pause
goto CMD_PS_MENU

:RUN_PS_CRITICALLOG
cls
echo %ESC_PUR%=== 直近の重大エラー・システム警告 (最新10件) ===%ESC%[0m
powershell -NoProfile -Command "$e = Get-WinEvent -FilterHashtable @{LogName='System'; Level=1,2} -MaxEvents 10 -ErrorAction SilentlyContinue; if($e){ $e | Select-Object TimeCreated, Id, Message | Format-List } else { Write-Host '重大なエラーログは検出されませんでした。' -ForegroundColor Green }"
echo.
pause
goto CMD_PS_MENU

:RUN_PS_EXPORTDRIVER
cls
echo %ESC_PUR%=== 導入済みサードパーティ製ドライバの退避 ===%ESC%[0m
set "DRV_EXP_PATH=%USERPROFILE%\Desktop\DriversBackup"
echo 保存先: %DRV_EXP_PATH%
echo 抽出中... しばらくお待ちください。
powershell -NoProfile -Command "Export-WindowsDriver -Online -Destination '%DRV_EXP_PATH%' | Out-Null"
if exist "%DRV_EXP_PATH%" (
    echo %ESC%[32m[OK] デスクトップの DriversBackup フォルダへ退避しました。%ESC%[0m
    start "" "%DRV_EXP_PATH%"
) else (
    echo %ESC%[31m[!] ドライバの抽出に失敗しました。%ESC%[0m
)
pause
goto CMD_PS_MENU

:RUN_PS_TESTNET
cls
echo %ESC_PUR%=== ネットワーク詳細疎通テスト (Target: 8.8.8.8) ===%ESC%[0m
powershell -NoProfile -Command "Test-NetConnection -ComputerName 8.8.8.8 -InformationLevel Detailed"
echo.
pause
goto CMD_PS_MENU

:: ========================================================
:: KeyFreeze 起動処理
:: ========================================================
:RUN_KEYFREEZE
if not defined EXE_KF (
    echo.
    echo %ESC%[31m[!] KeyFreeze が見つかりませんでした。%ESC%[0m
    echo %ESC%[33m    配置先: tools\KeyFreeze\KeyFreeze_x64.exe%ESC%[0m
    pause
    goto PAGE2
)

cls
echo %ESC_PUR%======================================================%ESC%[0m
echo          %ESC%[33mKeyFreeze (キーボード清掃ロック)%ESC%[0m
echo %ESC_PUR%======================================================%ESC%[0m
echo(
echo  %ESC%[31m【注意・事前確認】%ESC%[0m
echo   本ツールのロック解除には
echo   %ESC%[32m[Ctrl] + [Alt] + [F] キー%ESC%[0m を使用します。
echo(
echo   対象PCのキーボードでこれらのキーが反応しない場合、
echo   ロックを自力解除できなくなる恐れがあります。
echo(
echo %ESC_PUR%======================================================%ESC%[0m
choice /c YN /n /m "キーの動作に問題はありませんか？ 清掃に進みますか？ [Y/N]: "
if errorlevel 2 goto PAGE2

echo KeyFreeze を起動しています...
start "" "%EXE_KF%"

cls
echo %ESC_PUR%======================================================%ESC%[0m
echo          %ESC%[33mKeyFreeze (キーボード清掃ロック)%ESC%[0m
echo %ESC_PUR%======================================================%ESC%[0m
echo(
echo  KeyFreeze を起動しました。
echo  数秒後にキーボード・マウスの入力を無効化します。
echo(
echo  %ESC_PUR%[ 操作方法 ]%ESC%[0m
echo    %ESC%[32m[Ctrl] + [Alt] + [F]%ESC%[0m : ロック / 解除の切り替え
echo(
echo  キーボードの清掃完了後、
echo  何かキーを押すと KeyFreeze を終了してメニューに戻ります。
echo(
echo %ESC_PUR%======================================================%ESC%[0m
pause >nul

echo KeyFreeze を終了しています...
taskkill /f /im KeyFreeze_x64.exe >nul 2>&1
goto PAGE2

:RUN_DEVMGMT
start devmgmt.msc
goto PAGE2

:: ========================================================
:: PCスペック ＆ システム詳細レポート表示
:: ========================================================
:SHOW_PC_SUMMARY
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33mPCハードウェア ＆ システム詳細情報を収集中...%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m

set "PC_PHY1="
set "PC_PHY2="
set "PC_PHY3="
set "PC_PHY4="
set "PC_GPU1="
set "PC_GPU2="
set "PC_GPU3="
set "PC_ETH="
set "PC_WIFI="
set "PC_SAVENAME="
set "PC_RAMSLOT="

for /f "usebackq tokens=1,2 delims=|" %%A in (`powershell -NoProfile -Command ^
    "$cs = Get-CimInstance Win32_ComputerSystem;" ^
    "$bios = Get-CimInstance Win32_BIOS;" ^
    "$cpu = Get-CimInstance Win32_Processor | Select-Object -First 1;" ^
    "$os = Get-CimInstance Win32_OperatingSystem;" ^
    "$osVer = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').DisplayVersion;" ^
    "$osTitle = if($osVer){ $os.Caption + ' ' + $osVer + ' (' + $os.Version + ')' }else{ $os.Caption + ' (' + $os.Version + ')' };" ^
    "$osTitle = $osTitle.Replace('(R)','').Replace('(TM)','').Trim();" ^
    "$cDisk = Get-CimInstance Win32_LogicalDisk | Where-Object { $_.DeviceID -eq 'C:' };" ^
    "$sound = Get-CimInstance Win32_SoundDevice | Select-Object -First 1;" ^
    "$physDisks = Get-CimInstance Win32_DiskDrive;" ^
    "$idx = 1;" ^
    "foreach ($d in $physDisks) {" ^
    "    $gb = [Math]::Round($d.Size / 1GB, 1);" ^
    "    Write-Output ('PHY' + $idx + '|' + $d.Model + ' (' + $gb + ' GB)');" ^
    "    $idx++;" ^
    "}" ^
    "$gpus = Get-CimInstance Win32_VideoController;" ^
    "$gIdx = 1;" ^
    "foreach ($g in $gpus) {" ^
    "    Write-Output ('GPU' + $gIdx + '|' + $g.Name);" ^
    "    $gIdx++;" ^
    "}" ^
    "$memModules = Get-CimInstance Win32_PhysicalMemory;" ^
    "$mCapList = @();" ^
    "foreach ($m in $memModules) {" ^
    "    $mCapList += ([string][Math]::Round($m.Capacity / 1GB) + 'GB');" ^
    "}" ^
    "$mCount = $mCapList.Count;" ^
    "$ramGB = [Math]::Round($cs.TotalPhysicalMemory / 1GB, 1);" ^
    "$memTotal = if($mCount -gt 0){ '' + $ramGB + ' GB (' + ($mCapList -join ' + ') + ')' }else{ '' + $ramGB + ' GB' };" ^
    "$memSlot = if($mCount -gt 0){ '(' + $mCount + '枚挿し)' }else{ '' };" ^
    "$cpuClean = if($cpu){ $cpu.Name.Replace('(R)','').Replace('(TM)','').Trim() }else{ '不明' };" ^
    "$eth = Get-NetAdapter | Where-Object { $_.PhysicalMediaType -notmatch '802.11' -and $_.HardwareInterface } | Select-Object -First 1;" ^
    "$wifi = Get-NetAdapter | Where-Object { $_.PhysicalMediaType -match '802.11' } | Select-Object -First 1;" ^
    "$ethStatus = if($eth){ $eth.InterfaceDescription + ' [' + $(if($eth.Status -eq 'Up'){'接続中'}else{'未接続'}) + ']' }else{'非搭載/無効'};" ^
    "$wifiStatus = if($wifi){ $wifi.InterfaceDescription + ' [' + $(if($wifi.Status -eq 'Up'){'接続中'}else{'未接続'}) + ']' }else{'非搭載/無効'};" ^
    "$cFree = [Math]::Round($cDisk.FreeSpace / 1GB, 1);" ^
    "$cTot = [Math]::Round($cDisk.Size / 1GB, 1);" ^
    "$safeModel = ($cs.Model -replace '[^\w\.-]', '_').Trim('_');" ^
    "if(-not $safeModel){ $safeModel = 'PC' };" ^
    "$dateStr = Get-Date -Format 'yyyyMMdd_HHmmss';" ^
    "Write-Output ('SAVENAME|' + $safeModel + '_' + $dateStr);" ^
    "Write-Output ('MAN|' + $cs.Manufacturer);" ^
    "Write-Output ('MOD|' + $cs.Model);" ^
    "Write-Output ('SER|' + $bios.SerialNumber);" ^
    "Write-Output ('OS|' + $osTitle);" ^
    "Write-Output ('CPU|' + $cpuClean);" ^
    "Write-Output ('RAM|' + $memTotal);" ^
    "Write-Output ('RAMSLOT|' + $memSlot);" ^
    "Write-Output ('DSK|C: ' + $cFree + ' GB 空き / 全体 ' + $cTot + ' GB');" ^
    "Write-Output ('ETH|' + $ethStatus);" ^
    "Write-Output ('WIFI|' + $wifiStatus);" ^
    "Write-Output ('SND|' + $(if($sound){$sound.Name}else{'検出なし'}));" ^
    " "`) do (
    set "PC_%%A=%%B"
)

:DISPLAY_PC_REPORT
cls
if not defined PC_MAN set "PC_MAN=不明"
if not defined PC_MOD set "PC_MOD=不明"
if not defined PC_SER set "PC_SER=不明"
if not defined PC_OS  set "PC_OS=不明"
if not defined PC_CPU set "PC_CPU=不明"
if not defined PC_RAM set "PC_RAM=不明"
if not defined PC_DSK set "PC_DSK=不明"
if not defined PC_ETH set "PC_ETH=非搭載/無効"
if not defined PC_WIFI set "PC_WIFI=非搭載/無効"
if not defined PC_SND set "PC_SND=検出なし"

echo %ESC%[36m======================================================%ESC%[0m
echo       %ESC%[33mPCスペック ＆ システム詳細レポート%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo   %ESC%[33mメーカー / モデル / シリアルナンバー:%ESC%[0m
echo     %PC_MAN% / %PC_MOD% / %PC_SER%
echo   %ESC%[33mOS:%ESC%[0m %PC_OS%
echo   %ESC%[33mCPU:%ESC%[0m %PC_CPU%
echo   %ESC%[33mGPU:%ESC%[0m 1. %PC_GPU1%
if defined PC_GPU2 echo     2. %PC_GPU2%
if defined PC_GPU3 echo     3. %PC_GPU3%
echo   %ESC%[33mRAM:%ESC%[0m %PC_RAM%
if defined PC_RAMSLOT if not "%PC_RAMSLOT%"=="" echo        %PC_RAMSLOT%
echo   %ESC%[33m接続物理ディスク:%ESC%[0m
if defined PC_PHY1 echo     1. %PC_PHY1%
if defined PC_PHY2 echo     2. %PC_PHY2%
if defined PC_PHY3 echo     3. %PC_PHY3%
if defined PC_PHY4 echo     4. %PC_PHY4%
echo   %ESC%[33m有線LAN (Ethernet):%ESC%[0m
echo     %PC_ETH%
echo   %ESC%[33m無線LAN (Wi-Fi):%ESC%[0m
echo     %PC_WIFI%
echo   %ESC%[33mサウンドデバイス:%ESC%[0m
echo     %PC_SND%
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo  [1] デバイスマネージャーを開く (devmgmt.msc)
echo  [2] タスクマネージャーを開く   (taskmgr)
echo  [3] レポートをテキスト保存
echo  [4] ディスク使用量詳細調査
echo  [M] このページの説明
echo  [0] メニューに戻る
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c 1234M0 /n /m "番号またはキーを入力してください: "

if errorlevel 6 goto BACK_TO_CURRENT_MENU
if errorlevel 5 goto REPORT_MANUAL
if errorlevel 4 goto RUN_STORAGE_REPORT
if errorlevel 3 goto SAVE_PC_REPORT
if errorlevel 2 (
    start taskmgr.exe
    goto DISPLAY_PC_REPORT
)
if errorlevel 1 (
    start devmgmt.msc
    goto DISPLAY_PC_REPORT
)

:SAVE_PC_REPORT
set "REPORT_FILE=%BASE_DIR%%PC_SAVENAME%.txt"
del "%REPORT_FILE%" 2>nul
>>"%REPORT_FILE%" echo ======================================================
>>"%REPORT_FILE%" echo        PCスペック ＆ システム詳細レポート
>>"%REPORT_FILE%" echo ======================================================
>>"%REPORT_FILE%" echo  [基本システム]
>>"%REPORT_FILE%" echo   メーカー / モデル:
>>"%REPORT_FILE%" echo     %PC_MAN% / %PC_MOD%
>>"%REPORT_FILE%" echo   シリアルナンバー:
>>"%REPORT_FILE%" echo     %PC_SER%
>>"%REPORT_FILE%" echo   OS バージョン:
>>"%REPORT_FILE%" echo     %PC_OS%
>>"%REPORT_FILE%" echo  [主要ハードウェア]
>>"%REPORT_FILE%" echo   CPU:
>>"%REPORT_FILE%" echo     %PC_CPU%
>>"%REPORT_FILE%" echo   グラフィックス:
if defined PC_GPU1 >>"%REPORT_FILE%" echo     1. %PC_GPU1%
if defined PC_GPU2 >>"%REPORT_FILE%" echo     2. %PC_GPU2%
if defined PC_GPU3 >>"%REPORT_FILE%" echo     3. %PC_GPU3%
>>"%REPORT_FILE%" echo   実装メモリ (RAM):
>>"%REPORT_FILE%" echo     %PC_RAM%
if defined PC_RAMSLOT if not "%PC_RAMSLOT%"=="" >>"%REPORT_FILE%" echo     %PC_RAMSLOT%
>>"%REPORT_FILE%" echo   Cドライブ空き容量:
>>"%REPORT_FILE%" echo     %PC_DSK%
>>"%REPORT_FILE%" echo   接続物理ディスク:
if defined PC_PHY1 >>"%REPORT_FILE%" echo     1. %PC_PHY1%
if defined PC_PHY2 >>"%REPORT_FILE%" echo     2. %PC_PHY2%
if defined PC_PHY3 >>"%REPORT_FILE%" echo     3. %PC_PHY3%
if defined PC_PHY4 >>"%REPORT_FILE%" echo     4. %PC_PHY4%
>>"%REPORT_FILE%" echo.
>>"%REPORT_FILE%" echo  [通信 ＆ サウンド]
>>"%REPORT_FILE%" echo   有線LAN (Ethernet):
>>"%REPORT_FILE%" echo     %PC_ETH%
>>"%REPORT_FILE%" echo   無線LAN (Wi-Fi):
>>"%REPORT_FILE%" echo     %PC_WIFI%
>>"%REPORT_FILE%" echo   サウンドデバイス:
>>"%REPORT_FILE%" echo     %PC_SND%
>>"%REPORT_FILE%" echo ======================================================

echo.
echo %ESC%[32m[OK] レポートを保存しました:%ESC%[0m
echo %REPORT_FILE%
echo.
pause
goto DISPLAY_PC_REPORT

:: ========================================================
:: [レポート-M] レポート画面 機能マニュアル・解説
:: ========================================================
:REPORT_MANUAL
cls
echo %ESC%[36m======================================================%ESC%[0m
echo %ESC%[33m       PCスペック ＆ システム詳細レポート: 解説マニュアル%ESC%[0m
echo  %ESC%[90m※ 下へスクロールして閲覧できます / [任意のキー] で戻る%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo.
echo %ESC%[32m[レポートの表示項目について]%ESC%[0m
echo   自動収集された以下のハードウェアおよびシステム情報を表示します。
echo   - 基本システム: メーカー、モデル名、シリアル番号、OSバージョン。
echo   - 主要ハードウェア: CPU、グラフィックス(GPU)、実装メモリ(RAM)容量・枚数。
echo   - ストレージ: 接続されている全物理ディスク情報を最大4台分表示。
echo   - 通信 ＆ サウンド: 有線LAN/Wi-Fiの接続状態、サウンドデバイス。
echo.
echo %ESC%[32m[1] デバイスマネージャー / [2] タスクマネージャー%ESC%[0m
echo   - 動作: OS標準の管理ツールを直接起動します。ドライバの警告確認や、
echo           リアルタイムなシステム負荷 (CPU/メモリ) のチェックに使用します。
echo.
echo %ESC%[32m[3] レポートをテキスト保存%ESC%[0m
echo   - 動作: 画面に表示されているPCスペック情報を、テキストファイルとして書き出します。
echo   - 保存先: バッチファイルと同じ階層 (実行フォルダ内) に出力されます。
echo.
echo %ESC%[32m[4] ディスク使用量詳細調査%ESC%[0m
echo   - 動作: ドライブの容量圧迫原因を特定するための専用調査ツールを起動します。
echo           Cドライブ全体の容量、ユーザーフォルダ内の各データフォルダ、
echo           およびCドライブ直下の独自フォルダの容量を詳細に調査します。
echo.
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo  何かキーを押すとレポート画面に戻ります...
powershell -NoProfile -Command "[Console]::WindowTop = 0"
pause >nul
goto DISPLAY_PC_REPORT

:: ========================================================
:: ディスク使用量詳細調査 (ストレージレポート)
:: ========================================================
:RUN_STORAGE_REPORT
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33mディスク使用量詳細調査%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo  [1] PC全体容量とユーザーフォルダのみ調査
echo  [2] C:\ 直下フォルダ容量リスト (上位5件) を含めて調査
echo  [3] C:\ 直下フォルダ容量リスト (上位10件) を含めて調査
echo  [0] 戻る
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c 1230 /n /m "番号を選択: "
if "%errorlevel%"=="4" goto DISPLAY_PC_REPORT
if "%errorlevel%"=="3" set "TOP_LIMIT=10"
if "%errorlevel%"=="2" set "TOP_LIMIT=5"
if "%errorlevel%"=="1" set "TOP_LIMIT=0"

cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m調査を開始します。しばらくお待ちください...%ESC%[0m
echo  %ESC%[90m(ファイル数が多い場合、数十秒から数分かかることがあります)%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo.

:: 一時ファイルに書き出しながら画面表示する
set "TEMP_LOG=%TEMP%\StorageReport_temp.txt"
if exist "%TEMP_LOG%" del "%TEMP_LOG%"

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "$logPath = '%TEMP_LOG%'; " ^
    "function Out-Line($str) { Write-Host $str; Add-Content -Path $logPath -Value $str }; " ^
    "Out-Line '======================================================'; " ^
    "Out-Line '  ディスクおよびユーザーフォルダ容量調査レポート'; " ^
    "Out-Line '======================================================'; " ^
    "$cDrive = Get-CimInstance Win32_LogicalDisk -Filter \"DeviceID='C:'\"; " ^
    "$cTotal = [math]::Round($cDrive.Size / 1GB, 2); " ^
    "$cFree = [math]::Round($cDrive.FreeSpace / 1GB, 2); " ^
    "$cUsed = $cTotal - $cFree; " ^
    "Out-Line ''; " ^
    "Out-Line '■ C: ドライブ全体'; " ^
    "Out-Line (\"  全体: {0:N2} GB / 使用: {1:N2} GB / 空き: {2:N2} GB\" -f $cTotal, $cUsed, $cFree); " ^
    "Out-Line ''; " ^
    "Out-Line '■ ログインユーザー情報'; " ^
    "Out-Line (\"  ユーザー名: {0}\" -f $env:USERNAME); " ^
    "Out-Line (\"  プロファイル: {0}\" -f $env:USERPROFILE); " ^
    "Out-Line ''; " ^
    "function Get-FolderSize ($path, $name) { " ^
    "    if (Test-Path $path) { " ^
    "        $size = (Get-ChildItem -Path $path -File -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum; " ^
    "        if ($null -eq $size) { $size = 0 }; " ^
    "        if ($size -ge 1GB) { $fmt = '{0,6:N2} GB' -f ($size / 1GB) } else { $fmt = '{0,6:N2} MB' -f ($size / 1MB) }; " ^
    "        $odMark = if ($path -match 'OneDrive') { ' [※OneDrive]' } else { '' }; " ^
    "        Out-Line (\"  {0,-14} : {1}{2}  ({3})\" -f $name, $fmt, $odMark, $path); " ^
    "    } else { " ^
    "        Out-Line (\"  {0,-14} : --- 見つかりません ---\" -f $name); " ^
    "    } " ^
    "} " ^
    "Out-Line '■ 各種データフォルダ容量'; " ^
    "$desktop = [Environment]::GetFolderPath('Desktop'); " ^
    "$documents = [Environment]::GetFolderPath('MyDocuments'); " ^
    "$pictures = [Environment]::GetFolderPath('MyPictures'); " ^
    "$videos = [Environment]::GetFolderPath('MyVideos'); " ^
    "$music = [Environment]::GetFolderPath('MyMusic'); " ^
    "$downloads = (Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders').'{374DE290-123F-4565-9164-39C4925E467B}'; " ^
    "if (-not $downloads) { $downloads = Join-Path $env:USERPROFILE 'Downloads' }; " ^
    "Get-FolderSize $desktop 'デスクトップ'; " ^
    "Get-FolderSize $documents 'ドキュメント'; " ^
    "Get-FolderSize $downloads 'ダウンロード'; " ^
    "Get-FolderSize $pictures 'ピクチャ'; " ^
    "Get-FolderSize $videos 'ビデオ'; " ^
    "Get-FolderSize $music 'ミュージック'; " ^
    "Out-Line ''; " ^
    "Out-Line '■ システム・隠しフォルダ容量'; " ^
    "Get-FolderSize (Join-Path $env:USERPROFILE 'AppData') 'AppData (全体)'; " ^
    "Out-Line '------------------------------------------------------'; " ^
    "Get-FolderSize $env:USERPROFILE 'ユーザー全体'; " ^
    "Out-Line ''; " ^
    "Out-Line '■ ユーザーフォルダ直下の独自ファイル・フォルダ'; " ^
    "$defUsers = @('AppData', 'Desktop', 'Documents', 'Downloads', 'Favorites', 'Links', 'Music', 'OneDrive', 'Pictures', 'Saved Games', 'Searches', 'Videos', 'Contacts', '3D Objects', 'PrintHood', 'Recent', 'SendTo', 'Start Menu', 'Templates', 'Application Data', 'Local Settings', 'NetHood', 'Cookies'); " ^
    "$uItems = Get-ChildItem -Path $env:USERPROFILE -Force -ErrorAction SilentlyContinue | Where-Object { $defUsers -notcontains $_.Name -and $_.Name -notmatch '^ntuser' }; " ^
    "if ($null -eq $uItems -or $uItems.Count -eq 0) { " ^
    "    Out-Line '  ※ 独自ファイル・フォルダは見つかりませんでした。'; " ^
    "} else { " ^
    "    $uSizes = @(); " ^
    "    foreach ($item in $uItems) { " ^
    "        if ($item.PSIsContainer) { " ^
    "            $sz = (Get-ChildItem -Path $item.FullName -File -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum; " ^
    "        } else { " ^
    "            $sz = $item.Length; " ^
    "        } " ^
    "        if ($null -eq $sz) { $sz = 0 }; " ^
    "        if ($sz -gt 0) { $uSizes += [PSCustomObject]@{ Name = $item.Name; Path = $item.FullName; Size = $sz } }; " ^
    "    }; " ^
    "    if ($uSizes.Count -eq 0) { Out-Line '  ※ 容量を持つ独自ファイル・フォルダは見つかりませんでした。' } else { " ^
    "        $uTop = $uSizes | Sort-Object Size -Descending; " ^
    "        foreach ($t in $uTop) { " ^
    "            if ($t.Size -ge 1GB) { $fmt = '{0,6:N2} GB' -f ($t.Size / 1GB) } else { $fmt = '{0,6:N2} MB' -f ($t.Size / 1MB) }; " ^
    "            Out-Line (\"    {0,-14} : {1}  ({2})\" -f $t.Name, $fmt, $t.Path); " ^
    "        }; " ^
    "    } " ^
    "} " ^
    "if (%TOP_LIMIT% -gt 0) { " ^
    "    Out-Line ''; " ^
    "    Out-Line ('■ C:\ 直下のフォルダ容量リスト (上位' + %TOP_LIMIT% + '件)'); " ^
    "    $exclude = @('Windows', 'Program Files', 'Program Files (x86)', 'Users', 'ProgramData', 'Recovery', '$Recycle.Bin', 'System Volume Information', 'PerfLogs', 'Documents and Settings', 'Config.Msi', '$WinREAgent', 'OneDriveTemp', 'DumpStack.log.tmp'); " ^
    "    $rootDirs = Get-ChildItem -Path 'C:\' -Directory -Force -ErrorAction SilentlyContinue | Where-Object { $exclude -notcontains $_.Name }; " ^
    "    if ($null -eq $rootDirs -or $rootDirs.Count -eq 0) { " ^
    "        Out-Line '  ※ デフォルト以外のフォルダは見つかりませんでした。'; " ^
    "    } else { " ^
    "        $dirSizes = @(); " ^
    "        foreach ($dir in $rootDirs) { " ^
    "            $size = (Get-ChildItem -Path $dir.FullName -File -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum; " ^
    "            if ($null -eq $size) { $size = 0 }; " ^
    "            $dirSizes += [PSCustomObject]@{ Name = $dir.Name; Path = $dir.FullName; Size = $size }; " ^
    "        }; " ^
    "        $topDirs = $dirSizes | Sort-Object Size -Descending | Select-Object -First %TOP_LIMIT%; " ^
    "        foreach ($t in $topDirs) { " ^
    "            if ($t.Size -ge 1GB) { $fmt = '{0,6:N2} GB' -f ($t.Size / 1GB) } else { $fmt = '{0,6:N2} MB' -f ($t.Size / 1MB) }; " ^
    "            if ($t.Size -eq 0) { $fmt = '  0.00 MB' }; " ^
    "            Out-Line (\"    {0,-14} : {1}  ({2})\" -f $t.Name, $fmt, $t.Path); " ^
    "        }; " ^
    "    } " ^
    "} " ^
    "Out-Line '======================================================'; "

echo.
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c yn /m "この調査結果をテキストファイルとして保存しますか？ (Y/N): "
if "%errorlevel%"=="1" (
    for /f "usebackq" %%A in (`powershell -NoProfile -Command "Get-Date -f 'yyyyMMdd_HHmmss'"`) do set "TSTAMP=%%A"
    copy /y "%TEMP_LOG%" "%BASE_DIR%StorageReport_!TSTAMP!.txt" >nul
    echo.
    echo %ESC%[32m[OK] レポートを保存しました: %BASE_DIR%StorageReport_!TSTAMP!.txt%ESC%[0m
)
if exist "%TEMP_LOG%" del "%TEMP_LOG%"
echo.
pause
goto DISPLAY_PC_REPORT

:: ========================================================
:: [Page 1-M] Page 1 機能マニュアル・解説
:: ========================================================
:PAGE1_MANUAL
cls
echo %ESC%[36m======================================================%ESC%[0m
echo %ESC%[33m       Page 1: 項目別 実務解説マニュアル%ESC%[0m
echo  %ESC%[90m※ 下へスクロールして閲覧できます / [任意のキー] でメニューへ戻る%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo.
echo %ESC%[32m[進捗管理と手動ステータス変更について]%ESC%[0m
echo   各メニューの右側に表示される [済] や [更新中] のタグは、作業の進行状況を表します。
echo   - 自動判定: 実行するだけで自動的に [済] になる項目。
echo   - 手動判定: Windows Update や 各種アップデート などの時間がかかる項目は、
echo               実行後に「更新中」か「済(完了)」かを自分で選択して記録します。
echo               ※例: Windows Updateは開始時に[1]で「更新中」にし、
echo                     すべて終わってから[2]で「済」に設定してください。
echo.
echo %ESC%[32m[B] BitLocker 状態確認・管理 (Pro/Home対応)%ESC%[0m
echo   - 目的: 全ドライブの暗号化状態の把握、解除、進行状況の追跡。
echo.
echo %ESC%[32m[1] ウィルスフルスキャン%ESC%[0m
echo   - 目的: 常駐セキュリティソフトの自動判別スキャン、各社手動起動、Webログイン。
echo.
echo %ESC%[32m[2] CrystalDiskInfo%ESC%[0m
echo   - 目的: 内蔵SSD/HDDのS.M.A.R.T.情報(健康状態、総読込/書込量、通電時間、温度)の確認。
echo.
echo %ESC%[32m[3] Erk / Eek 起動%ESC%[0m
echo   - 目的: ポータブルマルウェア検査ツールの起動 (Erk優先)。
echo.
echo %ESC%[32m[4] Windows Update 画面を開く%ESC%[0m
echo   - 動作: OS標準の「更新とセキュリティ / Windows Update」設定画面を直接開きます。
echo.
echo %ESC%[32m[5] ソフトアップデート%ESC%[0m
echo   - 動作: Store、Edge、Chrome、Adobe Acrobat Readerの更新画面を管理。
echo.
echo %ESC%[32m[6] メーカーアップデート・リカバリUSB作成%ESC%[0m
echo   - 対応: 各社PC、BTO/自作マザー、GPUドライバ、通信・音響、プリンター。
echo.
echo %ESC%[32m[7] sfc / dism%ESC%[0m
echo   - 動作: 【SFC -^> DISM -^> SFC】の徹底修復および各単体実行。
echo.
echo %ESC%[32m[8] ディスククリーンアップ%ESC%[0m
echo   - 動作: cleanmgr.exe を起動し、不要一時ファイルやUpdate残骸を削除。
echo.
echo %ESC%[32m[9] 復元ポイントの作成%ESC%[0m
echo   - 動作: タイムスタンプによる即時全自動作成、手動命名作成、GUI画面の起動。
echo.
echo %ESC%[32m[O] 電源・スリープ ＆ スクリーンセーバー設定%ESC%[0m
echo   - 目的: 長時間作業中のスリープ中断防止やクラシック電源プランの調整。
echo.
echo %ESC%[32m[W] 回復ドライブの作成%ESC%[0m
echo   - 動作: OS標準のUSB回復ドライブ作成ウィザードを開きます。
echo.
echo %ESC%[32m[X] PCスペック ＆ システム詳細レポート表示%ESC%[0m
echo   - 目的: 出荷前/保守時のスペック確認とテキスト保存、ディスク詳細調査への遷移。
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo  何かキーを押すとメニューに戻ります...
powershell -NoProfile -Command "[Console]::WindowTop = 0"
pause >nul
goto PAGE1

:: ========================================================
:: [Page 2-M] Page 2 機能マニュアル・解説
:: ========================================================
:PAGE2_MANUAL
cls
echo %ESC%[36m======================================================%ESC%[0m
echo %ESC%[33m       Page 2: 項目別 実務解説マニュアル%ESC%[0m
echo  %ESC%[90m※ 下へスクロールして閲覧できます / [任意のキー] でメニューへ戻る%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo.
echo %ESC%[32m[U] Win11 ISO アップグレード実行%ESC%[0m
echo   - 目的: 通常および要件回避(/product server)でのインプレースアップグレード。
echo.
echo %ESC%[32m[C] CPU-Z / [H] HWMonitor / [F] FurMark / [V] Victoria%ESC%[0m
echo   - 目的: 各種ポータブルツールによるハードウェア仕様特定・負荷テスト・セクタ走査。
echo.
echo %ESC%[32m[E] Erk / [K] Eek%ESC%[0m
echo   - 目的: 個別の実行ファイルを能動指定して直接起動。
echo.
echo %ESC%[32m[D] デバイスマネージャー%ESC%[0m
echo   - 動作: devmgmt.msc を起動し、不明なデバイスやドライバ状態を確認。
echo.
echo %ESC%[32m[S] 診断ツール配置状況 ＆ フォルダを開く%ESC%[0m
echo   - 動作: 各種ツールの配置状態確認と作業フォルダのオープン。
echo.
echo %ESC%[32m[1] ディスクエラー検査 (chkdsk)%ESC%[0m
echo   - 動作: 読み取り専用スキャンおよび本格修復(/f /r)。
echo.
echo %ESC%[32m[2] ディスクパーティション管理 (diskpart)%ESC%[0m
echo   - 動作: 対話型のdiskpartコマンドプロンプトを直接実行。
echo.
echo %ESC%[32m[3] Windows バージョン情報表示 (winver)%ESC%[0m
echo   - 動作: OSの公式バージョン情報ダイアログを呼び出します。
echo.
echo %ESC%[32m[4] DNSキャッシュクリア ＆ IP再取得 (ipconfig)%ESC%[0m
echo   - 動作: DNS消去、DHCP解放、再取得、動的再登録の一括処理。
echo.
echo %ESC%[32m[5] ネットワーク初期化 (Winsock / TCP/IP リセット)%ESC%[0m
echo   - 動作: WinsockおよびTCP/IPスタックの完全リセット。
echo.
echo %ESC%[32m[A] 本バッチを C:\AP (隠しフォルダ) へ配備・構築%ESC%[0m
echo   - 動作: C:\AP フォルダを隠し属性で作成し、バッチ本体と空フォルダ構造を生成。
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo  何かキーを押すとメニューに戻ります...
powershell -NoProfile -Command "[Console]::WindowTop = 0"
pause >nul
goto PAGE2

:: ========================================================
:: [共通] BitLocker ＆ デバイスの暗号化 (Pro / Home 両対応)
:: ========================================================
:RUN_BITLOCKER
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m暗号化状態の確認: manage-bde -status%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
manage-bde -status
echo.
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo  操作を選択してください:
echo   [1] 設定画面を開きます（OS自動判定）
echo   [2] 「デバイスの暗号化」を開く
echo   [3] ドライブの暗号化を解除 (manage-bde -off)
echo   [4] 復号/暗号化の進行状況をリアルタイム監視
echo   [0] メニューに戻る
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c 12340 /n /m "番号を入力してください [1-4 / 0]: "

if errorlevel 5 goto BACK_TO_CURRENT_MENU
if errorlevel 4 goto SELECT_MONITOR_DRIVE
if errorlevel 3 goto BITLOCKER_DECRYPT
if errorlevel 2 goto OPEN_DEVICE_ENCRYPTION
if errorlevel 1 goto BITLOCKER_GUI

:OPEN_DEVICE_ENCRYPTION
echo 「デバイスの暗号化」設定画面を開いています...
start ms-settings:deviceencryption
goto BACK_TO_CURRENT_MENU

:BITLOCKER_GUI
set "WIN_EDITION="
for /f "tokens=3" %%E in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID 2^>nul') do set "WIN_EDITION=%%E"

:: EditionID に「Core」が含まれるか判定 (Windows Home 判定)
if /i not "%WIN_EDITION:Core=%"=="%WIN_EDITION%" (
    echo Windows Home を検出しました。「デバイスの暗号化」設定を開きます...
    start ms-settings:deviceencryption
) else (
    echo Windows Pro/Enterprise を検出しました。「BitLockerの管理」を開きます...
    start control /name Microsoft.BitLockerDriveEncryption
)
goto BACK_TO_CURRENT_MENU

:BITLOCKER_DECRYPT
echo.
set /p TARGET_DRIVE="暗号化を解除するドライブ文字を入力 (例: C): "
if "%TARGET_DRIVE%"=="" goto BACK_TO_CURRENT_MENU
set "TARGET_DRIVE=%TARGET_DRIVE:~0,1%"
manage-bde -off %TARGET_DRIVE%:
echo.
echo 復号処理をバックグラウンドで開始しました。
choice /c yn /m "そのまま進行状況をリアルタイム監視しますか？"
if errorlevel 2 goto BACK_TO_CURRENT_MENU
goto MONITOR_LOOP

:SELECT_MONITOR_DRIVE
echo.
set /p TARGET_DRIVE="監視するドライブ文字を入力 (例: C): "
if "%TARGET_DRIVE%"=="" goto BACK_TO_CURRENT_MENU
set "TARGET_DRIVE=%TARGET_DRIVE:~0,1%"

:MONITOR_LOOP
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m暗号化 進行状況監視中: [%TARGET_DRIVE%:] ドライブ%ESC%[0m
echo  ※ [M] キーを押すとメニューに戻ります (3秒ごとに自動更新)
echo %ESC%[36m======================================================%ESC%[0m
manage-bde -status %TARGET_DRIVE%:
echo.
choice /c mc /n /t 3 /d c /m "監視中... [M]: メニューへ戻る"
if errorlevel 2 goto MONITOR_LOOP
goto BACK_TO_CURRENT_MENU

:: ========================================================
:: [Page 1-3] Erk / Eek 起動 (未配置時はDL案内)
:: ========================================================
:RUN_KIT
cls
echo %ESC%[36m======================================================%ESC%[0m
if defined TYPE_KIT (
    echo  %ESC%[33m%LABEL_KIT% 起動%ESC%[0m
    echo %ESC%[36m======================================================%ESC%[0m
    call :RECORD_ACTION MAINT MAINT_3 "%LABEL_KIT% 起動"
    echo 起動中: %EXE_KIT%
    start "" /d "%DIR_KIT%" "%DIR_KIT%\%EXE_KIT%"
    goto BACK_TO_CURRENT_MENU
)

echo  %ESC%[31m[!] Erk / Eek が見つかりませんでした。%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo 【配置方法】
echo 「tools」フォルダ内に「Erk」または「EEK」フォルダを作成し、
echo 「Start Scanner.exe」を配置してください。
echo.
echo   - Erk パス: %BASE_DIR%tools\Erk\Start Scanner.exe
echo   - Eek パス: %BASE_DIR%tools\EEK\Start Scanner.exe
echo.
echo ※ 両方存在する場合は Erk が優先されます。
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c yn0 /n /m "ダウンロードページを開きますか？ [Y:開く / N,0:戻る]: "

if errorlevel 3 goto BACK_TO_CURRENT_MENU
if errorlevel 2 goto BACK_TO_CURRENT_MENU
if errorlevel 1 (
    start "" "https://www.emsisoft.com/en/home/emergencykit/"
    goto BACK_TO_CURRENT_MENU
)

:: ========================================================
:: [Page 1-6] sfc / dism サブメニュー
:: ========================================================
:SYSTEM_REPAIR_MENU
cls
echo %ESC%[36m======================================================%ESC%[0m
echo        %ESC%[33msfc / dism システム整合性修復%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo  [1] 徹底修復 (SFC -^> DISM -^> SFC 連続実行・推奨)
echo  [2] SFC スキャン単体実行 (sfc /scannow)
echo  [3] DISM イメージ修復単体実行 (dism ... /restorehealth)
echo  [0] メニューに戻る
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c 1230 /n /m "番号を入力してください [1-3 / 0]: "

if errorlevel 4 goto BACK_TO_CURRENT_MENU
call :RECORD_ACTION MAINT MAINT_6 "sfc / dism修復実行"
if errorlevel 3 goto RUN_DISM_ONLY
if errorlevel 2 goto RUN_SFC_ONLY
if errorlevel 1 goto RUN_TRIPLE_REPAIR

:RUN_TRIPLE_REPAIR
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m[ステップ 1/3] SFC スキャン (初期診断)%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
sfc /scannow
echo.
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m[ステップ 2/3] DISM によるコンポーネントストア修復%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
dism /online /cleanup-image /restorehealth
echo.
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m[ステップ 3/3] SFC スキャン (再検証・整合性修復)%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
sfc /scannow
echo.
pause
goto BACK_TO_CURRENT_MENU

:RUN_SFC_ONLY
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m実行中: sfc /scannow%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
sfc /scannow
echo.
pause
goto BACK_TO_CURRENT_MENU

:RUN_DISM_ONLY
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m実行中: dism /online /cleanup-image /restorehealth%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
dism /online /cleanup-image /restorehealth
echo.
pause
goto BACK_TO_CURRENT_MENU

:: ========================================================
:: [Page 1-2] CrystalDiskInfo
:: ========================================================
:RUN_DISKINFO
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33mCrystalDiskInfo 起動%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
set "TOOL_DIR=%BASE_DIR%tools\CrystalDiskInfo"

if not defined EXE_CDI goto CDI_NOT_FOUND

call :RECORD_ACTION MAINT MAINT_2 "CrystalDiskInfo 起動"
echo 起動中: %EXE_CDI%
start "" /d "%TOOL_DIR%" "%TOOL_DIR%\%EXE_CDI%"
goto BACK_TO_CURRENT_MENU

:CDI_NOT_FOUND
echo %ESC%[31m[!] プログラムが見つかりませんでした。%ESC%[0m
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo 【配置方法】
echo 1. CrystalDiskInfo のポータブル (ZIP) 版をダウンロード
echo 2. フォルダ名をバージョン表記なしにして以下に配置
echo    パス: %BASE_DIR%tools\CrystalDiskInfo\DiskInfo64.exe
echo %ESC%[36m------------------------------------------------------%ESC%[0m
pause
goto BACK_TO_CURRENT_MENU

:: ========================================================
:: [Page 1-4] Windows Update 自己申告トグル
:: ========================================================
:RUN_WINUPDATE
cls
if "%APP_MODE%"=="MAINT" (
    echo %ESC%[36m======================================================%ESC%[0m
    echo  %ESC%[33mWindows Update の実行 ＆ 状態確認%ESC%[0m
    echo %ESC%[36m======================================================%ESC%[0m
) else (
    echo %ESC_ORG%======================================================%ESC%[0m
    echo  %ESC%[33mWindows Update の実行 ＆ 状態確認%ESC%[0m
    echo %ESC_ORG%======================================================%ESC%[0m
)
echo Windows Update 画面を開いています...
start ms-settings:windowsupdate
echo.
if "%APP_MODE%"=="MAINT" (echo %ESC%[36m------------------------------------------------------%ESC%[0m) else (echo %ESC_ORG%------------------------------------------------------%ESC%[0m)
echo  現在の更新ステータスを選択してください:
echo   [1] %ESC%[33m更新適用中 / 再起動待ち (ステータスを [更新中] にする)%ESC%[0m
echo   [2] %ESC%[32m最新の状態を確認した     (ステータスを [済] にする)%ESC%[0m
echo   [0] 状態を変更せずメニューへ戻る
if "%APP_MODE%"=="MAINT" (echo %ESC%[36m------------------------------------------------------%ESC%[0m) else (echo %ESC_ORG%------------------------------------------------------%ESC%[0m)
choice /c 120 /n /m "番号を選択してください [1-2 / 0]: "

if errorlevel 3 goto BACK_TO_CURRENT_MENU
if errorlevel 2 (
    if "%APP_MODE%"=="SETUP" (
        set "WU_SETUP_STATE=DONE"
        call :RECORD_ACTION SETUP SETUP_3 "Windows Update 最新確認完了"
    ) else (
        set "WU_MAINT_STATE=DONE"
        call :RECORD_ACTION MAINT MAINT_4 "Windows Update 最新確認完了"
    )
    goto BACK_TO_CURRENT_MENU
)
if errorlevel 1 (
    if "%APP_MODE%"=="SETUP" (
        set "WU_SETUP_STATE=PROGRESS"
        call :RECORD_ACTION SETUP SETUP_3_ING "Windows Update 更新中"
    ) else (
        set "WU_MAINT_STATE=PROGRESS"
        call :RECORD_ACTION MAINT MAINT_4_ING "Windows Update 更新中"
    )
    goto BACK_TO_CURRENT_MENU
)

:: ========================================================
:: [Page 1-9] 電源・スリープ ＆ スクリーンセーバー管理
:: ========================================================
:POWER_SLEEP_MENU
cls
echo %ESC%[36m======================================================%ESC%[0m
echo        %ESC%[33m電源・スリープ ＆ スクリーンセーバー設定%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m

if "%PWR_STATE%"=="CHANGING" goto PS_MSG_CHANGING
echo  %ESC%[32m【現在の状態】通常設定%ESC%[0m
echo  作業中のスリープ中断を防ぐため、必要に応じて変更してください。
goto PS_MSG_END

:PS_MSG_CHANGING
echo  %ESC%[33m【現在の状態】作業用設定に変更中 [スリープOFF等]%ESC%[0m
echo  作業完了後は、設定を元に戻して [0] で戻ってください。

:PS_MSG_END
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo  [1] 画面消灯・スリープまでの時間設定 (設定アプリ)
echo  [2] スクリーンセーバー設定 (復帰時ロック / 待ち時間)
echo  [3] クラシック電源プラン設定 (コントロールパネル)
echo  [0] メニューに戻る
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c 1230 /n /m "番号を入力してください [1-3 / 0]: "

if errorlevel 4 goto EXIT_POWER_SLEEP_MENU
if errorlevel 3 goto OPEN_POWER_CPL
if errorlevel 2 goto OPEN_SCREENSAVER
if errorlevel 1 goto OPEN_POWERSLEEP_SETTINGS

:OPEN_POWERSLEEP_SETTINGS
start ms-settings:powersleep
goto POWER_SLEEP_MENU

:OPEN_SCREENSAVER
start control desk.cpl,,@screensaver
goto POWER_SLEEP_MENU

:OPEN_POWER_CPL
start control powercfg.cpl
goto POWER_SLEEP_MENU

:EXIT_POWER_SLEEP_MENU
:: 状態のトグル判定 (未実行 -> CHANGING / CHANGING -> RESTORED)
if "%PWR_STATE%"=="CHANGING" (
    set "PWR_STATE=RESTORED"
    call :RECORD_ACTION MAINT MAINT_9 "電源/スリープ設定復元完了"
    goto BACK_TO_CURRENT_MENU
)
if not defined PWR_STATE (
    set "PWR_STATE=CHANGING"
    call :RECORD_ACTION MAINT MAINT_9_SET "電源/スリープ作業時変更"
    goto BACK_TO_CURRENT_MENU
)
goto BACK_TO_CURRENT_MENU

:: ========================================================
:: [Page 1-5] ソフトアップデート
:: ========================================================
:RUN_APP_UPDATES
cls
if "%APP_MODE%"=="SETUP" echo %ESC_ORG%======================================================%ESC%[0m
if "%APP_MODE%"=="MAINT" echo %ESC%[36m======================================================%ESC%[0m
echo          %ESC%[33mソフトアップデート%ESC%[0m
if "%APP_MODE%"=="SETUP" echo %ESC_ORG%======================================================%ESC%[0m
if "%APP_MODE%"=="MAINT" echo %ESC%[36m======================================================%ESC%[0m
echo  [1] すべて一括で開く (Store / Edge / Office / Chrome / Acrobat)
echo  [2] Microsoft Store (ダウンロードと更新)
echo  [3] Microsoft Edge (バージョン情報・更新)
echo  [4] Microsoft Office (更新プログラムの確認・適用)
echo  [5] Google Chrome (バージョン情報・更新)
echo  [6] Adobe Acrobat Reader (アップデータ)
if "%APP_MODE%"=="SETUP" (echo %ESC_ORG%------------------------------------------------------%ESC%[0m) else (echo %ESC%[36m------------------------------------------------------%ESC%[0m)
echo  [0] メニューに戻る (戻る際に状態を確認します)
if "%APP_MODE%"=="SETUP" (echo %ESC_ORG%======================================================%ESC%[0m) else (echo %ESC%[36m======================================================%ESC%[0m)
choice /c 1234560 /n /m "番号を入力してください [1-6 / 0]: "

if errorlevel 7 goto APP_UPDATES_CHECK_STATE
if errorlevel 6 goto UPDATE_ADOBE
if errorlevel 5 goto UPDATE_CHROME
if errorlevel 4 goto UPDATE_OFFICE
if errorlevel 3 goto UPDATE_EDGE
if errorlevel 2 goto UPDATE_STORE
if errorlevel 1 goto UPDATE_ALL

:UPDATE_OFFICE
echo Microsoft Office の更新プログラムを確認しています...

:: 64bit / 32bit の ClickToRun クライアントを探索
set "OFFICE_C2R="
if exist "%CommonProgramFiles%\microsoft shared\ClickToRun\OfficeC2RClient.exe" (
    set "OFFICE_C2R=%CommonProgramFiles%\microsoft shared\ClickToRun\OfficeC2RClient.exe"
) else if exist "%CommonProgramFiles(x86)%\microsoft shared\ClickToRun\OfficeC2RClient.exe" (
    set "OFFICE_C2R=%CommonProgramFiles(x86)%\microsoft shared\ClickToRun\OfficeC2RClient.exe"
)

if defined OFFICE_C2R (
    start "" "%OFFICE_C2R%" /update user displaylevel=true
    goto RUN_APP_UPDATES
)

echo.
echo %ESC%[31m[!] Office (Click-to-Run) が検出されませんでした。%ESC%[0m
pause
goto RUN_APP_UPDATES

:UPDATE_ALL
echo.
echo 各種アップデート画面を順次開いています...
start ms-windows-store://downloadsandupdates
start msedge "edge://settings/help"
start chrome "chrome://settings/help" 2>nul
call :LAUNCH_ADOBE_ARM
goto RUN_APP_UPDATES

:UPDATE_STORE
start ms-windows-store://downloadsandupdates
goto RUN_APP_UPDATES

:UPDATE_EDGE
start msedge "edge://settings/help"
goto RUN_APP_UPDATES

:UPDATE_CHROME
start chrome "chrome://settings/help"
if %errorlevel% equ 0 goto RUN_APP_UPDATES
echo Chrome が見つからないか、インストールされていません。
pause
goto RUN_APP_UPDATES

:UPDATE_ADOBE
call :LAUNCH_ADOBE_ARM
goto RUN_APP_UPDATES

:LAUNCH_ADOBE_ARM
set "ADOBE_ARM="
if exist "%ProgramFiles(x86)%\Common Files\Adobe\ARM\1.0\AdobeARM.exe" set "ADOBE_ARM=%ProgramFiles(x86)%\Common Files\Adobe\ARM\1.0\AdobeARM.exe"
if not defined ADOBE_ARM if exist "%ProgramFiles%\Common Files\Adobe\ARM\1.0\AdobeARM.exe" set "ADOBE_ARM=%ProgramFiles%\Common Files\Adobe\ARM\1.0\AdobeARM.exe"

if not defined ADOBE_ARM goto ADOBE_ARM_NOT_FOUND

echo Adobe Reader アップデータを起動しています...
start "" "%ADOBE_ARM%"
exit /b

:ADOBE_ARM_NOT_FOUND
echo Adobe ARM が見つからないため、Acrobat Reader を直接起動します...
start acrord32.exe 2>nul || start acrobat.exe 2>nul || goto ADOBE_ACROBAT_NOT_FOUND
exit /b

:ADOBE_ACROBAT_NOT_FOUND
echo Adobe Acrobat Reader の実行ファイルが見つかりませんでした。
pause
exit /b

:APP_UPDATES_CHECK_STATE
cls
if "%APP_MODE%"=="SETUP" (
    echo %ESC_ORG%======================================================%ESC%[0m
    echo  %ESC%[33mソフトアップデート 状態確認%ESC%[0m
    echo %ESC_ORG%======================================================%ESC%[0m
) else (
    echo %ESC%[36m======================================================%ESC%[0m
    echo  %ESC%[33mソフトアップデート 状態確認%ESC%[0m
    echo %ESC%[36m======================================================%ESC%[0m
)
echo  現在のソフト更新ステータスを選択してください:
echo   [1] %ESC%[33mストア・ブラウザ等 更新中 (ステータスを [更新中] にする)%ESC%[0m
echo   [2] %ESC%[32mすべての更新完了を確認した (ステータスを [済] にする)%ESC%[0m
echo   [0] 状態を変更せずメニューへ戻る
if "%APP_MODE%"=="SETUP" (echo %ESC_ORG%------------------------------------------------------%ESC%[0m) else (echo %ESC%[36m------------------------------------------------------%ESC%[0m)
choice /c 120 /n /m "番号を選択してください [1-2 / 0]: "

if errorlevel 3 goto BACK_TO_CURRENT_MENU
if errorlevel 2 (
    if "%APP_MODE%"=="SETUP" (
        set "SOFT_SETUP_STATE=DONE"
        call :RECORD_ACTION SETUP SETUP_4 "ソフト更新 最新確認完了"
    ) else (
        set "SOFT_MAINT_STATE=DONE"
        call :RECORD_ACTION MAINT MAINT_5 "ソフト更新 最新確認完了"
    )
    goto BACK_TO_CURRENT_MENU
)
if errorlevel 1 (
    if "%APP_MODE%"=="SETUP" (
        set "SOFT_SETUP_STATE=PROGRESS"
        call :RECORD_ACTION SETUP SETUP_4_ING "ソフト更新中"
    ) else (
        set "SOFT_MAINT_STATE=PROGRESS"
        call :RECORD_ACTION MAINT MAINT_5_ING "ソフト更新中"
    )
    goto BACK_TO_CURRENT_MENU
)

:: ========================================================
:: [Page 1-O] PC・パーツ・周辺機器別 サポート ＆ ツール
:: ========================================================
:OEM_TOOL_MENU
cls
if "%APP_MODE%"=="SETUP" (
    echo %ESC_ORG%======================================================%ESC%[0m
    echo     %ESC%[33mPC・パーツ・周辺機器別 サポート ＆ ツール%ESC%[0m
    echo %ESC_ORG%======================================================%ESC%[0m
) else (
    echo %ESC%[36m======================================================%ESC%[0m
    echo     %ESC%[33mPC・パーツ・周辺機器別 サポート ＆ ツール%ESC%[0m
    echo %ESC%[36m======================================================%ESC%[0m
)
echo  [A] このPCのメーカーを自動判別して アップデート 起動
echo  [R] このPCのメーカーを自動判別して リカバリ作成 起動
if "%APP_MODE%"=="SETUP" (echo %ESC_ORG%------------------------------------------------------%ESC%[0m) else (echo %ESC%[36m------------------------------------------------------%ESC%[0m)
echo  -- [主要PCメーカー] ---------------------------------
echo  [1] Panasonic (Let's note)   [6] Dynabook
echo  [2] NEC                      [7] MSI
echo  [3] Lenovo                   [8] LG
echo  [4] Dell                     [9] Acer
echo  [5] 富士通                   [H] HP
echo  -- [BTO ＆ 自作マザーボード] ------------------------
echo  [G] GIGABYTE                 [B] BIOSTAR
echo  [K] ASRock                   [Z] NZXT
echo  [M] マウスコンピューター     [S] ASUS
echo  -- [GPU ＆ 主要コンポーネント ドライバ] -------------
echo  [N] NVIDIA (GeForce)         [T] Realtek (LAN/Audio)
echo  [D] AMD (Radeon/Ryzen)       [O] Broadcom (通信/NIC)
echo  [I] Intel (Download Center)  [Y] Creative (Sound Blaster)
echo  -- [周辺機器・プリンター] ---------------------------
echo  [C] Canon (キヤノン)         [E] EPSON (エプソン)
if "%APP_MODE%"=="SETUP" (echo %ESC_ORG%------------------------------------------------------%ESC%[0m) else (echo %ESC%[36m------------------------------------------------------%ESC%[0m)
echo  [0] メニューに戻る (戻る際に状態を確認します)
if "%APP_MODE%"=="SETUP" (echo %ESC_ORG%======================================================%ESC%[0m) else (echo %ESC%[36m======================================================%ESC%[0m)
choice /c AR123456789HGKMBZSNDITOYCE0 /n /m "番号またはキーを入力してください: "

if errorlevel 27 goto OEM_TOOL_CHECK_STATE
if errorlevel 26 goto SELECT_EPSON
if errorlevel 25 goto SELECT_CANON
if errorlevel 24 goto SELECT_CREATIVE
if errorlevel 23 goto SELECT_BROADCOM
if errorlevel 22 goto SELECT_REALTEK
if errorlevel 21 goto SELECT_INTEL
if errorlevel 20 goto SELECT_AMD
if errorlevel 19 goto SELECT_NVIDIA
if errorlevel 18 goto SELECT_ASUS
if errorlevel 17 goto SELECT_NZXT
if errorlevel 16 goto SELECT_BIOSTAR
if errorlevel 15 goto SELECT_MOUSE
if errorlevel 14 goto SELECT_ASROCK
if errorlevel 13 goto SELECT_GIGABYTE
if errorlevel 12 goto SELECT_HP
if errorlevel 11 goto SELECT_ACER
if errorlevel 10 goto SELECT_LG
if errorlevel 9 goto SELECT_MSI
if errorlevel 8 goto SELECT_DYNABOOK
if errorlevel 7 goto SELECT_FUJITSU
if errorlevel 6 goto SELECT_DELL
if errorlevel 5 goto SELECT_LENOVO
if errorlevel 4 goto SELECT_NEC
if errorlevel 3 goto SELECT_PANASONIC
if errorlevel 2 goto AUTO_RECOVERY_DETECT
if errorlevel 1 goto AUTO_OEM_DETECT

:OEM_TOOL_CHECK_STATE
cls
if "%APP_MODE%"=="SETUP" (
    echo %ESC_ORG%======================================================%ESC%[0m
    echo  %ESC%[33mメーカーツール / リカバリ作成 状態確認%ESC%[0m
    echo %ESC_ORG%======================================================%ESC%[0m
) else (
    echo %ESC%[36m======================================================%ESC%[0m
    echo  %ESC%[33mメーカーツール / リカバリ作成 状態確認%ESC%[0m
    echo %ESC%[36m======================================================%ESC%[0m
)
echo  現在のメーカーステータスを選択してください:
echo   [1] %ESC%[33m専用ツールで更新中 / 処理待ち (ステータスを [更新中] にする)%ESC%[0m
echo   [2] %ESC%[32m更新またはUSB作成が完了した   (ステータスを [済] にする)%ESC%[0m
echo   [0] 状態を変更せずメニューへ戻る
if "%APP_MODE%"=="SETUP" (echo %ESC_ORG%------------------------------------------------------%ESC%[0m) else (echo %ESC%[36m------------------------------------------------------%ESC%[0m)
choice /c 120 /n /m "番号を選択してください [1-2 / 0]: "

if errorlevel 3 goto BACK_TO_CURRENT_MENU
if errorlevel 2 (
    if "%APP_MODE%"=="SETUP" (
        set "OEM_SETUP_STATE=DONE"
        call :RECORD_ACTION SETUP SETUP_5 "メーカーツール 処理完了"
    ) else (
        set "OEM_MAINT_STATE=DONE"
        call :RECORD_ACTION MAINT MAINT_O "メーカーツール 処理完了"
    )
    goto BACK_TO_CURRENT_MENU
)
if errorlevel 1 (
    if "%APP_MODE%"=="SETUP" (
        set "OEM_SETUP_STATE=PROGRESS"
        call :RECORD_ACTION SETUP SETUP_5_ING "メーカーツール 処理中"
    ) else (
        set "OEM_MAINT_STATE=PROGRESS"
        call :RECORD_ACTION MAINT MAINT_O_ING "メーカーツール 処理中"
    )
    goto BACK_TO_CURRENT_MENU
)

:: --- [主要PCメーカー] ---
:SELECT_PANASONIC
set "IS_WEBONLY=" & set "TARGET_OEM=PANASONIC" & set "OEM_NAME=Panasonic (Let's note)"
set "URL_SUPPORT=https://faq.askpc.panasonic.co.jp/"
goto SUBMENU_OEM_COMMON

:SELECT_NEC
set "IS_WEBONLY=" & set "TARGET_OEM=NEC" & set "OEM_NAME=NEC (LAVIE)"
set "URL_SUPPORT=https://support.nec-lavie.jp/"
goto SUBMENU_OEM_COMMON

:SELECT_LENOVO
set "IS_WEBONLY=" & set "TARGET_OEM=LENOVO" & set "OEM_NAME=Lenovo"
set "URL_SUPPORT=https://support.lenovo.com/jp/ja/"
goto SUBMENU_OEM_COMMON

:SELECT_DELL
set "IS_WEBONLY=" & set "TARGET_OEM=DELL" & set "OEM_NAME=Dell"
set "URL_SUPPORT=https://www.dell.com/support/home/ja-jp"
goto SUBMENU_OEM_COMMON

:SELECT_FUJITSU
set "IS_WEBONLY=" & set "TARGET_OEM=FUJITSU" & set "OEM_NAME=富士通 (FMV)"
set "URL_SUPPORT=https://azby.fmworld.net/support/"
goto SUBMENU_OEM_COMMON

:SELECT_DYNABOOK
set "IS_WEBONLY=" & set "TARGET_OEM=DYNABOOK" & set "OEM_NAME=Dynabook"
set "URL_SUPPORT=https://dynabook.com/assistpc/"
goto SUBMENU_OEM_COMMON

:SELECT_MSI
set "IS_WEBONLY=" & set "TARGET_OEM=MSI" & set "OEM_NAME=MSI"
set "URL_SUPPORT=https://jp.msi.com/support"
goto SUBMENU_OEM_COMMON

:SELECT_LG
set "IS_WEBONLY=" & set "TARGET_OEM=LG" & set "OEM_NAME=LG"
set "URL_SUPPORT=https://www.lg.com/jp/support/"
goto SUBMENU_OEM_COMMON

:SELECT_ACER
set "IS_WEBONLY=" & set "TARGET_OEM=ACER" & set "OEM_NAME=Acer"
set "URL_SUPPORT=https://www.acer.com/jp-ja/support"
goto SUBMENU_OEM_COMMON

:SELECT_ASUS
set "IS_WEBONLY=" & set "TARGET_OEM=ASUS" & set "OEM_NAME=ASUS"
set "URL_SUPPORT=https://www.asus.com/jp/support/"
goto SUBMENU_OEM_COMMON

:SELECT_HP
set "IS_WEBONLY=" & set "TARGET_OEM=HP" & set "OEM_NAME=HP"
set "URL_SUPPORT=https://support.hp.com/jp-ja"
goto SUBMENU_OEM_COMMON

:: --- [BTO ＆ 自作マザーボード] ---
:SELECT_GIGABYTE
set "IS_WEBONLY=1" & set "TARGET_OEM=GIGABYTE" & set "OEM_NAME=GIGABYTE"
set "URL_SUPPORT=https://www.gigabyte.com/jp/Support"
goto SUBMENU_OEM_COMMON

:SELECT_ASROCK
set "IS_WEBONLY=1" & set "TARGET_OEM=ASROCK" & set "OEM_NAME=ASRock"
set "URL_SUPPORT=https://www.asrock.com/support/index.asp"
goto SUBMENU_OEM_COMMON

:SELECT_MOUSE
set "IS_WEBONLY=1" & set "TARGET_OEM=MOUSE" & set "OEM_NAME=マウスコンピューター (Mouse)"
set "URL_SUPPORT=https://www.mouse-jp.co.jp/support/"
goto SUBMENU_OEM_COMMON

:SELECT_BIOSTAR
set "IS_WEBONLY=1" & set "TARGET_OEM=BIOSTAR" & set "OEM_NAME=BIOSTAR"
set "URL_SUPPORT=https://www.biostar.com.tw/app/en/support/download.php"
goto SUBMENU_OEM_COMMON

:SELECT_NZXT
set "OEM_NAME=NZXT"
set "URL_SUPPORT=https://support.nzxt.com/hc/ja"
set "URL_CAM=https://nzxt.com/ja-intl/pages/cam?srsltid=AYCX9vLmYVMKhb2kvi39gUfM0c2vzoBq6DhOo3q5-FSXNYAdn_NslNMO^&bt=0"

:SUBMENU_NZXT
cls
echo %ESC%[36m======================================================%ESC%[0m
echo        %ESC%[33m%OEM_NAME% サポート ＆ ツール選択%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo  [1] 公式サポートサイトを開く (Webブラウザ)
echo  [2] NZXT CAM ダウンロードページを開く (Webブラウザ)
echo  [0] 戻る
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c 120 /n /m "番号を入力してください [1-2 / 0]: "
if errorlevel 3 goto OEM_TOOL_MENU
if errorlevel 2 (
    start "" "%URL_CAM%"
    goto SUBMENU_NZXT
)
if errorlevel 1 (
    start "" "%URL_SUPPORT%"
    goto SUBMENU_NZXT
)

:: --- [GPU ＆ 主要コンポーネント ドライバ] ---
:SELECT_NVIDIA
set "IS_WEBONLY=1" & set "TARGET_OEM=NVIDIA" & set "OEM_NAME=NVIDIA (GeForce ドライバ)"
set "URL_SUPPORT=https://www.nvidia.co.jp/Download/index.aspx?lang=jp"
goto SUBMENU_OEM_COMMON

:SELECT_AMD
set "IS_WEBONLY=1" & set "TARGET_OEM=AMD" & set "OEM_NAME=AMD (Radeon / Ryzen ドライバ)"
set "URL_SUPPORT=https://www.amd.com/ja/support"
goto SUBMENU_OEM_COMMON

:SELECT_INTEL
set "IS_WEBONLY=1" & set "TARGET_OEM=INTEL" & set "OEM_NAME=Intel (ダウンロード・センター)"
set "URL_SUPPORT=https://www.intel.co.jp/content/www/jp/ja/download-center/home.html"
goto SUBMENU_OEM_COMMON

:SELECT_REALTEK
set "IS_WEBONLY=1" & set "TARGET_OEM=REALTEK" & set "OEM_NAME=Realtek (LAN / Audio ドライバ)"
set "URL_SUPPORT=https://www.realtek.com/ja/downloads"
goto SUBMENU_OEM_COMMON

:SELECT_BROADCOM
set "IS_WEBONLY=1" & set "TARGET_OEM=BROADCOM" & set "OEM_NAME=Broadcom (通信・NIC ドライバ)"
set "URL_SUPPORT=https://www.broadcom.com/support/download-search"
goto SUBMENU_OEM_COMMON

:SELECT_CREATIVE
set "IS_WEBONLY=1" & set "TARGET_OEM=CREATIVE" & set "OEM_NAME=Creative (Sound Blaster / オーディオ)"
set "URL_SUPPORT=https://jp.creative.com/support/downloads/"
goto SUBMENU_OEM_COMMON

:: --- [周辺機器・プリンター] ---
:SELECT_CANON
set "IS_WEBONLY=1" & set "TARGET_OEM=CANON" & set "OEM_NAME=Canon (キヤノン)"
set "URL_SUPPORT=https://canon.jp/support"
goto SUBMENU_OEM_COMMON

:SELECT_EPSON
set "IS_WEBONLY=1" & set "TARGET_OEM=EPSON" & set "OEM_NAME=EPSON (エプソン)"
set "URL_SUPPORT=https://www.epson.jp/support/"
goto SUBMENU_OEM_COMMON

:: --- [サブメニュー制御部] ---
:SUBMENU_OEM_COMMON
cls
echo %ESC%[36m======================================================%ESC%[0m
echo        %ESC%[33m%OEM_NAME% サポート ＆ ツール選択%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
if defined IS_WEBONLY goto SUBMENU_WEBONLY_COMMON

echo  [1] アップデートツール起動 (PC内アプリ)
echo  [2] リカバリメディア作成ツール起動 (PC内アプリ)
echo  [3] 公式サポートサイトを開く (Webブラウザ)
echo  [0] 戻る
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c 1230 /n /m "番号を入力してください [1-3 / 0]: "
if errorlevel 4 goto OEM_TOOL_MENU
if errorlevel 3 goto OPEN_SUPPORT_URL
if errorlevel 2 goto RECOVERY_%TARGET_OEM%
if errorlevel 1 goto LAUNCH_%TARGET_OEM%

:SUBMENU_WEBONLY_COMMON
echo  [1] 公式サポート / ドライバ配布サイトを開く (Webブラウザ)
echo  [0] 戻る
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c 10 /n /m "番号を入力してください [1 / 0]: "
if errorlevel 2 goto OEM_TOOL_MENU
if errorlevel 1 goto OPEN_SUPPORT_URL

:OPEN_SUPPORT_URL
start "" "%URL_SUPPORT%"
goto SUBMENU_OEM_COMMON

:AUTO_OEM_DETECT
echo.
echo PCの製造元を判別中...
call :GET_OEM_VENDOR
echo 検出された製造元: %DETECTED_OEM%
echo.
echo %DETECTED_OEM% | find /i "Panasonic" >nul && goto LAUNCH_PANASONIC
echo %DETECTED_OEM% | find /i "Matsushita" >nul && goto LAUNCH_PANASONIC
echo %DETECTED_OEM% | find /i "NEC" >nul && goto LAUNCH_NEC
echo %DETECTED_OEM% | find /i "Lenovo" >nul && goto LAUNCH_LENOVO
echo %DETECTED_OEM% | find /i "Dell" >nul && goto LAUNCH_DELL
echo %DETECTED_OEM% | find /i "FUJITSU" >nul && goto LAUNCH_FUJITSU
echo %DETECTED_OEM% | find /i "TOSHIBA" >nul && goto LAUNCH_DYNABOOK
echo %DETECTED_OEM% | find /i "Dynabook" >nul && goto LAUNCH_DYNABOOK
echo %DETECTED_OEM% | find /i "Micro-Star" >nul && goto LAUNCH_MSI
echo %DETECTED_OEM% | find /i "MSI" >nul && goto LAUNCH_MSI
echo %DETECTED_OEM% | find /i "LG" >nul && goto LAUNCH_LG
echo %DETECTED_OEM% | find /i "Acer" >nul && goto LAUNCH_ACER
echo %DETECTED_OEM% | find /i "ASUS" >nul && goto LAUNCH_ASUS
echo %DETECTED_OEM% | find /i "ASUSTeK" >nul && goto LAUNCH_ASUS
echo %DETECTED_OEM% | find /i "HP" >nul && goto LAUNCH_HP
echo %DETECTED_OEM% | find /i "Hewlett-Packard" >nul && goto LAUNCH_HP
echo %ESC%[31m該当する既知のメーカーツールが見つかりませんでした。%ESC%[0m
pause
goto OEM_TOOL_MENU

:AUTO_RECOVERY_DETECT
echo.
echo PCの製造元を判別中...
call :GET_OEM_VENDOR
echo 検出された製造元: %DETECTED_OEM%
echo.
echo %DETECTED_OEM% | find /i "Panasonic" >nul && goto RECOVERY_PANASONIC
echo %DETECTED_OEM% | find /i "Matsushita" >nul && goto RECOVERY_PANASONIC
echo %DETECTED_OEM% | find /i "NEC" >nul && goto RECOVERY_NEC
echo %DETECTED_OEM% | find /i "Lenovo" >nul && goto RECOVERY_LENOVO
echo %DETECTED_OEM% | find /i "Dell" >nul && goto RECOVERY_DELL
echo %DETECTED_OEM% | find /i "FUJITSU" >nul && goto RECOVERY_FUJITSU
echo %DETECTED_OEM% | find /i "TOSHIBA" >nul && goto RECOVERY_DYNABOOK
echo %DETECTED_OEM% | find /i "Dynabook" >nul && goto RECOVERY_DYNABOOK
echo %DETECTED_OEM% | find /i "Micro-Star" >nul && goto RECOVERY_MSI
echo %DETECTED_OEM% | find /i "MSI" >nul && goto RECOVERY_MSI
echo %DETECTED_OEM% | find /i "LG" >nul && goto RECOVERY_LG
echo %DETECTED_OEM% | find /i "Acer" >nul && goto RECOVERY_ACER
echo %DETECTED_OEM% | find /i "ASUS" >nul && goto RECOVERY_ASUS
echo %DETECTED_OEM% | find /i "ASUSTeK" >nul && goto RECOVERY_ASUS
echo %DETECTED_OEM% | find /i "HP" >nul && goto RECOVERY_HP
echo %DETECTED_OEM% | find /i "Hewlett-Packard" >nul && goto RECOVERY_HP
echo %ESC%[31m該当するメーカー固有ツールがないため、Windows標準の回復ドライブ作成へ移行します。%ESC%[0m
goto RUN_RECOVERYDRIVE

:GET_OEM_VENDOR
set "DETECTED_OEM="
for /f "tokens=2,*" %%I in ('reg query "HKLM\HARDWARE\Description\System\BIOS" /v "SystemManufacturer" 2^>nul ^| find /i "SystemManufacturer"') do set "DETECTED_OEM=%%J"
if not defined DETECTED_OEM (
    for /f "usebackq tokens=*" %%I in (`powershell -NoProfile -Command "(Get-CimInstance Win32_ComputerSystem).Manufacturer" 2^>nul`) do set "DETECTED_OEM=%%I"
)
exit /b

:LAUNCH_PANASONIC
echo Panasonic PC ツールを起動中...
start "" "panasonicpcsetting:" 2>nul && goto BACK_TO_CURRENT_MENU
if exist "%ProgramFiles(x86)%\Panasonic\PCInfo\PCInfo.exe" (
    start "" "%ProgramFiles(x86)%\Panasonic\PCInfo\PCInfo.exe" & goto BACK_TO_CURRENT_MENU
)
if exist "%ProgramFiles(x86)%\Panasonic\PUpdt\PUpdt.exe" (
    start "" "%ProgramFiles(x86)%\Panasonic\PUpdt\PUpdt.exe" & goto BACK_TO_CURRENT_MENU
)
echo Panasonic PC設定ユーティリティ / アップデート が見つかりませんでした。
pause
goto OEM_TOOL_MENU

:LAUNCH_NEC
echo NEC製アップデートツールを起動中...
if exist "%ProgramFiles%\NEC\LAVIE Wiz\LAVIEWiz.exe" (
    start "" "%ProgramFiles%\NEC\LAVIE Wiz\LAVIEWiz.exe" & goto BACK_TO_CURRENT_MENU
)
if exist "%ProgramFiles(x86)%\NEC\LAVIE Wiz\LAVIEWiz.exe" (
    start "" "%ProgramFiles(x86)%\NEC\LAVIE Wiz\LAVIEWiz.exe" & goto BACK_TO_CURRENT_MENU
)
start "" "laviewiz:" 2>nul || (
    echo LAVIE Wiz / アップデート が見つかりませんでした。
    pause
)
goto OEM_TOOL_MENU

:LAUNCH_LENOVO
echo Lenovo アップデートツールを起動中...
start "" "lenovo-vantage:" 2>nul && goto BACK_TO_CURRENT_MENU
if exist "%ProgramFiles(x86)%\Lenovo\System Update\tvsu.exe" (
    start "" "%ProgramFiles(x86)%\Lenovo\System Update\tvsu.exe" & goto BACK_TO_CURRENT_MENU
)
echo Lenovo Vantage または System Update が見つかりませんでした。
pause
goto OEM_TOOL_MENU

:LAUNCH_DELL
echo Dell アップデートツールを起動中...
start "" "supportassist:" 2>nul && goto BACK_TO_CURRENT_MENU
if exist "%ProgramFiles%\Dell\CommandUpdate\DellCommandUpdate.exe" (
    start "" "%ProgramFiles%\Dell\CommandUpdate\DellCommandUpdate.exe" & goto BACK_TO_CURRENT_MENU
)
echo Dell Command Update または SupportAssist が見つかりませんでした。
pause
goto OEM_TOOL_MENU

:LAUNCH_FUJITSU
echo 富士通 アップデートナビを起動中...
if exist "%ProgramFiles(x86)%\Fujitsu\UpdateNavi\UpdateNavi.exe" (
    start "" "%ProgramFiles(x86)%\Fujitsu\UpdateNavi\UpdateNavi.exe" & goto BACK_TO_CURRENT_MENU
)
echo 富士通 アップデートナビ が見つかりませんでした。
pause
goto OEM_TOOL_MENU

:LAUNCH_DYNABOOK
echo Dynabook サービスステーションを起動中...
start "" "dynabookservicestation:" 2>nul && goto BACK_TO_CURRENT_MENU
if exist "%ProgramFiles%\Dynabook\Dynabook Service Station\DynabookServiceStation.exe" (
    start "" "%ProgramFiles%\Dynabook\Dynabook Service Station\DynabookServiceStation.exe" & goto BACK_TO_CURRENT_MENU
)
if exist "%ProgramFiles(x86)%\TOSHIBA\TOSHIBA Service Station\TOSHIBA.ServiceStation.exe" (
    start "" "%ProgramFiles(x86)%\TOSHIBA\TOSHIBA Service Station\TOSHIBA.ServiceStation.exe" & goto BACK_TO_CURRENT_MENU
)
echo Dynabook / TOSHIBA Service Station が見つかりませんでした。
pause
goto OEM_TOOL_MENU

:LAUNCH_MSI
echo MSI Center を起動中...
start "" "msicenter:" 2>nul && goto BACK_TO_CURRENT_MENU
if exist "%ProgramFiles%\MSI\MSI Center\MSI Center.exe" (
    start "" "%ProgramFiles%\MSI\MSI Center\MSI Center.exe" & goto BACK_TO_CURRENT_MENU
)
echo MSI Center または Dragon Center が見つかりませんでした。
pause
goto OEM_TOOL_MENU

:LAUNCH_LG
echo LG Update Center を起動中...
start "" "lgupdate:" 2>nul && goto BACK_TO_CURRENT_MENU
if exist "%ProgramFiles(x86)%\LG Software\LG Update Center\LGUpdateCenter.exe" (
    start "" "%ProgramFiles(x86)%\LG Software\LG Update Center\LGUpdateCenter.exe" & goto BACK_TO_CURRENT_MENU
)
echo LG Update Center が見つかりませんでした。
pause
goto OEM_TOOL_MENU

:LAUNCH_ACER
echo Acer Care Center を起動中...
start "" "carecenter:" 2>nul && goto BACK_TO_CURRENT_MENU
if exist "%ProgramFiles(x86)%\Acer\Acer Care Center\CareCenter.exe" (
    start "" "%ProgramFiles(x86)%\Acer\Acer Care Center\CareCenter.exe" & goto BACK_TO_CURRENT_MENU
)
echo Acer Care Center が見つかりませんでした。
pause
goto OEM_TOOL_MENU

:LAUNCH_ASUS
echo ASUS アップデートツールを起動中...
start "" "asus-myasus:" 2>nul && goto BACK_TO_CURRENT_MENU
start "" "armoury-crate:" 2>nul && goto BACK_TO_CURRENT_MENU
echo MyASUS または Armoury Crate が見つかりませんでした。
pause
goto OEM_TOOL_MENU

:LAUNCH_HP
echo HP Support Assistant を起動中...
start "" "hpsupportassistant:" 2>nul && goto BACK_TO_CURRENT_MENU
if exist "%ProgramFiles(x86)%\Hewlett-Packard\HP Support Framework\HPSA.exe" (
    start "" "%ProgramFiles(x86)%\Hewlett-Packard\HP Support Framework\HPSA.exe" & goto BACK_TO_CURRENT_MENU
)
echo HP Support Assistant が見つかりませんでした。
pause
goto OEM_TOOL_MENU

::リカバリーメディア作成ルーチン
:RECOVERY_PANASONIC
echo Panasonic リカバリーディスク作成ユーティリティを検索中...
if exist "%ProgramFiles(x86)%\Panasonic\RecoveryDiskCreation\RDCU.exe" (
    start "" "%ProgramFiles(x86)%\Panasonic\RecoveryDiskCreation\RDCU.exe" & goto OEM_TOOL_MENU
)
if exist "%ProgramFiles(x86)%\Panasonic\RecoveryMediaCreator\RDCU.exe" (
    start "" "%ProgramFiles(x86)%\Panasonic\RecoveryMediaCreator\RDCU.exe" & goto OEM_TOOL_MENU
)
goto FALLBACK_RECOVERY

:RECOVERY_NEC
echo NEC 再セットアップメディア作成ツールを検索中...
if exist "%ProgramFiles%\NEC\RecoveryMediaCreator\RecovMediaCreator.exe" (
    start "" "%ProgramFiles%\NEC\RecoveryMediaCreator\RecovMediaCreator.exe" & goto OEM_TOOL_MENU
)
if exist "%ProgramFiles(x86)%\NEC\RecoveryMediaCreator\RecovMediaCreator.exe" (
    start "" "%ProgramFiles(x86)%\NEC\RecoveryMediaCreator\RecovMediaCreator.exe" & goto OEM_TOOL_MENU
)
goto FALLBACK_RECOVERY

:RECOVERY_LENOVO
echo Lenovo リカバリメディア作成ツールを検索中...
if exist "%ProgramFiles(x86)%\Lenovo\Lenovo USB Recovery Creator\USBRecoveryCreator.exe" (
    start "" "%ProgramFiles(x86)%\Lenovo\Lenovo USB Recovery Creator\USBRecoveryCreator.exe" & goto OEM_TOOL_MENU
)
goto FALLBACK_RECOVERY

:RECOVERY_DELL
echo Dell OS Recovery Tool を検索中...
if exist "%ProgramFiles(x86)%\Dell\OSRecoveryTool\DellOSRecoveryTool.exe" (
    start "" "%ProgramFiles(x86)%\Dell\OSRecoveryTool\DellOSRecoveryTool.exe" & goto OEM_TOOL_MENU
)
goto FALLBACK_RECOVERY

:RECOVERY_FUJITSU
echo 富士通 バックアップナビを検索中...
if exist "%ProgramFiles(x86)%\Fujitsu\BackupNavi\BackupNavi.exe" (
    start "" "%ProgramFiles(x86)%\Fujitsu\BackupNavi\BackupNavi.exe" & goto OEM_TOOL_MENU
)
goto FALLBACK_RECOVERY

:RECOVERY_DYNABOOK
echo Dynabook リカバリーメディアクリエーターを検索中...
if exist "%ProgramFiles%\Dynabook\RecoveryMediaCreator\TOSRecv.exe" (
    start "" "%ProgramFiles%\Dynabook\RecoveryMediaCreator\TOSRecv.exe" & goto OEM_TOOL_MENU
)
goto FALLBACK_RECOVERY

:RECOVERY_MSI
echo MSI Center (リカバリ機能) を確認中...
start "" "msicenter:" 2>nul && goto OEM_TOOL_MENU
goto FALLBACK_RECOVERY

:RECOVERY_LG
echo LG Update ^& Recovery を確認中...
if exist "%ProgramFiles(x86)%\LG Software\LG Update & Recovery\LGUpdate.exe" (
    start "" "%ProgramFiles(x86)%\LG Software\LG Update & Recovery\LGUpdate.exe" & goto OEM_TOOL_MENU
)
goto FALLBACK_RECOVERY

:RECOVERY_ACER
echo Acer Care Center (リカバリ管理) を確認中...
start "" "carecenter:" 2>nul && goto OEM_TOOL_MENU
goto FALLBACK_RECOVERY

:RECOVERY_ASUS
echo ASUS リカバリツールを確認中...
if exist "%ProgramFiles(x86)%\ASUS\ASUS Backtracker\Backtracker.exe" (
    start "" "%ProgramFiles(x86)%\ASUS\ASUS Backtracker\Backtracker.exe" & goto OEM_TOOL_MENU
)
goto FALLBACK_RECOVERY

:RECOVERY_HP
echo HP リカバリツールを検索中...
if exist "%ProgramFiles(x86)%\Hewlett-Packard\HP Recovery Manager\RecoveryManager.exe" (
    start "" "%ProgramFiles(x86)%\Hewlett-Packard\HP Recovery Manager\RecoveryManager.exe" & goto OEM_TOOL_MENU
)
if exist "%ProgramFiles(x86)%\HP\HP Cloud Recovery Tool\CloudRecovery.exe" (
    start "" "%ProgramFiles(x86)%\HP\HP Cloud Recovery Tool\CloudRecovery.exe" & goto OEM_TOOL_MENU
)
goto FALLBACK_RECOVERY

:FALLBACK_RECOVERY
echo メーカー専用のリカバリメディア作成ツールは検出されませんでした。
echo.
choice /c yn /m "Windows 標準の「回復ドライブの作成」を起動しますか？ (Y/N): "
if errorlevel 2 goto OEM_TOOL_MENU
goto RUN_RECOVERYDRIVE

:: ========================================================
:: [Page 1-7] ディスククリーンアップ
:: ========================================================
:RUN_CLEANMGR
cls
call :RECORD_ACTION MAINT MAINT_7 "ディスククリーンアップ起動"
echo ディスク クリーンアップを起動しています...
start cleanmgr.exe
timeout /t 1 > nul
goto BACK_TO_CURRENT_MENU

:: ========================================================
:: [Page 1-8] 復元ポイントの作成 サブメニュー
:: ========================================================
:RESTORE_POINT_MENU
cls
echo %ESC%[36m======================================================%ESC%[0m
echo        %ESC%[33m復元ポイントの作成 ＆ 管理%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo  [1] 即時作成 (日時スタンプで全自動作成)
echo  [2] 名前を指定して作成
echo  [3] GUIの「システムの保護」画面を開く
echo  [0] メニューに戻る
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c 1230 /n /m "番号を入力してください [1-3 / 0]: "

if errorlevel 4 goto BACK_TO_CURRENT_MENU
if errorlevel 3 goto RESTORE_POINT_GUI
if errorlevel 2 goto RESTORE_POINT_CUSTOM
if errorlevel 1 goto RESTORE_POINT_AUTO

:RESTORE_POINT_AUTO
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m復元ポイントを即時作成しています...%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "try { " ^
    "  Set-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore' -Name 'SystemRestorePointCreationFrequency' -Value 0 -Type DWord -Force -ErrorAction SilentlyContinue; " ^
    "  Enable-ComputerRestore -Drive 'C:\' -ErrorAction SilentlyContinue; " ^
    "  $name = 'Maintenance_' + (Get-Date -Format 'yyyyMMdd_HHmmss'); " ^
    "  Write-Host '作成名:' $name; " ^
    "  Checkpoint-Computer -Description $name -RestorePointType 'MODIFY_SETTINGS' -ErrorAction Stop; " ^
    "  Write-Host '復元ポイントが正常に作成されました。' -ForegroundColor Green; " ^
    "} catch { " ^
    "  Write-Host '復元ポイントの作成に失敗しました:' -ForegroundColor Red; " ^
    "  Write-Host $_.Exception.Message -ForegroundColor Yellow; " ^
    "}"
call :RECORD_ACTION MAINT MAINT_8 "復元ポイント自動作成"
echo.
pause
goto BACK_TO_CURRENT_MENU

:RESTORE_POINT_CUSTOM
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m復元ポイントを手動命名して作成%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
set /p RP_NAME="復元ポイントの説明・名前を入力 (未入力で中止): "
if "%RP_NAME%"=="" goto RESTORE_POINT_MENU
echo.
echo 復元ポイント '%RP_NAME%' を作成しています...
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "try { " ^
    "  Set-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore' -Name 'SystemRestorePointCreationFrequency' -Value 0 -Type DWord -Force -ErrorAction SilentlyContinue; " ^
    "  Enable-ComputerRestore -Drive 'C:\' -ErrorAction SilentlyContinue; " ^
    "  Checkpoint-Computer -Description '%RP_NAME%' -RestorePointType 'MODIFY_SETTINGS' -ErrorAction Stop; " ^
    "  Write-Host '復元ポイントが正常に作成されました。' -ForegroundColor Green; " ^
    "} catch { " ^
    "  Write-Host '復元ポイントの作成に失敗しました:' -ForegroundColor Red; " ^
    "  Write-Host $_.Exception.Message -ForegroundColor Yellow; " ^
    "}"
call :RECORD_ACTION MAINT MAINT_8 "復元ポイント手動作成 (%RP_NAME%)"
echo.
pause
goto BACK_TO_CURRENT_MENU

:RESTORE_POINT_GUI
cls
call :RECORD_ACTION MAINT MAINT_8 "システムの保護GUI起動"
echo システムのプロパティ (システムの保護) を開いています...
start SystemPropertiesProtection.exe
goto BACK_TO_CURRENT_MENU

:: ========================================================
:: [Page 2-U] Windows 11 ISO アップグレード実行
:: ========================================================
:RUN_WIN11_UPGRADE
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33mWindows 11 ISO アップグレード%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
if not exist "%BASE_DIR%Win11.iso" goto ISO_NOT_FOUND

echo 対象 ISO: %BASE_DIR%Win11.iso
echo.
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo  実行モードを選択してください:
echo   [1] 通常アップグレード (要件チェックあり)
echo   [2] 要件回避アップグレード (TPM 2.0 / CPU チェックをスキップ)
echo   [3] ISO を手動アンマウント (仮想ドライブ解除)
echo   [0] キャンセル (メニューに戻る)
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c 1230 /n /m "番号を入力してください [1-3 / 0]: "
if errorlevel 4 goto PAGE2
if errorlevel 3 goto UPGRADE_DISMOUNT
if errorlevel 2 goto UPGRADE_BYPASS
if errorlevel 1 goto UPGRADE_NORMAL

:UPGRADE_DISMOUNT
echo.
echo ISO をアンマウントしています...
powershell -NoProfile -Command "$null = Dismount-DiskImage -ImagePath '%BASE_DIR%Win11.iso' -ErrorAction SilentlyContinue"
set "GLOBAL_MOUNTED_ISO="
echo %ESC%[32m[OK] アンマウントが完了しました。仮想ドライブを解放しました。%ESC%[0m
echo.
pause
goto PAGE2

:UPGRADE_BYPASS
set "SETUP_ARGS=/product server"
echo.
echo %ESC%[33m※ 要件回避モード (/product server) で起動します。%ESC%[0m
echo %ESC%[33m※ インストール画面の表記が「Windows Server」になる場合がありますが、%ESC%[0m
echo %ESC%[33m   実際には Windows 11 がインストールされます。%ESC%[0m
goto UPGRADE_MOUNT

:UPGRADE_NORMAL
set "SETUP_ARGS="
echo.
echo ※ 通常モードで起動します。
goto UPGRADE_MOUNT

:UPGRADE_MOUNT
echo ISO の状態を確認・マウント中...
set "ISO_DRIVE="
set "ISO_STATUS="

for /f "usebackq tokens=1,2 delims=|" %%A in (`powershell -NoProfile -Command ^
    "$iso = '%BASE_DIR%Win11.iso';" ^
    "$img = Get-DiskImage -ImagePath $iso -ErrorAction SilentlyContinue;" ^
    "if ($img -and $img.Attached) {" ^
    "    $drv = ($img | Get-Volume | Where-Object { $_.DriveLetter } | Select-Object -First 1).DriveLetter;" ^
    "    Write-Output ('EXIST|' + $drv);" ^
    "} else {" ^
    "    $m = Mount-DiskImage -ImagePath $iso -PassThru -ErrorAction SilentlyContinue;" ^
    "    $drv = ($m | Get-Volume | Where-Object { $_.DriveLetter } | Select-Object -First 1).DriveLetter;" ^
    "    Write-Output ('NEW|' + $drv);" ^
    "}"`) do (
    set "ISO_STATUS=%%A"
    set "ISO_DRIVE=%%B"
)
set "GLOBAL_MOUNTED_ISO=%BASE_DIR%Win11.iso"

if not defined ISO_DRIVE goto ISO_MOUNT_FAIL

if "%ISO_STATUS%"=="EXIST" echo %ESC%[32m[OK] 既にマウントされているドライブ [%ISO_DRIVE%:] を検出しました。そのまま使用します。%ESC%[0m
if "%ISO_STATUS%"=="NEW"   echo %ESC%[32m[OK] ドライブ [%ISO_DRIVE%:] に新規マウントしました。%ESC%[0m

if not exist "%ISO_DRIVE%:\setup.exe" goto ISO_SETUP_NOT_FOUND

echo setup.exe を起動します...
start "" "%ISO_DRIVE%:\setup.exe" %SETUP_ARGS%
echo.
echo %ESC%[33m【重要】セットアップが起動しました。%ESC%[0m
echo このバッチファイルを終了すると、安全のため ISO を自動アンマウントします。
echo セットアップの「ファイルのコピー中...」が終わってPCが再起動するまでは、
echo このバッチ画面を閉じないでください。
echo.
pause
goto PAGE2

:ISO_NOT_FOUND
echo %ESC%[31m[!] エラー: Win11.iso が見つかりませんでした。%ESC%[0m
echo     バッチファイルと同じ場所に「Win11.iso」という名前で
echo     Windows 11 の ISO ファイルを配置してください。
echo.
pause
goto PAGE2

:ISO_MOUNT_FAIL
echo %ESC%[31m[!] マウントに失敗したか、ドライブレターを取得できませんでした。%ESC%[0m
pause
goto PAGE2

:ISO_SETUP_NOT_FOUND
echo %ESC%[31m[!] %ISO_DRIVE%:\setup.exe が見つかりませんでした。%ESC%[0m
pause
goto PAGE2

:: ========================================================
:: [Page 2-C] CPU-Z
:: ========================================================
:RUN_CPUZ
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33mCPU-Z 起動%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
set "TOOL_DIR=%BASE_DIR%tools\CPU-Z"
if not defined EXE_CPU goto CPU_NOT_FOUND

echo 起動中: %EXE_CPU%
start "" /d "%TOOL_DIR%" "%TOOL_DIR%\%EXE_CPU%"
goto PAGE2

:CPU_NOT_FOUND
echo %ESC%[31m[!] プログラムが見つかりませんでした。%ESC%[0m
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo 【配置方法】
echo 1. CPU-Z のポータブル (ZIP) 版をダウンロード
echo 2. フォルダ名をバージョン表記なしにして以下に配置
echo    パス: %BASE_DIR%tools\CPU-Z\cpuz_x64.exe
echo %ESC%[36m------------------------------------------------------%ESC%[0m
pause
goto PAGE2

:: ========================================================
:: [Page 2-H] HWMonitor
:: ========================================================
:RUN_HWMONITOR
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33mHWMonitor 起動%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
set "TOOL_DIR=%BASE_DIR%tools\HWMonitor"
if not defined EXE_HWM goto HWM_NOT_FOUND

echo 起動中: %EXE_HWM%
start "" /d "%TOOL_DIR%" "%TOOL_DIR%\%EXE_HWM%"
goto PAGE2

:HWM_NOT_FOUND
echo %ESC%[31m[!] プログラムが見つかりませんでした。%ESC%[0m
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo 【配置方法】
echo 1. HWMonitor のポータブル (ZIP) 版をダウンロード
echo 2. フォルダ名をバージョン表記なしにして以下に配置
echo    パス: %BASE_DIR%tools\HWMonitor\HWMonitor_x64.exe
echo %ESC%[36m------------------------------------------------------%ESC%[0m
pause
goto PAGE2

:: ========================================================
:: [Page 2-F] FurMark
:: ========================================================
:RUN_FURMARK
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33mFurMark 起動%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
set "TOOL_DIR=%BASE_DIR%tools\FurMark"
if not defined EXE_FUR goto FUR_NOT_FOUND

echo 起動中: %EXE_FUR%
start "" /d "%TOOL_DIR%" "%TOOL_DIR%\%EXE_FUR%"
goto PAGE2

:FUR_NOT_FOUND
echo %ESC%[31m[!] プログラムが見つかりませんでした。%ESC%[0m
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo 【配置方法】
echo 1. FurMark のポータブル版を用意
echo 2. フォルダ名をバージョン表記なしにして以下に配置
echo    パス: %BASE_DIR%tools\FurMark\FurMark.exe
echo %ESC%[36m------------------------------------------------------%ESC%[0m
pause
goto PAGE2

:: ========================================================
:: [Page 2-V] Victoria (ストレージ詳細診断)
:: ========================================================
:RUN_VICTORIA
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33mVictoria 起動%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
set "TOOL_DIR=%BASE_DIR%tools\Victoria"
if not defined EXE_VIC goto VIC_NOT_FOUND

echo 起動中: %EXE_VIC%
start "" /d "%TOOL_DIR%" "%TOOL_DIR%\%EXE_VIC%"
goto PAGE2

:VIC_NOT_FOUND
echo %ESC%[31m[!] プログラムが見つかりませんでした。%ESC%[0m
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo 【配置方法】
echo 1. Victoria のポータブル版を用意
echo 2. フォルダ名をバージョン表記なしにして以下に配置
echo    パス: %BASE_DIR%tools\Victoria\Victoria.exe
echo %ESC%[36m------------------------------------------------------%ESC%[0m
pause
goto PAGE2

:: ========================================================
:: [Page 2-E] Erk 単体起動
:: ========================================================
:RUN_PAGE2_ERK
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33mErk 起動%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
set "DIR_ERK=%BASE_DIR%tools\Erk"

if not exist "%DIR_ERK%\Start Scanner.exe" goto PAGE2_ERK_NOT_FOUND

echo 起動中: Start Scanner.exe
start "" /d "%DIR_ERK%" "%DIR_ERK%\Start Scanner.exe"
goto PAGE2

:PAGE2_ERK_NOT_FOUND
echo %ESC%[31m[!] Erk が見つかりませんでした。%ESC%[0m
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo 【配置方法】
echo 「tools」フォルダ内に「Erk」フォルダを作成し、
echo 「Start Scanner.exe」を配置してください。
echo パス: %BASE_DIR%tools\Erk\Start Scanner.exe
echo %ESC%[36m------------------------------------------------------%ESC%[0m
pause
goto PAGE2

:: ========================================================
:: [Page 2-K] Eek 単体起動
:: ========================================================
:RUN_PAGE2_EEK
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33mEek 起動%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
if not defined DIR_P2_EEK goto PAGE2_EEK_NOT_FOUND

echo 起動中: Start Scanner.exe
start "" /d "%DIR_P2_EEK%" "%DIR_P2_EEK%\Start Scanner.exe"
goto PAGE2

:PAGE2_EEK_NOT_FOUND
echo %ESC%[31m[!] Eek が見つかりませんでした。%ESC%[0m
echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo 【配置方法】
echo 「tools」フォルダ内に「EEK」フォルダを作成し、
echo 「Start Scanner.exe」を配置してください。
echo パス: %BASE_DIR%tools\EEK\Start Scanner.exe
echo %ESC%[36m------------------------------------------------------%ESC%[0m
pause
goto PAGE2

:: ========================================================
:: [Page 2-S] ツール ＆ ISO 配置状況の詳細・診断一覧
:: ========================================================
:CHECK_TOOL_STATUS
cls
echo %ESC%[36m======================================================%ESC%[0m
echo        %ESC%[33m外部ツール ＆ 配備ファイル 配置診断一覧%ESC%[0m
echo        基準フォルダ: %BASE_DIR%
echo %ESC%[36m======================================================%ESC%[0m

set "TAG_OK=%ESC%[32m[OK]%ESC%[0m"
set "TAG_NG=%ESC%[31m[未配置]%ESC%[0m"

:: --- 1. 保守・診断ツール判定 ---
set "S_ERK=%TAG_NG%" & set "P_ERK="
if exist "%BASE_DIR%tools\Erk\Start Scanner.exe" set "S_ERK=%TAG_OK%" & set "P_ERK=%BASE_DIR%tools\Erk\Start Scanner.exe"

set "S_CDI=%TAG_NG%" & set "P_CDI="
if exist "%BASE_DIR%tools\CrystalDiskInfo\DiskInfo64.exe" (set "S_CDI=%TAG_OK%" & set "P_CDI=%BASE_DIR%tools\CrystalDiskInfo\DiskInfo64.exe")
if not defined P_CDI if exist "%BASE_DIR%tools\CrystalDiskInfo\DiskInfo32.exe" (set "S_CDI=%TAG_OK%" & set "P_CDI=%BASE_DIR%tools\CrystalDiskInfo\DiskInfo32.exe")
if not defined P_CDI if exist "%BASE_DIR%tools\CrystalDiskInfo\DiskInfo.exe" (set "S_CDI=%TAG_OK%" & set "P_CDI=%BASE_DIR%tools\CrystalDiskInfo\DiskInfo.exe")

set "S_CPU=%TAG_NG%" & set "P_CPU="
if exist "%BASE_DIR%tools\CPU-Z\cpuz_x64.exe" (set "S_CPU=%TAG_OK%" & set "P_CPU=%BASE_DIR%tools\CPU-Z\cpuz_x64.exe")
if not defined P_CPU if exist "%BASE_DIR%tools\CPU-Z\cpuz.exe" (set "S_CPU=%TAG_OK%" & set "P_CPU=%BASE_DIR%tools\CPU-Z\cpuz.exe")

set "S_HWM=%TAG_NG%" & set "P_HWM="
if exist "%BASE_DIR%tools\HWMonitor\HWMonitor_x64.exe" (set "S_HWM=%TAG_OK%" & set "P_HWM=%BASE_DIR%tools\HWMonitor\HWMonitor_x64.exe")
if not defined P_HWM if exist "%BASE_DIR%tools\HWMonitor\HWMonitor.exe" (set "S_HWM=%TAG_OK%" & set "P_HWM=%BASE_DIR%tools\HWMonitor\HWMonitor.exe")

set "S_FUR=%TAG_NG%" & set "P_FUR="
if exist "%BASE_DIR%tools\FurMark\FurMark.exe" (set "S_FUR=%TAG_OK%" & set "P_FUR=%BASE_DIR%tools\FurMark\FurMark.exe")
if not defined P_FUR if exist "%BASE_DIR%tools\FurMark\FurMark_x64.exe" (set "S_FUR=%TAG_OK%" & set "P_FUR=%BASE_DIR%tools\FurMark\FurMark_x64.exe")
if not defined P_FUR if exist "%BASE_DIR%tools\FurMark\Geeks3D FurMark.exe" (set "S_FUR=%TAG_OK%" & set "P_FUR=%BASE_DIR%tools\FurMark\Geeks3D FurMark.exe")

set "S_VIC=%TAG_NG%" & set "P_VIC="
if exist "%BASE_DIR%tools\Victoria\Victoria.exe" set "S_VIC=%TAG_OK%" & set "P_VIC=%BASE_DIR%tools\Victoria\Victoria.exe"

set "S_ISO=%TAG_NG%" & set "P_ISO="
if exist "%BASE_DIR%Win11.iso" set "S_ISO=%TAG_OK%" & set "P_ISO=%BASE_DIR%Win11.iso"

:: --- 2. キッティング用ファイル判定 ---
set "S_ADOBE=%TAG_NG%" & set "P_ADOBE="
if exist "%BASE_DIR%tools\Reader_jp_install.exe" set "S_ADOBE=%TAG_OK%" & set "P_ADOBE=%BASE_DIR%tools\Reader_jp_install.exe"

set "S_MIYA=%TAG_NG%" & set "P_MIYA="
if exist "%BASE_DIR%tools\miyabullSetup-MN.5.2.0R.exe" set "S_MIYA=%TAG_OK%" & set "P_MIYA=%BASE_DIR%tools\miyabullSetup-MN.5.2.0R.exe"

set "S_SUP=%TAG_NG%" & set "P_SUP="
if exist "%BASE_DIR%tools\アプライド_サポートTEL0570-783-792.exe" set "S_SUP=%TAG_OK%" & set "P_SUP=%BASE_DIR%tools\アプライド_サポートTEL0570-783-792.exe"

:: --- 画面描画 ---
echo  %ESC%[33m-- [診断・点検・保守ツール] -------------------------%ESC%[0m
echo   Erk / Eek                   : %STAT_KIT%
if defined DIR_KIT (
    echo     %ESC%[32m%DIR_KIT%\%EXE_KIT%%ESC%[0m (%LABEL_KIT% を検出)
) else (
    echo     案内: tools\Erk\ または tools\EEK\ に Start Scanner.exe を配置
)

echo   CrystalDiskInfo             : %S_CDI%
if defined P_CDI (echo     %ESC%[32m%P_CDI%%ESC%[0m) else (echo     案内: tools\CrystalDiskInfo\DiskInfo64.exe 等)

echo   CPU-Z                       : %S_CPU%
if defined P_CPU (echo     %ESC%[32m%P_CPU%%ESC%[0m) else (echo     案内: tools\CPU-Z\cpuz_x64.exe 等)

echo   HWMonitor                   : %S_HWM%
if defined P_HWM (echo     %ESC%[32m%P_HWM%%ESC%[0m) else (echo     案内: tools\HWMonitor\HWMonitor_x64.exe 等)

echo   FurMark                     : %S_FUR%
if defined P_FUR (echo     %ESC%[32m%P_FUR%%ESC%[0m) else (echo     案内: tools\FurMark\FurMark.exe 等)

echo   Victoria                    : %S_VIC%
if defined P_VIC (echo     %ESC%[32m%P_VIC%%ESC%[0m) else (echo     案内: tools\Victoria\Victoria.exe)

echo.
echo   Windows 11 ISO              : %S_ISO%
if defined P_ISO (echo     %ESC%[32m%P_ISO%%ESC%[0m) else (echo     案内: %BASE_DIR%Win11.iso)

echo.
echo  %ESC%[33m-- [販売PC・キッティング用インストーラー] ----------%ESC%[0m
echo   Adobe Acrobat Reader        : %S_ADOBE%
if defined P_ADOBE (echo     %ESC%[32m%P_ADOBE%%ESC%[0m) else (echo     案内: tools\Reader_jp_install.exe)

echo   みやブル インストーラー     : %S_MIYA%
if defined P_MIYA (echo     %ESC%[32m%P_MIYA%%ESC%[0m) else (echo     案内: tools\miyabullSetup-MN.5.2.0R.exe)

echo   リモートサポート配置用      : %S_SUP%
if defined P_SUP (echo     %ESC%[32m%P_SUP%%ESC%[0m) else (echo     案内: tools\アプライド_サポートTEL0570-783-792.exe)

echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo  [1] エクスプローラーで現在の作業フォルダを開く
echo  [0] メニューに戻る
echo %ESC%[36m------------------------------------------------------%ESC%[0m
choice /c 10 /n /m "番号を入力してください [1 / 0]: "
if errorlevel 2 goto PAGE2
if errorlevel 1 (
    start "" explorer.exe "%BASE_DIR%"
    goto PAGE2
)

:: ========================================================
:: [Page 2-1] chkdsk (ディスク検査)
:: ========================================================
:RUN_CHKDSK
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m実行: chkdsk (ディスクチェック)%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
set /p CHK_DRIVE="検査するドライブ文字を入力 (例: C / 未入力で中止): "
if "%CHK_DRIVE%"=="" goto PAGE2
set "CHK_DRIVE=%CHK_DRIVE:~0,1%"

echo.
echo  実行モードを選択してください:
echo   [1] 読み取り専用スキャン (安全・再起動不要)
echo   [2] 不良セクターの修復付き (/f /r) (使用中ドライブは再起動が必要)
echo   [0] キャンセル (メニューに戻る)
choice /c 120 /n /m "番号を入力してください [1-2 / 0]: "

if errorlevel 3 goto PAGE2
if errorlevel 2 goto CHKDSK_REPAIR
if errorlevel 1 goto CHKDSK_READONLY

:CHKDSK_READONLY
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m実行中: chkdsk %CHK_DRIVE%:%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
chkdsk %CHK_DRIVE%:
echo.
pause
goto PAGE2

:CHKDSK_REPAIR
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m実行中: chkdsk %CHK_DRIVE%: /f /r%ESC%[0m
echo  ※ Cドライブ等の場合は次回再起動時の実行スケジュールを問われます
echo %ESC%[36m======================================================%ESC%[0m
chkdsk %CHK_DRIVE%: /f /r
echo.
pause
goto PAGE2

:: ========================================================
:: [Page 2-2] diskpart
:: ========================================================
:RUN_DISKPART
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m実行: diskpart%ESC%[0m
echo  ※ 対話型プロンプトが起動します。
echo  ※ 終了してメニューに戻るには 'exit' と入力して Enter を押してください。
echo %ESC%[36m======================================================%ESC%[0m
diskpart
goto PAGE2

:: ========================================================
:: [Page 2-3] winver
:: ========================================================
:RUN_WINVER
cls
echo Windows バージョン情報画面 (winver) を呼び出しています...
start winver
goto PAGE2

:: ========================================================
:: [Page 2-4] DNSキャッシュクリア ＆ IP再取得
:: ========================================================
:RUN_NET_FLUSH
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m実行: DNSキャッシュクリア ＆ IPアドレス再取得%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo [1/4] DNS リゾルバーキャッシュを消去中...
ipconfig /flushdns
echo.
echo [2/4] DHCP アドレスを解放中...
ipconfig /release
echo.
echo [3/4] DHCP アドレスを再要求・更新中...
ipconfig /renew
echo.
echo [4/4] DNS 名の動的再登録中...
ipconfig /registerdns
echo.
echo ネットワーク接続のリフレッシュが完了しました。
pause
goto PAGE2

:: ========================================================
:: [Page 2-5] ネットワークスタック完全初期化
:: ========================================================
:RUN_NET_RESET
cls
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[33m実行: ネットワークスタック完全初期化%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
echo ※ ネットワークアダプターのプロトコル設定を初期状態に戻します。
echo ※ 固定IPアドレスやVPNアダプターの設定が初期化される場合があります。
echo.
choice /c yn /m "実行してもよろしいですか？ (Y/N): "
if errorlevel 2 goto PAGE2

echo.
echo [1/3] Winsock カタログをリセット中...
netsh winsock reset
echo.
echo [2/3] TCP/IP スタック (IPv4/IPv6) をリセット中...
netsh int ip reset
echo.
echo [3/3] DNS キャッシュを消去中...
ipconfig /flushdns
echo.
echo %ESC%[36m======================================================%ESC%[0m
echo  %ESC%[32m初期化が完了しました。%ESC%[0m
echo  %ESC%[32m設定を完全に反映させるため、PC を再起動してください。%ESC%[0m
echo %ESC%[36m======================================================%ESC%[0m
pause
goto PAGE2

:: ========================================================
:: [Page 1-W] Windows 標準 回復ドライブの作成
:: ========================================================
:RUN_RECOVERYDRIVE
cls
echo Windows 回復ドライブ作成ツール (recoverydrive.exe) を起動しています...
start recoverydrive.exe
goto BACK_TO_CURRENT_MENU

:: ========================================================
:: [ログ機能] 過去30日以内のログ照会 ＆ メモリ展開
:: ========================================================
:LOAD_PC_LOG
set "LOG_MAINT_LAST_DATE="
set "LOG_MAINT_COUNT=0"
set "LOG_MAINT_MSG="
set "DONE_MAINT_B="
set "DONE_MAINT_O="
for /l %%i in (1,1,9) do set "DONE_MAINT_%%i="

set "LOG_SETUP_LAST_DATE="
set "LOG_SETUP_COUNT=0"
set "LOG_SETUP_MSG="
set "DONE_SETUP_B="
for /l %%i in (1,1,9) do set "DONE_SETUP_%%i="

if not exist "%BASE_DIR%tools\log" md "%BASE_DIR%tools\log" >nul 2>&1

:: 過去30日以内のログから MAINT / SETUP を分離集計
for /f "usebackq tokens=1,* delims==" %%A in (`powershell -NoProfile -Command ^
    "$dir = '%BASE_DIR%tools\log';" ^
    "$uuid = '%PC_UUID%';" ^
    "$limit = (Get-Date).AddDays(-30);" ^
    "$allFiles = @(Get-ChildItem -Path $dir -Filter ('*' + $uuid + '*.log') -ErrorAction SilentlyContinue);" ^
    "$files = @();" ^
    "foreach ($f in $allFiles) { if ($f.LastWriteTime -ge $limit) { $files += $f } };" ^
    "if ($files.Count -eq 0) { exit };" ^
    "$mKeys = @{}; $sKeys = @{};" ^
    "$mLast = ''; $sLast = '';" ^
    "foreach ($f in $files) {" ^
    "    $lines = @(Get-Content -Path $f.FullName -ErrorAction SilentlyContinue);" ^
    "    foreach ($line in $lines) {" ^
    "        $p = $line.Split([char]124);" ^
    "        if ($p.Count -ge 4) {" ^
    "            $date = $p[0].Trim(); $cat = $p[1].Trim(); $k = $p[2].Trim();" ^
    "            if ($cat -eq 'MAINT') { $mKeys[$k] = 1; $mLast = $date }" ^
    "            elseif ($cat -eq 'SETUP') { $sKeys[$k] = 1; $sLast = $date }" ^
    "        } elseif ($p.Count -ge 2) {" ^
    "            $date = $p[0].Trim(); $k = $p[1].Trim();" ^
    "            if ($k -like 'MAINT*') { $mKeys[$k] = 1; $mLast = $date }" ^
    "            else { $sKeys[$k] = 1; $sLast = $date }" ^
    "        }" ^
    "    }" ^
    "};" ^
    "Write-Output ('LOG_MAINT_LAST_DATE=' + $mLast);" ^
    "Write-Output ('LOG_SETUP_LAST_DATE=' + $sLast);" ^
    "foreach ($k in $mKeys.Keys) { Write-Output ('DONE_' + $k + '=1'); };" ^
    "foreach ($k in $sKeys.Keys) { Write-Output ('DONE_' + $k + '=1'); }"`) do (
    set "%%A=%%B"
)

:: スリープ設定の再起動越え状態復元
if defined DONE_MAINT_9_SET if not defined DONE_MAINT_9 (
    set "PWR_STATE=CHANGING"
)

:: Windows Update の再起動越え状態復元
if defined DONE_MAINT_4_ING if not defined DONE_MAINT_4 set "WU_MAINT_STATE=PROGRESS"
if defined DONE_SETUP_3_ING if not defined DONE_SETUP_3 set "WU_SETUP_STATE=PROGRESS"

:: ソフトアップデート の再起動越え状態復元
if defined DONE_MAINT_5_ING if not defined DONE_MAINT_5 set "SOFT_MAINT_STATE=PROGRESS"
if defined DONE_SETUP_4_ING if not defined DONE_SETUP_4 set "SOFT_SETUP_STATE=PROGRESS"

:: メーカーツール の再起動越え状態復元
if defined DONE_MAINT_O_ING if not defined DONE_MAINT_O set "OEM_MAINT_STATE=PROGRESS"
if defined DONE_SETUP_5_ING if not defined DONE_SETUP_5 set "OEM_SETUP_STATE=PROGRESS"

:: メンテナンス進捗の厳密な一意集計 (B + 1-9 + O の最大11項目)
set /a LOG_MAINT_COUNT=0
if defined DONE_MAINT_B set /a LOG_MAINT_COUNT+=1
for /l %%i in (1,1,9) do if defined DONE_MAINT_%%i set /a LOG_MAINT_COUNT+=1
if defined DONE_MAINT_O set /a LOG_MAINT_COUNT+=1

:: キッティング進捗の厳密な一意集計 (B + 1-9 + I の最大11項目)
set /a LOG_SETUP_COUNT=0
if defined DONE_SETUP_B set /a LOG_SETUP_COUNT+=1
for /l %%i in (1,1,9) do if defined DONE_SETUP_%%i set /a LOG_SETUP_COUNT+=1
if defined DONE_SETUP_I set /a LOG_SETUP_COUNT+=1

if %LOG_SETUP_COUNT% gtr 0 (
    set "LOG_SETUP_MSG=設定履歴: 最新 %LOG_SETUP_LAST_DATE% (進捗: %LOG_SETUP_COUNT%/11 完了)"
)
exit /b

:: ========================================================
:: [ログ機能] 実行ログの追記保存サブルーチン
:: ========================================================
:RECORD_ACTION
:: %1: 種別 (MAINT / SETUP)
:: %2: 実行キー (MAINT_B, MAINT_1, SETUP_B 等)
:: %3: 作業タイトル
if not defined PC_UUID exit /b
if not exist "%BASE_DIR%tools\log" md "%BASE_DIR%tools\log" >nul 2>&1

for /f "usebackq tokens=1,2 delims==" %%A in (`powershell -NoProfile -Command ^
    "$d = Get-Date;" ^
    "Write-Output ('TODAY_FILE=' + $d.ToString('yyyyMMdd'));" ^
    "Write-Output ('NOW_STAMP=' + $d.ToString('yyyy/MM/dd HH:mm'));"`) do (
    set "%%A=%%B"
)

set "TARGET_LOG_FILE=%BASE_DIR%tools\log\%PC_UUID%_%TODAY_FILE%.log"
>>"%TARGET_LOG_FILE%" echo %NOW_STAMP% ^| %~1 ^| %~2 ^| %~3

:: メモリ上のフラグ・進捗カウントを即時更新 (何回叩いても1項目=1カウント)
set "DONE_%~2=1"

if "%~1"=="MAINT" (
    set /a LOG_MAINT_COUNT=0
    if defined DONE_MAINT_B set /a LOG_MAINT_COUNT+=1
    for /l %%i in (1,1,9) do (
        if defined DONE_MAINT_%%i set /a LOG_MAINT_COUNT+=1
    )
    if defined DONE_MAINT_O set /a LOG_MAINT_COUNT+=1
    set "LOG_MAINT_MSG=点検履歴: 最新 %NOW_STAMP% (進捗: !LOG_MAINT_COUNT!/11 完了)"
) else (
    set /a LOG_SETUP_COUNT=0
    if defined DONE_SETUP_B set /a LOG_SETUP_COUNT+=1
    for /l %%i in (1,1,9) do (
        if defined DONE_SETUP_%%i set /a LOG_SETUP_COUNT+=1
    )
    if defined DONE_SETUP_I set /a LOG_SETUP_COUNT+=1
    set "LOG_SETUP_MSG=設定履歴: 最新 %NOW_STAMP% (進捗: !LOG_SETUP_COUNT!/11 完了)"
)
exit /b

:: ========================================================
:: [ログ機能] 共通・過去ログ一覧の画面表示
:: ========================================================
:VIEW_PC_LOG
cls
echo %ESC%[36m======================================================%ESC%[0m
echo        %ESC%[33mこのPCの作業履歴一覧 (過去30日以内)%ESC%[0m
echo        識別UUID: %PC_UUID%
echo %ESC%[36m======================================================%ESC%[0m
echo.

powershell -NoProfile -Command ^
    "$dir = '%BASE_DIR%tools\log';" ^
    "$uuid = '%PC_UUID%';" ^
    "$limit = (Get-Date).AddDays(-30);" ^
    "$allFiles = @(Get-ChildItem -Path $dir -Filter ('*' + $uuid + '*.log') -ErrorAction SilentlyContinue);" ^
    "$files = @();" ^
    "foreach ($f in $allFiles) { if ($f.LastWriteTime -ge $limit) { $files += $f } };" ^
    "if ($files.Count -eq 0) { Write-Host '  ※ 過去30日以内の作業ログはありません。' -ForegroundColor Yellow; exit };" ^
    "foreach ($f in $files) {" ^
    "    Write-Host ('  [ファイル: ' + $f.Name + ']') -ForegroundColor Cyan;" ^
    "    $lines = @(Get-Content -Path $f.FullName -ErrorAction SilentlyContinue);" ^
    "    foreach ($line in $lines) {" ^
    "        $p = $line.Split([char]124);" ^
    "        if ($p.Count -ge 4) {" ^
    "            $dt = $p[0].Trim(); $cat = $p[1].Trim(); $title = $p[3].Trim();" ^
    "            if ($cat -eq 'MAINT') {" ^
    "                Write-Host ('    ' + $dt + ' ') -NoNewline;" ^
    "                Write-Host '【メンテ】  ' -ForegroundColor Cyan -NoNewline;" ^
    "                Write-Host $title;" ^
    "            } else {" ^
    "                Write-Host ('    ' + $dt + ' ') -NoNewline;" ^
    "                Write-Host '【販売設定】' -ForegroundColor DarkYellow -NoNewline;" ^
    "                Write-Host $title;" ^
    "            }" ^
    "        } elseif ($p.Count -ge 3) {" ^
    "            $dt = $p[0].Trim(); $title = $p[2].Trim();" ^
    "            Write-Host ('    ' + $dt + '   ' + $title);" ^
    "        }" ^
    "    };" ^
    "    Write-Host '';" ^
    "}"

echo %ESC%[36m------------------------------------------------------%ESC%[0m
echo  何かキーを押すと直前のメニューに戻ります...
pause >nul
goto BACK_TO_CURRENT_MENU

:SHOW_OPENING_DEMO
cls
echo(
echo(
echo(
echo %ESC_PUR%+----------------------------------------------------+%ESC%[0m
echo %ESC_PUR%^|%ESC%[0m      PC KITTING ^& SYSTEM MAINTENANCE TOOLKIT       %ESC_PUR%^|%ESC%[0m
echo %ESC_PUR%+----------------------------------------------------+%ESC%[0m
echo(
echo     %ESC%[33m^>^> INITIALIZING HARDWARE SPECIFICATION QUERY ^<^<%ESC%[0m
echo(
echo     [+] Querying CPU ^& Architecture ......... %ESC%[32m[ OK ]%ESC%[0m
echo     [+] Querying Physical Memory Capacity ... %ESC%[32m[ OK ]%ESC%[0m
echo     [+] Scanning Primary Storage Volume [C:]  %ESC%[32m[ OK ]%ESC%[0m
echo(
echo             ============================
echo               設定を読み込んでいます...
echo               しばらくお待ちください。
echo             ============================
echo(
echo                Now reading system parameters...
echo(
echo %ESC_PUR%+----------------------------------------------------+%ESC%[0m
echo %ESC_PUR%^|%ESC%[0m      Windows Automated Setup ^& Diagnostic Suite    %ESC_PUR%^|%ESC%[0m
echo %ESC_PUR%+----------------------------------------------------+%ESC%[0m
echo(
echo(
echo(
echo(
echo(
echo(
echo(
pause >nul
goto PAGE2

:: ========================================================
:: [ハードウェア情報] スペック・ドライブ容量の取得 ＆ キャッシュ更新
:: ========================================================
:REFRESH_HARDWARE_INFO
cls
echo(
echo(
echo %ESC_ORG%+----------------------------------------------------+%ESC%[0m
echo %ESC_ORG%^|%ESC%[0m            SYSTEM REFRESH ^& CALIBRATION            %ESC_ORG%^|%ESC%[0m
echo %ESC_ORG%+----------------------------------------------------+%ESC%[0m
echo(
echo       %ESC%[33m____  ____ _____ ____  _____ ____  _   _%ESC%[0m
echo      %ESC%[33m^|  _ \^| ___^|  ___^|  _ \^| ____/ ___^|^| ^| ^| ^|%ESC%[0m
echo      %ESC%[33m^| ^|_) ^| ^|_ ^| ^|_  ^| ^|_) ^|  _^| \___ \^| ^|_^| ^|%ESC%[0m
echo      %ESC%[33m^|  _ ^<^|  _^|^|  _^| ^|  _ ^<^| ^|___ ___) ^|  _  ^|%ESC%[0m
echo      %ESC%[33m^|_^| \_\_^|  ^|_^|   ^|_^| \_\_____^|____/^|_^| ^|_^|%ESC%[0m
echo(
echo             %ESC%[32m[ ACQUIRING SYSTEM METRICS ]%ESC%[0m
echo(
echo             ============================
echo               情報を再取得しています...
echo               しばらくお待ちください。
echo             ============================
echo(
echo             C: Drive Remaining Capacity ...
echo             Installed Memory Descriptors...
echo             Processor Core Specifications..
echo(
echo                 Write Cache Flush...
echo(
echo %ESC_ORG%+----------------------------------------------------+%ESC%[0m
echo %ESC_ORG%^|%ESC%[0m        UPDATING LIVE REPOSITORY, PLEASE WAIT       %ESC_ORG%^|%ESC%[0m
echo %ESC_ORG%+----------------------------------------------------+%ESC%[0m
echo(

for /f "usebackq tokens=1-5 delims=," %%A in (`powershell -NoProfile -Command "$p=(Get-CimInstance Win32_Processor).Name; $c=if($p -match 'i[3579]-\w+'){'Core '+$matches[0]}elseif($p -match 'Ryzen\s+\d+\s+\w+'){$matches[0]}else{($p -replace '\([^\)]+\)','' -replace '\s*@.*','').Trim()}; $m=[math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory/1GB,1); $v=Get-Volume -DriveLetter C; $t=[math]::Round($v.Size/1GB,2); $f=[math]::Round($v.SizeRemaining/1GB,2); $d=(Get-Date).ToString('yyyy/MM/dd (ddd)'); ($c,$m,$t,$f,$d) -join ','" 2^>nul`) do (
    set "SYS_CPU=%%A"
    set "SYS_RAM=%%B"
    set "DRV_TOTAL=%%C"
    set "DRV_FREE=%%D"
    set "DISP_DATE=%%E"
)

:: キャッシュファイルへ保存 (tools\log が無ければ自動作成)
if not defined SPEC_CACHE_FILE set "SPEC_CACHE_FILE=%BASE_DIR%tools\log\SPEC_%PC_UUID%.dat"
if not exist "%BASE_DIR%tools\log" md "%BASE_DIR%tools\log" >nul 2>&1
> "%SPEC_CACHE_FILE%" echo %SYS_CPU%,%SYS_RAM%,%DRV_TOTAL%,%DRV_FREE%,%DISP_DATE%

exit /b

:: ========================================================
:: 終了処理
:: ========================================================
:EXIT_MENU
exit /b