 
		
		事象発生日:2017-04-13
記事公開日:-
アクセス数:237575
SMB/CIFSなどでのNASの共有フォルダをPC(マイコンピュータ)にマウントするバッチファイルを書いた.
また,そのときに気になった,net useとsubstについての違いもまとめる.
Microsoft Windows 10 Home (64bit)
以下のバッチファイルで,ネットワーク上の共有フォルダをV,Wドライブとして割り当てることができ,PC(マイコンピュータ)よりアクセス可能となる.
@echo off
set VER=1.1.0
title nas4.bat Ver %VER%
set DRIVE_LETTER_1=V
set DRIVE_LETTER_2=W
set PATH_1=${network_path1(\\nas\share など)}
set PATH_2=${network_path2(\\nas\temp  など)}
echo ネットワークドライブの割当を実行します.
echo.
if exist %DRIVE_LETTER_1%:\ (
	echo %DRIVE_LETTER_1%:\ はすでに使用されています.
	rem goto End
) else (
	net use %DRIVE_LETTER_1%: %PATH_1%
	if not "%ERRORLEVEL%" == "0" (
		echo 予期せぬエラーが発生しました.
		rem goto End
	)
)
if exist %DRIVE_LETTER_2%:\ (
	echo %DRIVE_LETTER_2%:\ はすでに使用されています.
	rem goto End
) else (
	net use %DRIVE_LETTER_2%: %PATH_2%
	if not "%ERRORLEVEL%" == "0" (
		echo 予期せぬエラーが発生しました.
		rem goto End
	)
)
:End
echo.
echo スクリプトを終了します.
echo 何かキーを押してください...
pause >nul
	@echo off set VER=1.1.0 title nas4-d.bat Ver %VER% set DRIVE_LETTER_1=V set DRIVE_LETTER_2=W echo ネットワークドライブの割当を解除します. echo. if not exist %DRIVE_LETTER_1%:\ ( echo %DRIVE_LETTER_1%:\ にはネットワークドライブは割り当てられていません. rem goto End ) else ( net use %DRIVE_LETTER_1%: /delete if not "%ERRORLEVEL%" == "0" ( echo 予期せぬエラーが発生しました. rem goto End ) ) if not exist %DRIVE_LETTER_2%:\ ( echo %DRIVE_LETTER_2%:\ にはネットワークドライブは割り当てられていません. rem goto End ) else ( net use %DRIVE_LETTER_2%: /delete if not "%ERRORLEVEL%" == "0" ( echo 予期せぬエラーが発生しました. rem goto End ) ) :End echo. echo スクリプトを終了します. echo 何かキーを押してください... pause >nul
Microsoft TechNetのリファレンス(,)によると,
Net use
Connects a computer to or disconnects a computer from a shared resource, or displays information about computer connections. The command also controls persistent net connections. Used without parameters, net use retrieves a list of network connections.
Subst
Associates a path with a drive letter. If used without parameters, subst displays the names of the virtual drives in effect.
とある.
net useで割り当てた場合は,再起動しても割当は保存されるが,substの場合,ログインする度に割り当て直す必要がある.
また,リファレンスにもあるように,substはパスをドライブに割り当てるのに対し,net useは共有リソースをドライブに割り当てる.そのため,substではローカル,ネットワークともに割当可能だが,net useではネットワークのみ可能である.
ためしにローカル,ネットワークそれぞれについてコマンドを実行してみた結果が以下である.
C:\>subst S: C:\Users
C:\>subst T: \\${network_address}\share
C:\>net use U: C:\Users
システム エラー 67 が発生しました。
ネットワーク名が見つかりません。
C:\>net use V: \\${network_address}\share
コマンドは正常に終了しました。
C:\>subst /d S:
C:\>subst /d T:
C:\>net use U: /delete
ネットワーク接続が見つかりませんでした。
NET HELPMSG 2250 と入力すると、より詳しい説明が得られます。
C:\>net use V: /delete
V: が削除されました。
	 
	 
	net useではローカルへの割当ができていないことがわかる.
さらに上の画像を見ると,subst(Vドライブ)では共有リソースの詳細が表示されているが,subst(Tドライブ)では"切断したネットワーク ドライブ"となってしまっている.この状態でも共有フォルダにアクセス可能だが,少し気持ち悪い.
もう一点,重要な違いがある.
リモートのサーバーに接続するためには資格情報が一致していないといけないし、デフォルトでは現在のログオン(サインイン)に利用している資格情報が使われるという事情がある。
とあるように,現在のuser/pwによって認証が行われる.
仮にNAS側にローカル側のユーザーが登録されていない場合,先程のコマンドを実行すると以下のようになる.
C:\>subst S:  \\${network_address}\share
パスが見つかりません - \\${network_address}\share
C:\>net use Z: \\${network_address}\share
\\${network_address}\share のパスワードが無効です。
'${network_address}' のユーザー名を入力してください:
${network_address} のパスワードを入力してください:
コマンドは正常に終了しました。
C:\>subst T:  \\${network_address}\share
	このように,net useではここで認証を行うことができる.
なお,substでも,net useやエクスプローラで共有リソースにアクセスし,認証させた後であれば割当可能となる.
最後に,よくミスるので,バッチファイルのTipsを一つ書き残しておく.
setによる変数代入の際は,=前後にスペースを入れないようにすること.
詳細は以下の実行結果を参照.
C:\>set VAR = hoge C:\>echo aa%VAR%bb aa%VAR%bb C:\>echo aa%VAR %bb aa hogebb C:\>set VAR=hoge C:\>echo aa%VAR%bb aahogebb C:\>set VAR="hoge" C:\>echo aa%VAR%bb aa"hoge"bb
名前
Email (※公開されることはありません)
コメント