バッチファイルを集約していった
1, 始めに
Raycastてどないなもんやんねん?とGeminiに聞いたら、私にお薦めしますと言うので、意見交換をしてみた。
Alt + Spaceで立ち上がって、文字を打ち込んでいったら随時検索してキーワードにヒットするアプリを表示するランチャーなんだけど、見た目のこだわり、AI搭載、招待制っていうなんか、胡散臭い匂いがしているんだよね。そりゃmacOSの欠点を補うためのツールだからそうなんだろうと、そしておしゃれさを優先するユーザーに広げる目的があるんだろうと納得するもんだった訳ですよ。
で、Windowsには標準で最強のランチャー「スタートメニュー」とCtrl + Rがある訳ですよ。キー入力をインターセプトされることもなく、無駄なリソースを消費することもなく、専用のキーまで持った最高のランチャーが。私がランチャーに求めるのはシンプルさと簡潔さ、寧ろ見えなくても良いんですわ。
自分で仕込んでいるバッチファイルをもっと使いやすく出来ないか、管理者権限で起動できないかということを模索して居る話をして、当初はショートカットを作成して、プロパティーから「管理者権限で実行」を設定して、さらにはコマンドプロンプトで実行させるために、ショートカットにリンク先に「C:\Windows\System32\cmd.exe /k “"」を追加していたわけですが、ショートカットをあちこちに増やすのもスマートじゃないじゃない。
するとGeminiからバッチファイルの中で管理者権限でコマンドプロンプトを開いて自分自身を実行させるコマンドを作れますよ。と返事が返ってきたわけで。
2. コマンドプロンプトの整備
- すべてのコマンドを統合するメニュー
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
- 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
- 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
- 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が居て、サブフォルダに各メニューバッチと実行バッチがいます。メンテナンスも簡単に集約したわけです。