リモートで会社の端末で作業しているときに役立ちそうなファイル操作バッチ

# リモートワーク開始
勤務している会社でリモートワークが始まりました。
会社の端末にRemoteViewでアクセスし、さらに会社で構築されているネットワーク、共有フォルダにアクセスし業務を行う人も増えたのではないかと思います。

+ 膨大に増え続けるエクセルファイル
+ フリーソフトやOSSの制限
+ 共有フォルダの階層は増え続け、さらに遅くなるアクセス

と、ここらへんが業務のネックになってくると思います
特にパッケージ開発の現場だと資料は無限に増え
"T:\成果物\○○情報\○○成果物\○○バージョンアップ情報\○○新規案件\○○○○○○○○○○○○"
みたいなファイルパスが無限に送られてきます。
そして社内チャットで「○○.xlsがロックされてまーす」というお決まり文章

#ちょっと抵抗！
限られたリソースで対抗しましょう！
コマンドプロンプトだけでどこまでできるか！
#イメージ
用意するバッチファイルは以下の名前とします、(階層２フォルダの中にいっぱいエクセルファイルがある感じ)

![フォルダ概要.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187949/e1b08852-d650-35a4-eb8d-2e282796b7fe.jpeg)


+ ひたすら業務に関係するエクセルファイルのパスが日々送られてくるので...

``` 
※業務連絡です、コーディング規約に関してはこちらのファイルを参照してください
"C:\フォルダ階層１\フォルダ階層２\いろいろなエクセルファイル群\コーディング規約.xlsx"
 ```
+ コピーします！ 、、、 ※ファイルパスでなくディレクトリパスをコピー

+ [program.bat]をクリックすると...こんなメッセージ


``` 
C:\フォルダ階層１>echo off
短縮名を入力してください: コード
パスを入力してください: C:\フォルダ階層１\フォルダ階層２\いろいろなエクセルファイル群\

 ```
※イメージしにくいですが、短縮名は適当な名前(今回はコード)、パスは先ほどコピーしたディレクトリパスを入力します


+ 入力すると同一フォルダに「コード.bat」というファイルが生成されました
![コード_生成.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187949/c4b9feca-8b76-f451-404a-00789e8cc656.jpeg)


+ 「コード.bat」ファイルをクリックするとこんな感じ
![プログラムオープン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187949/01b547d6-3715-be4a-299d-d0649029585c.jpeg)

+ わかりにくいですが[いろいろなエクセルファイル群]のファイル一覧が表示され
+ [３][ r ]をそれぞれ入力してます
![読み取り専用.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187949/9be5fc5d-81c1-9805-efa8-5dafc9a2dfbf.jpeg)
+ エクセルを読み取り専用で開くことに成功しました！無限に増えるディレクトリパスは自分のつけた「略称」で管理でき、マウスクリックポチポチポチポチポチ.....の手間を減らすことができます！
+ もちろんダイレクトに開くこともできるし、ワークスペースにコピーもできます、エクスプローラーで表示することもできます！。。。※[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に入ったディレクトリパスのファイル一覧を１～の連番で表示し、ユーザーにどのファイルを選択するかを促します
ユーザーが番号を入力すると
それに対しどのアクションをするのかを促し、
該当のブロックの処理を実行します。※[:copyfile][:read][:direct][:explorer]のどれか
+ [c]...「workspace」フォルダにコピーします(ネットワークに負担かけたくないときに便利)
+ [r]...「読み取り専用」で開きます(言わずもがな、便利)
+ [d]...「ダイレクト」に開きます(直接編集したいときに)
+ [e]...「エクスプローラー」で開きます(それ以外の操作をしたいときに※リネーム等)



+ (生成された)コード.bat

``` 
set DIRPATH="C:\フォルダ階層１\フォルダ階層２\いろいろなエクセルファイル群\"
 
call "program.bat" 

 ```
[説明] 
ただ単にprogram.batを呼ぶためのファイルです

# メリット
+ 読み取りか、ダイレクトか、等を最初に選べるので、そういったトラブルの加害者になることがなくなりましたｗ
+ ファイルにその場で「名称(略称)」がつけられるので、用途に分けた整理が簡単になりました...※後で名称も変更可能だし
+ エクスプローラーを使用せずに該当フォルダにたどり着けるので、ネットワーク遅延がかなり改善されます
+ そのフォルダを開かずとも、デフォルトの第一挙動が「フォルダのファイル一覧を表示する」ことなので、その分のステップが早いです
+ 今回は、エクセルを使ってますが、[他の実行ソフト.exe -optin] にすれば他のソフトでも応用可能です

# デメリット
+ ファイル監視ツールはないので、エクセルパスが変更されると路頭に迷います
+ フローにエラーハンドリングが無いので、操作をミスるとやり直しです

# やってみて
 一般的なファイラーなら当たり前に備わってる機能を頑張って実装してみました。
ファイラー、ランチャーもどき？
batファイルはパスを通せば、さらにプログラマブルに使えます！
あんまり需要ないのも事実ですが、改良の余地はありそうです！自分的にはこれ無しでは業務やる気にならないくらい活用しています！