リモートワーク開始
勤務している会社でリモートワークが始まりました。
会社の端末にRemoteViewでアクセスし、さらに会社で構築されているネットワーク、共有フォルダにアクセスし業務を行う人も増えたのではないかと思います。
- 膨大に増え続けるエクセルファイル
- フリーソフトやOSSの制限
- 共有フォルダの階層は増え続け、さらに遅くなるアクセス
と、ここらへんが業務のネックになってくると思います
特にパッケージ開発の現場だと資料は無限に増え
"T:\成果物\○○情報\○○成果物\○○バージョンアップ情報\○○新規案件\○○○○○○○○○○○○"
みたいなファイルパスが無限に送られてきます。
そして社内チャットで「○○.xlsがロックされてまーす」というお決まり文章
ちょっと抵抗!
限られたリソースで対抗しましょう!
コマンドプロンプトだけでどこまでできるか!
イメージ
用意するバッチファイルは以下の名前とします、(階層2フォルダの中にいっぱいエクセルファイルがある感じ)
- ひたすら業務に関係するエクセルファイルのパスが日々送られてくるので...
※業務連絡です、コーディング規約に関してはこちらのファイルを参照してください
"C:\フォルダ階層1\フォルダ階層2\いろいろなエクセルファイル群\コーディング規約.xlsx"
-
コピーします! 、、、 ※ファイルパスでなくディレクトリパスをコピー
-
[program.bat]をクリックすると...こんなメッセージ
C:\フォルダ階層1>echo off
短縮名を入力してください: コード
パスを入力してください: C:\フォルダ階層1\フォルダ階層2\いろいろなエクセルファイル群\
※イメージしにくいですが、短縮名は適当な名前(今回はコード)、パスは先ほどコピーしたディレクトリパスを入力します
-
わかりにくいですが[いろいろなエクセルファイル群]のファイル一覧が表示され
-
エクセルを読み取り専用で開くことに成功しました!無限に増えるディレクトリパスは自分のつけた「略称」で管理でき、マウスクリックポチポチポチポチポチ.....の手間を減らすことができます!
-
もちろんダイレクトに開くこともできるし、ワークスペースにコピーもできます、エクスプローラーで表示することもできます!。。。※[c][r][d][e]キーでそれぞれ切り替える
ソース概要
- generator.bat
echo off
rem 初期化
set USR_INPUT_STR_NAME=
set USR_INPUT_STR_PATH=
rem 入力要求
set /P USR_INPUT_STR_NAME="短縮名を入力してください: "
rem パス要求
set /P USR_INPUT_STR_PATH="パスを入力してください: "
echo set DIRPATH="%USR_INPUT_STR_PATH%">%USR_INPUT_STR_NAME%.bat
echo. >> %USR_INPUT_STR_NAME%.bat
echo call "program.bat" >> %USR_INPUT_STR_NAME%.bat
[説明]
入力を促し、USR_INPUT_STR_NAME に自分の命名した略称を USR_INPUT_STR_PATHにディレクトリパスを入力しています。そして、略称のファイルが生成されます(program.batをcallする役目)
- program.bat
echo off
REM 遅延読み込み
setlocal enabledelayedexpansion
set sum=0
REM txtファイルを一つずつ%%aに代入してループを回す
for %%a in (%DIRPATH%\*) do (
REM %%aに代入されたファイル名をコマンドプロンプトに書き出す sumは連番(この番号を操作ファイル指定に使う)
set /a sum=!sum!+1
set sum_name=%%a
echo !sum!
echo !sum_name!
echo.
)
REM 遅延読み込み閉じる
endlocal
REM ファイル番号指定
set /P FILENUM="ファイル番号を入力してください(ex:1.2......12.13.14)"
echo "ファイル番号は"
echo %FILENUM%
REM ファイル操作方法指定
set /P CHOICE="コピーか新規か選択してください(ex: c..コピー, r..読み取り専用, d..直接, e..エクスプローラー)"
echo "選択したのは"
echo %CHOICE%
REM 選択肢によって、ラベル切り替え
if %CHOICE%==c (
goto copyfile
)
if %CHOICE%==r (
goto read
)
if %CHOICE%==d (
goto direct
)
if %CHOICE%==e (
goto explorer
)
REM コピーの場合
:copyfile
REM 遅延読み込み
setlocal enabledelayedexpansion
set num=%FILENUM%
set sum=0
for %%a in (%DIRPATH%\*) do (
set /a sum=!sum!+1
REM 自身のディレクトリにコピーしてクローズ(上書き確認)
if !num!==!sum! (copy /-y %%a C:\tom_\workspace && goto :EOF)
)
endlocal
REM 読み取り専用
:read
REM 遅延読み込み
setlocal enabledelayedexpansion
set num=%FILENUM%
set sum=0
for %%a in (%DIRPATH%\*) do (
set /a sum=!sum!+1
REM エクセルで読み取り専用で開いてクローズ
if !num!==!sum! ("C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE" /r %%a && goto :EOF)
)
endlocal
REM ダイレクト(直接)の場合
:direct
REM 遅延読み込み
setlocal enabledelayedexpansion
set num=%FILENUM%
set sum=0
for %%a in (%DIRPATH%\*) do (
set /a sum=!sum!+1
REM エクセルでダイレクトに開いてクローズ
if !num!==!sum! ("C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE" %%a && goto :EOF)
)
endlocal
REM 展開の場合
:explorer
start "" "%DIRPATH%"
goto :EOF
[説明]
ざっくりとした流れを説明すると、
DIRPATHに入ったディレクトリパスのファイル一覧を1~の連番で表示し、ユーザーにどのファイルを選択するかを促します
ユーザーが番号を入力すると
それに対しどのアクションをするのかを促し、
該当のブロックの処理を実行します。※[:copyfile][:read][:direct][:explorer]のどれか
-
[c]...「workspace」フォルダにコピーします(ネットワークに負担かけたくないときに便利)
-
[r]...「読み取り専用」で開きます(言わずもがな、便利)
-
[d]...「ダイレクト」に開きます(直接編集したいときに)
-
[e]...「エクスプローラー」で開きます(それ以外の操作をしたいときに※リネーム等)
-
(生成された)コード.bat
set DIRPATH="C:\フォルダ階層1\フォルダ階層2\いろいろなエクセルファイル群\"
call "program.bat"
[説明]
ただ単にprogram.batを呼ぶためのファイルです
メリット
- 読み取りか、ダイレクトか、等を最初に選べるので、そういったトラブルの加害者になることがなくなりましたw
- ファイルにその場で「名称(略称)」がつけられるので、用途に分けた整理が簡単になりました...※後で名称も変更可能だし
- エクスプローラーを使用せずに該当フォルダにたどり着けるので、ネットワーク遅延がかなり改善されます
- そのフォルダを開かずとも、デフォルトの第一挙動が「フォルダのファイル一覧を表示する」ことなので、その分のステップが早いです
- 今回は、エクセルを使ってますが、[他の実行ソフト.exe -optin] にすれば他のソフトでも応用可能です
デメリット
- ファイル監視ツールはないので、エクセルパスが変更されると路頭に迷います
- フローにエラーハンドリングが無いので、操作をミスるとやり直しです
やってみて
一般的なファイラーなら当たり前に備わってる機能を頑張って実装してみました。
ファイラー、ランチャーもどき?
batファイルはパスを通せば、さらにプログラマブルに使えます!
あんまり需要ないのも事実ですが、改良の余地はありそうです!自分的にはこれ無しでは業務やる気にならないくらい活用しています!