ネットワークドライブの永続割り当て
コマンドラインからネットワークドライブの割り当ては、通常 net use を使います。
ですが、これだけでは PC 再起動の度に割り当て情報が消えてしまいます。
/persistent:yes オプションを付ければドライブの割り当て自体は再起動後も残りますが、今度は資格情報が保持されず、再接続時にエラーになることがあります。
エクスプローラでは、次の操作で割り当てと資格情報の保存を同時に行えます。
- エクスプローラを開き、ネットワークドライブの割り当てを行う。
- ネットワークパスを指定し、ドライブを割り当てる。
- 資格情報を入力し、資格情報の保存をクリックする。
このページでは、上記の操作と同等の処理を、バッチファイルで表現する方法を分かりやすくご紹介いたします。
ソースコード
まず結論から。以下のコードで実現できます。
cmdkey /add:%server% /user:%user% /pass:%password%
net use O: %directory% /persistent:yes
| 変数名 | 内容 |
|---|---|
| %server% | 接続するサーバ名または IP アドレス(\〇〇… の〇〇の部分) |
| %user% | 資格情報(ユーザ名) |
| %password% | 資格情報(パスワード) |
| %directory% | 割り当てるネットワークパス(例: \server\share) |
上記を当てはめて実行することで、ネットワークドライブの割り当てと資格情報の両方が、再起動後も保持されます。
バッチファイルにパスワードを平文で記述すると、ファイルを閲覧できる人に漏れてしまいます。 共有フォルダや誰でも閲覧できる場所には置かず、アクセス権の管理を徹底してください。
cmdkey、 net use の使い方
前述したサンプルでは、再起動しても消えないネットワークドライブの割り当て方として、cmdkeyコマンドとnet useコマンドを使用しました。
それぞれのコマンドの役割について説明します。
cmdkey
cmdkeyコマンドは、Windows 資格情報マネージャーに保存された資格情報を、追加・一覧表示・削除するためのコマンドです。
ファイルエクスプローラーからサーバーに初めてアクセスした際、資格情報の入力を求められることがあります。
この入力と同じ役割を持つのがcmdkeyコマンドです。
cmdkey のオプション
cmdkey /add:%server% /user:%user% /pass:%password%
| オプション | 内容 |
|---|---|
| /add | IP アドレス、またはコンピュータ名 |
| /user | 接続先のアカウント名 |
| /pass | 接続先のパスワード |
保存済みの資格情報はcmdkey /listで確認でき、cmdkey /delete:サーバ名で削除できます。
net useコマンド
net useコマンドは、ネットワークドライブの割り当て・切断・一覧表示を行うためのコマンドです。
net use のオプション
net use %drive_letter% %directory% %password% /user:%user% /savecred /persistent:yes
| 変数名 | 内容 |
|---|---|
| 最初の引数 | 割り当てるドライブレター(システムドライブの C: にあたる部分) |
| 2 つ目の引数 | ネットワークドライブとして割り当てたいパス(\\server\shareの形式) |
| 3 つ目の引数 | 接続先のパスワード |
| /user | 接続先のアカウント名 |
| /savecred | 資格情報を保存する。cmdkeyを使う場合は不要。 |
| /persistent:yes | 割り当てを次回ログオン以降も自動的に復元する(noを指定すると復元しない)。 |
ネットワークドライブを割り当てる具体例
ここからは、実際に想定されるケースを例に、ネットワークドライブを割り当てる方法をご紹介します。
ユーザー名とパスワードをユーザーに入力させる
バッチファイルに直接ユーザー名とパスワードを記述するのは、セキュリティ上好ましくありません。
バッチファイル実行時に、ユーザー名とパスワードを入力させたい場合は、以下のように実装します。
@echo off
setlocal
rem ユーザーからユーザー名とパスワードを入力してもらう
set /p user=ユーザー名を入力してください:
set /p password=パスワードを入力してください:
rem ユーザー名とパスワードを使って資格情報を追加
cmdkey /add:server_name /user:%user% /pass:%password%
net use O: \\server_name\directory /persistent:yes
endlocal
なお、set /pで入力したパスワードは画面にそのまま表示されます。周囲の目が気になる場合は、net useのパスワードに*を指定してプロンプトで入力する方法もあります。
ユーザーからの入力を受け取るsetコマンドについては、以下のページで詳しく説明しています。
複数の IP アドレスに対して、ネットワークドライブを割り当てる
自宅や社内に複数のサーバーや NAS がある場合、同時に複数のネットワークドライブを割り当てたいケースがあると思います。
そのような場合、バッチファイルを 2 つ用意し、1 つ目に今回ご紹介したコード、2 つ目に実際に起動するコードを記述することで、シンプルに実現することができます。
ここでは 1 つ目のバッチファイルをnetwork.cmd、2 つ目のバッチファイルをstart.cmdとして実装します。
@echo off
setlocal
cmdkey /add:%1 /user:%2 /pass:%3
echo %1の資格情報を追加しました
net use %4: %5 /persistent:yes
echo %4ドライブへ%5を割り当てました
endlocal
@echo off
setlocal
call network.cmd server_name1 username1 password1 O: \\server_name1\directory1
call network.cmd server_name2 username2 password2 P: \\server_name2\directory2
call network.cmd server_name3 username3 password3 Q: \\server_name3\directory3
call network.cmd server_name4 username4 password4 R: \\server_name4\directory4
endlocal
callコマンドについて詳細を知りたい方は、以下の記事をご覧ください。
上記のコードを実行することで、4 つのネットワークドライブへ一括で割り当てることができます。
実行すると、以下のように表示されます。
うまくいかないときは
システム エラー 1219 が表示される
同じサーバーに別のユーザー名で既に接続している場合、net useは「システム エラー 1219」で失敗します。
次のコマンドで既存の接続を切断してから、再度実行してください。

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超 入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
資格情報を変更したい
cmdkey /addを同じサーバー名で再度実行すると、保存済みの資格情報が上書きされます。