Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 1 year has passed since last update.

有能執事くん_バッチ版

Last updated at Posted at 2022-06-11

執事くん

いつも開くツールたち、いつも開くファイル。
エクスプローラを開いてせっせと探すのもよいですが、ボタンぽちでバンって開きたい。
なんなら大切なデータをバックアップしたい!
けど定時でスケジュール組むほどでも。。

そういった細かい不満を解消してくれるのがこちらのバッチ

フォルダ構成

まず記事最下部のソースを、適当な名前のバッチにして起動すれば
いろいろ作ってくれます。
・自分を再構成、自分ファイルのショトカを作成
・フォルダを以下のように構成

C Users Document/
    ├Gift/
    ├Tool/
    └World/
       ├artifact/
       ├link/
       └work/

用途はこちら

フォルダ名 用途
Gift World配下をバックアップしたものを格納するとこ
Tool バッチでは使わん。インストーラとかアプリ置いとけばよろし
World 基本ここの配下が作業場所になる
artifact バッチ本体がここにコピーされる、その他バッチを作成すれば呼び出せるようになる
link ツールのリンクを置いておけば、一括で起動できる
work バッチでは使わん。作業したファイルをここに格納しておこう。

実装機能

待機

記載の通りですが、0~3を選択することで機能を呼び出せます。
1とか入力してtab押せば、1_openまで入力できる
Animation.gif

ファイル/リンク群を起動

image.png
この状態の、test1配下すべてのショトカリンク、ファイルを開く場合
1_openを選択後に、表示される対象フォルダ名を選択すれば実行。
image.png

バックアップ

2_backupを実行することで、World配下をzipにしGift配下にコピー
Animation.gif
もちろんバージョニング。
image.png

自作機能展開

3_artifactの実行は、artifactフォルダ配下の機能を実行するためのもの。
image.png
自分(ここではJARVIS)以外のバッチファイルを選択することで、実行できる。
追加で自分お気に入りのバッチなどがあれば、この汎用的な機能を使っていただきたい。
image.png

さよなら

0_endは作業の終了を意味する。
実行中のすべてのアプリをタスクキルするので、すべての作業が保存済みの場合のみ実行しよう。
PC再起動したいがアプリが開きすぎている場合、この機能が活用できる。
※破壊的な機能なので、使用には十分に注意したい。

バッチ終了

書いてあるが、そのままEnterを押下すれば終了。
実はartifactフォルダに、tab補完のためのダミーファイルを作成するため
強制終了によって不要ファイルが残ってしまうため、この機能が存在する。

あくまで汎用的にするための作りになっているので、
フォルダ階層の縛り以外はたいへんシンプルであり、ソースも大して複雑でないようにしました。
ちなみにPC起動時にこのバッチも起動する用に、

C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

にも起動用バッチを作成するようになってます

ソースをどうぞ

jarvis.bat
@echo off
mode 100,30
call:setting_world
call:setting_this
call:calling
exit

rem ==========================================================
:setting_world
rem *********************
set THE_ROOT=C:\Users\%USERNAME%\
rem *********************
set THE_ROOT_DOCUMENT=%THE_ROOT%Documents\
set THE_ROOT_DESKTOP=%THE_ROOT%Desktop\
set WORLD=%THE_ROOT_DOCUMENT%World\
set GIFT=%THE_ROOT_DOCUMENT%Gift\
set TOOLBOX=%THE_ROOT_DOCUMENT%Tool\
set ARTIFACT=%WORLD%artifact\
set LINK=%WORLD%link\
set GIFT_TO=%Gift%Gift
set WWORK=%WORLD%work\
set LOG=[INFO] CREATE DIRECTORY: 
if not exist %ARTIFACT% mkdir %ARTIFACT% && echo %LOG%%ARTIFACT%
if not exist %LINK% mkdir %LINK% && echo %LOG%%LINK%
if not exist %WWORK% mkdir %WWORK% && echo %LOG%%WWORK%
if not exist %GIFT% mkdir %GIFT% && echo %LOG%%GIFT%
if not exist %TOOLBOX% mkdir %TOOLBOX% && %LOG%%TOOLBOX%
exit /b

:setting_this
rem *********************
set THIS_NAME=JARVIS
rem *********************
set THIS_PATH=%ARTIFACT%%THIS_NAME%.bat
set SC_PATH=%THE_ROOT_DESKTOP%%THIS_NAME%.lnk
set START_UP="C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\%THIS_NAME%_shadow.bat"
if not exist %START_UP% (
 echo @echo off>>%START_UP%
 echo start %SC_PATH%>>%START_UP%
 echo exit>>%START_UP%
 echo [INFO] CREATE LINK_FILE: %START_UP%
)
if not exist %THIS_PATH% (copy /y "%~dp0%~nx0" "%THIS_PATH%" && echo [INFO] CREATE BAT_FILE: %THIS_PATH%)
if not exist %SC_PATH% (
 powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%SC_PATH%');$s.TargetPath='%THIS_PATH%';$s.Save()"
 echo [INFO] CREATE LINK_FILE: %SC_PATH%
 echo. && echo [MESSAGE] PLEASE ADD THE KEYMAP && echo.
 echo [MESSAGE] FINISH AND DELETE THIS BAT_FILE, AND START NEW CREATED LINK_FILE %THIS_NAME%.link
 pause && start %SC_PATH% && del /f "%~dp0%~nx0" && exit
)
set SPL============================================
set trimDate=%DATE: =0%
set timestamp=_%trimDate:~0,4%_%trimDate:~5,2%_%trimDate:~8,2%
set FUNC_NM_0=0_end
set FUNC_NM_1=1_open
set FUNC_NM_2=2_bakup
set FUNC_NM_3=3_artifacts
exit /b

rem ==========================================================
:win_act
powershell -command "(new-object -com 'WScript.Shell').AppActivate('%~n0')" > nul
exit /b

:mktab
echo. && echo [%~n0] CHOOSE THE FUNCTION WITH "TAB"  ONLY ENTER WILL FINISH && echo %SPL%%SPL%
for /f "usebackq delims== tokens=2" %%a in (`set FUNC_NM`) do (echo %%a && if not exist %%a type nul>%%a && attrib +h %%a)
echo %SPL%%SPL% && echo. && echo ...
exit /b

:deltab
for /f "usebackq delims== tokens=2" %%a in (`set FUNC_NM`) do (if exist %%a attrib -h %%a && del /q %%a)
exit /b

rem ==========================================================
:calling
cls
color 0b
cd /d %ARTIFACT% && call:win_act && call:mktab
set CCC= && set/p CCC=
if errorlevel 1 (echo [%~n0] BYE && powershell sleep -s 1 && call:deltab && exit)
call:deltab
for /f "usebackq delims== tokens=2" %%a in (`set FUNC_NM`) do (if %%a==%CCC% echo. && color c && call:%CCC% && call:calling)
call:calling

rem ==========================================================
:0_end
taskkill /f /fi "imagename ne cmd.exe" /fi "imagename ne conhost.exe" /fi "imagename ne chrome.exe"
exit /b

:1_open
cd /d %LINK%
echo [%~n0] CHOOSE THE LINKS_SET_NAME WITH "TAB"  ONLY ENTER WILL FINISH && echo %SPL%
dir /ad /b /o:n && echo %SPL% && echo.
set TARGETSET= && set /p TARGETSET=
if errorlevel 1 (exit /b)
cd %TARGETSET%
if errorlevel 1 (exit /b)
for %%a in (*.*) do (echo [%~n0] START:%%a && start "" "%%a" && call:win_act)
exit /b

:2_bakup
cd %GIFT%
dir /a-d /b /o:n | findstr /v "names.txt">names.txt
powershell Get-Content -path names.txt -tail 1 >latest_name.txt
set LATEST_NAME= && set /p LATEST_NAME=<latest_name.txt
del /q %GIFT%names.txt
del /q %GIFT%latest_name.txt
echo %LATEST_NAME%| findstr /r "^.*%timestamp%_ver.*\.zip$" > nul
if not errorlevel 1 set VERSION=%LATEST_NAME:~19,-4%
set /a NEW_VER=%VERSION%+1
set GIFT_NAME=%GIFT_TO%%timestamp%_ver%NEW_VER%
mkdir %GIFT_NAME%
robocopy /s /e %WORLD% %GIFT_NAME%
powershell Compress-Archive -Path %GIFT_NAME% -DestinationPath %GIFT_NAME%.zip -Force
rmdir /s /q %GIFT_NAME%
exit /b

:3_artifacts
echo [%~n0] CHOOSE THE ARTIFACT WITH "TAB"  ONLY ENTER WILL FINISH && echo %SPL%
dir /a-d /b /o:n | findstr /v "%~n0.bat" && echo %SPL% && echo.
set TARGETFILE= && set /p TARGETFILE=
if errorlevel 1 (exit /b)
dir /a-d /b /s | findstr "%TARGETFILE%">%ARTIFACT%phantom.txt
set TARGETTOPEN= && set /p TARGETTOPEN=<%ARTIFACT%phantom.txt
del /q %ARTIFACT%phantom.txt
echo START:%TARGETTOPEN% && start %TARGETTOPEN% && echo.
exit /b

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?