MGreen
@MGreen (M Green)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

バッチファイルで、Net useとフォルダアドレスベタ打ち、何が違うか知りたい

バッチファイルで、Net useとフォルダアドレスベタ打ち、何が違うか知りたい

【背景】
PC(1)のフォルダs (Source) からPC(2)のフォルダd (Destination) に.txtファイルがあったらコピーするバッチコマンドを、PC(1)上に作りたいです。何秒かごとにTask schedulerで動かす予定です。
PC(1)からPC(2)の”d"フォルダにアクセスするには、最初はUser IDとPasswordを求められますが、一度アクセスしてしまえばコマンドにID/PWをいれなくても、あるいはnetuseコマンドを使わなくても、入れてしまうように見えます。

【質問】
ここで、net useコマンドによる「ドライブマウント」をバッチコマンドの中に入れたほうがよいか、不要かがわからず、どなたかご教示いただけると幸いです。

以下のコマンド例 AとBをご覧ください。


(A) 昔の同僚が提案してくれたコード:

set s=C:Source
set d=L:Desitination
set Drive="\\169.xxx.xxx.xxx\Destination"
set d_user="user"
set d_pass="password"

rem ドライブマウント
net use D: %Drive% /user:%d_user% %d_pass%

rem 3. Move file
if exist %s% move %s%\*.txt %d%\text.txt

rem 3. Drive unmount
net use D: /d /y

※所感:PC(2)のDestinationフォルダは、PC(1)から見ると既に常時にDドライブとしてマウントされていて、わざわざコマンドでnet useをする意味があまりわからない。


(B) 自分が考えるコード:

set s=C:\Source
set d=\\169.xxx.xxx.xxx\Destination
if exsit %s% copy %s%\*.txt %d%\test.txt

※所感:これでも十分動くのでこれで良い気がする。


目的の詳細:既存の(A)のようなコードを、さらに機能追加したい (さらに別の場所に、CopyだけではなくMoveも行うなど) ですが、元のAのコードもBのように作り変えてしまってもよいか、悩んでいます。

(A)のようなバッチファイルコマンドを作った同僚はもうやめてしまっていて、なぜnetuseコマンドを入れたのかもう聞けない状態です。

そもそも、Windowsのネットワークドライブにおいて、ドライブマウントのメリットが何なのかも、勉強不足であまりわかっておりません。(単に D: とか L: とかは、わかりやすいなとは思いますけど、システム上から考えると何がメリットなんだろう、と。)

以上、net useコマンドや、ドライブマウント、Windowsのバッチファイルコマンドに詳しい方がいましたら是非ご教示お願いします。

 

0

3Answer

(A)のようなバッチファイルコマンドを作った同僚はもうやめてしまっていて、なぜnetuseコマンドを入れたのかもう聞けない状態です。

本当の理由は作った人にしかわかりませんが

  • 処理の前に、確実にドライブをマウントしておきたかった
  • マウントする時のユーザーとパスワードも自動入力したかった(自分がいなくても処理が動くように)
  • 処理が終わったら、ドライブをアンマウントしておきたかった
  • PCを再起動しても変わりなく処理できるようにしたかった

という理由だと私は推測します。

Windowsのネットワークドライブにおいて、ドライブマウントのメリットが何なのかも

今の時代には、メリットは、ないかもしれません。

net useでD:とかL:にマウントする方法は、Windowsが登場する前のMS-DOS
の時代からある方法です。(LAN Managerというものです。)

\\169.xxx.xxx.xxx\Destination のような指定は(UNC:Universal Network Convention)といいますが、これが登場したのがWindows 95からです。
(とは言っても30年前)

古い時代に諸先輩たちが作ったバッチファイルの書き方を伝承しているために、この方法が使われているのかもしれません。

私にはわからない、他のメリットがあるのかもしれません。

0Like

※所感:これでも十分動くのでこれで良い気がする。

転ばぬ先の杖という言葉がありまして、自動で定期的動く処理は、想定される問題はできるだけ回避するように作っておくと幸せになれます。

すでにマウントされている状態で同じものをマウントしても問題が無いのであれば、入れておこうと思ったとしても不思議ではありません。

それがいやなら
・D: に目的のものがマウントされているかどうか確認する。
・マウントされていれば続行
・違うものがマウントされていれば、マウントを外す
・マウントされていなければマウントする
というような丁寧な処理にするのがいいのではないかと思います。

0Like

Aのコードは堅実な作りです。
元々バッチはUNCパスをサポートしていませんし、今でも一部のコマンドではサポートしていません。
場合によってユーザー認証を要求されることがありますから、UNCパスだけではどうすることもできません。
その問題にぶち当たったとき、このコードの価値が自然と分かるはずです。

できるならPowerShellに置き換えるのもありです。

0Like

Your answer might help someone💌