事象発生日:2017-04-13
記事公開日:-
アクセス数:229202
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 (※公開されることはありません)
コメント