バッチファイルを集約していった

1, 始めに

Raycastてどないなもんやんねん?とGeminiに聞いたら、私にお薦めしますと言うので、意見交換をしてみた。

Alt + Spaceで立ち上がって、文字を打ち込んでいったら随時検索してキーワードにヒットするアプリを表示するランチャーなんだけど、見た目のこだわり、AI搭載、招待制っていうなんか、胡散臭い匂いがしているんだよね。そりゃmacOSの欠点を補うためのツールだからそうなんだろうと、そしておしゃれさを優先するユーザーに広げる目的があるんだろうと納得するもんだった訳ですよ。

で、Windowsには標準で最強のランチャー「スタートメニュー」とCtrl + Rがある訳ですよ。キー入力をインターセプトされることもなく、無駄なリソースを消費することもなく、専用のキーまで持った最高のランチャーが。私がランチャーに求めるのはシンプルさと簡潔さ、寧ろ見えなくても良いんですわ。

自分で仕込んでいるバッチファイルをもっと使いやすく出来ないか、管理者権限で起動できないかということを模索して居る話をして、当初はショートカットを作成して、プロパティーから「管理者権限で実行」を設定して、さらにはコマンドプロンプトで実行させるために、ショートカットにリンク先に「C:\Windows\System32\cmd.exe /k “"」を追加していたわけですが、ショートカットをあちこちに増やすのもスマートじゃないじゃない。

するとGeminiからバッチファイルの中で管理者権限でコマンドプロンプトを開いて自分自身を実行させるコマンドを作れますよ。と返事が返ってきたわけで。

2. コマンドプロンプトの整備

  1. すべてのコマンドを統合するメニュー

menu.bat

@echo off

setlocal enabledelayedexpansion

REM 1. [cmd /k 制御] ダブルクリックで実行された場合に、自分自身を cmd /k で起動し直す
echo %CMDCMDLINE% | find /i "/c" >nul
if %errorlevel%==0 (
    start cmd /k "%~f0"
    exit /b
)

REM 2. [管理者昇格] 管理者権限が必要な場合は自己昇格させる
openfiles >nul 2>&1
if %errorlevel% neq 0 (
    echo 管理者権限を要求しています...
    powershell -Command "Start-Process '%~f0' -Verb RunAs"
    exit /b
)

REM ----- Backup Menu Batch
 
:TOP
cls
echo *****************************************************************
echo * Command Menu                                                  *
echo *                                                               *
echo *   1:ComfyUI                                                   *
echo *   2:GitHub Page                                               *
echo *                                                               *
echo *  99:Backup                                                    *
echo *                                                               *
echo *   0:Exit                                                      *
echo *                                                               *
echo *****************************************************************
 
:MENUSTART
 
set USR_INPUT_STR=
set /P USR_INPUT_STR="Input Number => "

if %USR_INPUT_STR%==0 (
  goto EXITTRAP
) else if %USR_INPUT_STR%==1 (
  goto EXECUTE_1
) else if %USR_INPUT_STR%==2 (
  goto EXECUTE_2
) else if %USR_INPUT_STR%==99 (
  goto EXECUTE_99
) else (
  echo Not Exist Number!
  echo.
  goto MENUSTART
)
 
REM ComfyUI
:EXECUTE_1
call E:\Document\Command\1_ComfyUI\menu_For_ComfyUI.bat
cls
goto TOP
 
REM GitHub Page
:EXECUTE_2
call E:\Document\Command\2_ForGit\menu_For_Git.bat
cls
goto TOP
 
REM Backup
:EXECUTE_99
call E:\Document\Command\99_Backup\menu_For_Backup.bat
cls
goto TOP

:EXITTRAP
echo.
echo Exit
EXIT
  1. ComfyUIのメニュー

menu_For_ComfyUI.bat

@echo off
REM ----- ComfyUI Menu Batch
 
:TOP
cls 
echo *****************************************************************
echo * ComfyUI                                                       *
echo *                                                               *
echo *   1:Update                                                    *
echo *   2:Start_with_Output_Date_Folder                             *
echo *     with Google Chrome http://127.0.0.1:8188                  *
echo *                                                               *
echo *   0:Exit                                                      *
echo *                                                               *
echo *****************************************************************
 
:MENUSTART
 
set USR_INPUT_STR=
set /P USR_INPUT_STR="Input Number => "

if %USR_INPUT_STR%==0 (
  goto EXITTRAP
) else if %USR_INPUT_STR%==1 (
  goto EXECUTE_1
) else if %USR_INPUT_STR%==2 (
  goto EXECUTE_2
) else (
  echo Not Exist Number!
  echo.
  goto MENUSTART
)
 
REM ComfyUI Update
:EXECUTE_1
call E:\Document\Command\1_ComfyUI\1_ComfyUI_update.bat
cls
goto TOP
 
REM ComfyUI Start
:EXECUTE_2
start E:\Document\Command\1_ComfyUI\2_ComfyUI_date.bat
timeout /t 15 /nobreak
start "" "C:\Program Files\Google\Chrome\Application\chrome.exe" --app=http://127.0.0.1:8188 --user-data-dir="D:\ChromeData\App8188" --disable-gpu --disable-software-rasterizer --disk-cache-size=1 --media-cache-size=1

cls
goto TOP
 
:EXITTRAP
echo.
echo Exit

1_ComfyUI_update.bat

D:
cd D:\ComfyUI
git pull
pip install -r requirements.txt

2_ComfyUI_date.bat

@echo off
setlocal

rem PowerShellを使って確実に yyyyMMdd を取得(ロケールに左右されません)
for /f "usebackq" %%i in (`powershell -NoProfile -Command "Get-Date -Format 'yyyyMMdd'"`) do set yyyymmdd=%%i

rem Get the Output path
set parentPath=H:\output

rem Create the folder with the name yyyymmdd
set outpath=%parentPath%\%yyyymmdd%

:: システムのPythonやライブラリを無視させる
set PYTHONNOUSERSITE=1
set PYTHONPATH=
:: このアプリ専用のPythonとROCmのパスを最優先にする
set PATH=%~dp0python_embeded;%~dp0python_embeded\Scripts;%PATH%

rem --- ROCm / PyTorch 最適化設定 ---
SET PYTORCH_HIP_ALLOC_CONF=garbage_collection_threshold:0.6
SET PYTORCH_HIP_ALLOC_CONF=expandable_segments:True
SET ROCM_ENABLE_PREFETCH=1


rem フォルダが存在しない場合のみ作成
if not exist "%outpath%" mkdir "%outpath%"

echo Target path: %outpath%

D:
cd D:\ComfyUI

python main.py --output-directory %outpath% --preview-method none --reserve-vram 0.0 --cache-lru 8 --use-pytorch-cross-attention
endlocal
  1. Backupのメニュー

menu_For_Backup.bat

@echo off

REM ----- Backup Menu Batch
 
:TOP
cls
echo *****************************************************************
echo * Backup                                                        *
echo *                                                               *
echo *   1:Compress: ComfyUI Workflow JSON                           *
echo *               Thunderbird Profile                             *
echo *               GitPage For_Git                                 *
echo *  99:Start Backup                                              *
echo *                                                               *
echo *   0:Exit                                                      *
echo *                                                               *
echo *****************************************************************
 
:MENUSTART
 
set USR_INPUT_STR=
set /P USR_INPUT_STR="Input Number => "
 
if %USR_INPUT_STR%==0 (
  goto EXITTRAP
) else if %USR_INPUT_STR%==1 (
  goto EXECUTE_1
) else if %USR_INPUT_STR%==99 (
  goto EXECUTE_99
) else (
  echo Not Exist Number!
  echo.
  goto MENUSTART
)
 
REM Compress
:EXECUTE_1
call E:\Document\Command\99_Backup\1_Compress.bat
cls
goto TOP
 
REM ComfyUI Start
:EXECUTE_99
call E:\Document\Command\99_Backup\99_backup.bat
cls
goto TOP
 
:EXITTRAP
echo.
echo Exit

1_Compress.bat

echo ComfyUI JSON Compressing...
7z a "H:\JSON.7z" "H:\JSON"
move "H:\JSON.7z" "E:\Document\ComfyUI"

echo GitPage for_Git Compressing...
7z a "D:\for_Git.7z" "D:\for_Git"
move "D:\for_Git.7z" "E:\Document\hp"

echo Thunderbird Profile Compressing...
7z a "C:\Users\yuki9\AppData\Local\Thunderbird\Profiles.7z" "C:\Users\yuki9\AppData\Local\Thunderbird\Profiles"
move "C:\Users\yuki9\AppData\Local\Thunderbird\Profiles.7z" "E:\Document\Mail"

99_backup.bat

echo Backup Folder - Document
Robocopy E:\Document \\survive\Data_3TB\E\Document /B /J /COPY:DAT /MIR /MT:4 /R:5 /W:5 /NP /UNILOG:E:\Backuplog\Document.log

echo Backup Folder - E:\Download
Robocopy E:\Download \\survive\Data_3TB\E\Download /B /J /COPY:DAT /MIR /MT:4 /R:5 /W:5 /NP /UNILOG:E:\Backuplog\Download.log

echo Backup Folder - E:\Picture
Robocopy E:\Picture \\survive\Data_3TB\E\Picture /B /J /COPY:DAT /MIR /MT:4 /R:5 /W:5 /NP /UNILOG:E:\Backuplog\Picture.log

echo Backup Folder - E:\Videos
Robocopy E:\Videos \\survive\Data_3TB\E\Videos /B /J /COPY:DAT /MIR /MT:4 /R:5 /W:5 /NP /UNILOG:E:\Backuplog\Videos.log

echo Backup Folder - E:\Music
Robocopy E:\Music \\survive\Data_3TB\E\Music /B /J /COPY:DAT /MIR /MT:4 /R:5 /W:5 /NP /UNILOG:E:\Backuplog\Music.log

echo Backup Folder - F:\PIC
Robocopy F:\PIC \\survive\Data_4TB\F\PIC /B /J /COPY:DAT /MIR /MT:4 /R:5 /W:5 /NP /UNILOG:E:\Backuplog\PIC.log

echo Backup Folder - H:\output
Robocopy H:\output \\survive\Data_4TB\H\output /B /J /COPY:DAT /MIR /MT:4 /R:5 /W:5 /NP /UNILOG:E:\Backuplog\output.log

echo Backup Folder - H:\result
Robocopy H:\result \\survive\Data_4TB\H\result /B /J /COPY:DAT /MIR /MT:4 /R:5 /W:5 /NP /UNILOG:E:\Backuplog\result.log

echo Backup Folder - D:\ComfyUI
Robocopy D:\ComfyUI \\survive\Data_4TB\D\ComfyUI /B /J /COPY:DAT /MIR /MT:4 /R:5 /W:5 /NP /UNILOG:E:\Backuplog\ComfyUI.log

echo Backup Folder - D:\SM
Robocopy D:\SM \\survive\Data_4TB\D\SM /B /J /COPY:DAT /MIR /MT:4 /R:5 /W:5 /NP /UNILOG:E:\Backuplog\SM.log

echo End Backup - Open Backuplog Folder 
start "" explorer E:\Backuplog
  1. GitHub Pageのメニュー

menu_For_Git.bat

@echo off
REM ----- Gitpage Update Menu Batch
 
:TOP
cls
echo *****************************************************************
echo * GitPage Update                                                *
echo *                                                               *
echo *   1:GitHub Page Push                                          *
echo *   2:Hugo Server - localhost                                   *
echo *   3:Hugo        - https://yuki9902-jp.github.io/              *
echo *   4:npx pagefind --site public                                *
echo *                                                               *
echo *   0:Exit                                                      *
echo *                                                               *
echo *****************************************************************
 
:MENUSTART
 
set USR_INPUT_STR=
set /P USR_INPUT_STR="Input Number => "
 
if %USR_INPUT_STR%==0 (
  goto EXITTRAP
) else if %USR_INPUT_STR%==1 (
  goto EXECUTE_1
) else if %USR_INPUT_STR%==2 (
  goto EXECUTE_2
) else if %USR_INPUT_STR%==3 (
  goto EXECUTE_3
) else if %USR_INPUT_STR%==4 (
  goto EXECUTE_4
) else (
  echo Not Exist Number
  echo.
  goto MENUSTART
)

REM GitHub Page Push
:EXECUTE_1
call E:\Document\Command\2_ForGit\1_upload.bat
cls
goto TOP

REM Hugo Server
:EXECUTE_2
call E:\Document\Command\2_ForGit\2_previe.bat
cls
goto TOP
 
REM Hugo
:EXECUTE_3
call E:\Document\Command\2_ForGit\3_content.bat
cls
goto TOP

REM makeindex
:EXECUTE_4
call E:\Document\Command\2_ForGit\4_makeindex.bat
cls
goto TOP

:EXITTRAP
echo.
echo Exit

1_upload.bat

@echo off
D:
cd D:\for_Git\yuki9902-jp.github.io\

rem 1. 記事の追加・変更をすべてステージング(準備)
git add .

rem 2. コミット(メッセージに日付を入れると管理しやすいです)
set datetime=%date% %time%
git commit -m "Update blog: %datetime%"

rem 3. GitHubへ送信(通常はforceなしでスッと通ります)
git push origin main

echo ------------------------------------------------------
echo 更新が完了しました。GitHub Actionsを確認してください。
echo ------------------------------------------------------
pause

3. 最後に

冗長となった記事ですが、こだわりがあるとすれば、入力する数字に一貫性を持たせることです。迷わなくて済みますから。

あとは大元のmenu.batをスタートメニューに登録するか、このバッチがあるフォルダを登録するか、私はフォルダーをスタートメニューに登録しました。トップの階層にmenu.batが居て、サブフォルダに各メニューバッチと実行バッチがいます。メンテナンスも簡単に集約したわけです。