見出し画像

楽したい!!エンジニアが有能執事くんを作ってみた

こんにちは。
ALHの開発エンジニア、REIYAです。

さて今回はエンジニアの怠慢欲求を満たすバッチをつくってみたので共有します。


執事くん

いつも開くツールたち、いつも開くファイル。
エクスプローラを開いてせっせと探すのもよいですが、

「ボタンぽちでバンって開きたい。」
「なんなら大切なデータをバックアップしたい!」
「けど定時でスケジュール組むほどでも。。」

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

フォルダ構成

まず記事最下部のソースを、適当な名前のバッチにして起動すれば
いろいろ作ってくれます。

・自分を再構成、自分ファイルのショトカを作成
・フォルダを以下のように構成

C Users Document/
    ├Gift/
    ├Tool/
    └World/
       ├artifact/
       ├link/
       └work/
用途はこちら

実装機能

待機

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

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

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

バックアップ

2_backupを実行することで、World配下をzipにしGift配下にコピー

もちろんバージョニング。

自作機能展開

3_artifactの実行は、artifactフォルダ配下の機能を実行するためのもの。

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

さよなら

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

バッチ終了

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

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

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

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

ソースをどうぞ

@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



ALH Incについて知る


↓ ↓ ↓ 採用サイトはこちら ↓ ↓ ↓


↓ ↓ ↓ ALHについてはこちら ↓ ↓ ↓


↓ ↓ ↓ もっとALHについて知りたい? ↓ ↓ ↓