ネットワークドライブに纏めてログインするバッチ

##概要
ネットワークドライブの割り当てがリセットされてしまった時に、複数のファイルサーバにいちいちログインするのが面倒だなと感じる事があります。

本バッチファイルは、ネットワークフォルダ（ファイルサーバ上のディレクトリ）をドライブ文字にまとめて割り当てます。

[ファイル一覧化バッチ](https://qiita.com/X-IA/items/754483076c96ba932ef8)はネットワークフォルダ内のファイルを一覧にしておくものですが、
コマンドプロンプトの仕様上、ネットワークパス (\\\\server\path\) をカレントディレクトリに指定できません。そのため、このバッチを使用するなどしてドライブ文字に割り当てておく必要があります。

##環境
Windows 10, Windows 7

##使用方法
* 割り当て対象のディレクトリパス及びドライブ文字を記述したリストファイル（CSVファイル）を、"NWdrv.bat" ファイルにDrag&Dropします。
* ドラッグが難しい場合は、そのまま起動するとファイルパスの入力を求められるため、リストファイルをプロンプト画面にD&Dして [Enter]キーを押下します。

* CSVファイルの例を同梱しましたので、参考にしてください。 
 * 1カラム目に#を含めると、その行の処理をスキップします。
 * 1カラム目に何も記述しないとエラーになります。netとでも記述しておきましょう。
 * ログインが必要な場合は、4カラム目にユーザー名を記述して下さい。
 * バッチ実行後にパスワードを訊かれますが、リストに何行あってもパスワードの入力は1回のみです。ファイルサーバによってログインパスワードが異なる場合は、リストを分けて実行して下さい。
 * LDAP連携のためにドメイン名の指定が必要な場合は、5カラム目に記述して下さい。
 * 一応、"/delete" オプションをリストに記述する事で、解除する事も可能な作りにしてあります。

##ソースファイル
「かんたん生成」するには、[**B642File.bat**](https://qiita.com/X-IA/items/373acb6c7ae984c4c63f)を起動して本ページ全体のテキストをコピペして下さい。
その後、生成したZIPファイルを解凍して任意の場所へ配置して下さい。

興味ある方は、以下のコードをご覧ください。

###コード

```:NWdrv.bat
@ECHO OFF
COLOR 0A
SETLOCAL ENABLEDELAYEDEXPANSION

ECHO ############## NWdrv.bat ###############
ECHO # Assigning the network drives         #
ECHO #                      iteration batch #
ECHO #                                      #
ECHO #   Last update: 2019-05-31            #
ECHO #   Author: Y. Kosaka                  #
ECHO #   See the web for more information   #
ECHO #   https://qiita.com/x-ia             #
ECHO ########################################

SET tScr=%~n0
SET fList="%1"
SET extLog=.log

IF %fList% EQU "" (
  ECHO Current directory = %~dp0
  ECHO.
  ECHO NetworkPath/Option,DriveLetter/Option,UserName,DomainName
  ECHO Enter the file includes parameters for connecting network folder like above.
  SET /P fList=filepath= 
) ELSE (
  ECHO Input file:
  ECHO %fList%
)

ECHO "%fList%" | FIND /I "\" >NUL
IF ERRORLEVEL 1 SET fList=%~dp0%fList%
SET fList="%fList:"=%"

ECHO Enter your password.
ECHO >nul
ECHO +5LQ+4U92JZa4GPBAx5oHOleFoTpBgFV1uTLS5Phz3ZG+y6P0SdVfBJAHu7+3hyA^
HQAAAFdpbkVudlNldC9Bc3NpZ25EcnYtc3Vic3QuYmF04OmrYSq5eHSOzj+5Szlr^
ICJ1j56sFM5xEvA+Cx1V8qQJlXTdfp6teh+otW4bLTAUL1zIkcb/hu1P1+QGql0q
SET /P pw=P0urwc/QRqNcChrQd1gjzNF7Ap9MMiMQiANAGvn6M262+
CLS

:count
FOR /F "usebackq skip=1 tokens=1-2 delims=," %%a IN (%fList%) DO (
  SET /A nLine=nLine+1
)
SET nLineMax=%nLine%
SET nLine=0

:iterate
FOR /F "usebackq skip=1 tokens=1-5 delims=," %%a IN (%fList%) DO (
  SET /A nLine=nLine+1
  TITLE %tScr% !nLine!/%nLineMax%
  ECHO %%a %%b %%c %%d %%e

  SET tPath="%%~b"
  SET tDrv=%%~c
  SET uid=%%~d
  SET tDomain=%%~e

  SET flag=.
  ECHO "%%a" | FIND /I "#" >NUL
  IF NOT ERRORLEVEL 1 SET flag=#

  IF !flag! EQU # (
    ECHO %date% %time%	%tScr%	Skipped	!tDrv!	!tPath!	!Domain!	!uid!>>%~dpn0%extLog%
    ECHO Skipped %tPath% -^> %tDrv%
  ) ELSE (
    CALL :netuse
  )

)
PAUSE
EXIT /B


:netuse
ECHO %tDrv% | FIND /I "/" >NUL
IF NOT ERRORLEVEL 1 (
  CALL :disconnect
) ELSE (
  IF "%tPath:~1,1%." EQU "/." (
    CALL :deldrv
  ) ELSE (
    CALL :connect
  )
)
ECHO %date% %time%	%tScr%	!err!	!tDrv!	!tPath!	!Domain!	!uid!>>%~dpn0%extLog%
EXIT /B


:disconnect
IF %tPath:~1,1%. NEQ \. SET tPath="\%tPath:"=%
IF %tPath:~1,2%. NEQ \\. SET tPath="\%tPath:"=%
IF %tPath:~-2,1%. EQU \. SET tPath="%tPath:~0,-2%
ECHO Disconnecting %tPath%

NET USE %tPath% %tDrv%
SET err=%ERRORLEVEL%
EXIT /B


:deldrv
SET tDrv=%tDrv:~0,1%:
ECHO Deleting %tDrv%

NET USE %tDrv% %tPath%
SET err=%ERRORLEVEL%
EXIT /B


:connect
SET tDrv=%tDrv:~0,1%:
IF %tPath:~1,1%. NEQ \. SET tPath="\%tPath:"=%
IF %tPath:~1,2%. NEQ \\. SET tPath="\%tPath:"=%
IF %tPath:~-2,1%. EQU \. SET tPath="%tPath:~0,-2%"
IF %tDomain%. NEQ . SET tDomain=%tDomain%\
ECHO %tPath% -^> %tDrv%

IF %uid%. EQU . (
  NET USE %tDrv% %tPath%
) ELSE (
  NET USE %tDrv% %tPath% %pw% /USER:%tDomain%%uid%
)
SET err=%ERRORLEVEL%
EXIT /B
```

###バイナリ (Base64 encoding)

```
NWdrv.zip
---
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
aXN0LmNzdlBLBQYAAAAAAgACAHIAAAD1BQAAAAA=
---
```