質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

4回答

11514閲覧

Zドライブがネットワークドライブに割り当てられている時の分岐処理

ionn

総合スコア13

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2018/04/25 15:16

編集2018/04/26 08:13

Zドライブがネットワークドライブに割り当てられている場合、切断処理を実行させたいのですが、どのように分岐処理を入れればいいか困っています。

教えてください、お願いします。

VBS

1Option Explicit 2On Error Resume Next 3 4Dim objWshNetwork ' WshNetwork オブジェクト 5Dim strDrive ' ドライブ名 6 7Set objWshNetwork = WScript.CreateObject("WScript.Network") 8 strDrive = "Z:" 9 10If ネットワークドライブZが繋がっている Then 11 WScript.Echo strDrive & " ドライブを切断しました。" 12 objWshNetwork.RemoveNetworkDrive strDrive, True, True 13End If 14 15Set objWshNetwork = Nothing

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

その前の行でRemoveNetworkDriveしているので、ifの時点ではつながっていないのでは?

#質問修正への対応
RemoveNetworkDriveするのに事前に調べる必要はありません。

VBScript

1Option Explicit 2 3Dim objWshNetwork ' WshNetwork オブジェクト 4Dim strDrive ' ドライブ名 5 6Set objWshNetwork = WScript.CreateObject("WScript.Network") 7 strDrive = "Z:" 8 9On Error Resume Next 10objWshNetwork.RemoveNetworkDrive strDrive, True, True 11On Error Goto 0 12If Err.Number = 0 Then 13 WScript.Echo strDrive & " ドライブを切断しました。" 14ElseIf Err.Number = -2147022646 Then 15 'WScript.Echo strDrive & " ドライブは接続されていませんでした" 16Else 17 'その他のエラー(ネットワークのエラーなど) 18 Err.raise Err.Number 19End If 20 21Set objWshNetwork = Nothing

投稿2018/04/25 17:09

編集2018/04/26 13:05
otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ionn

2018/04/26 08:18 編集

回答ありがとうございます。 すみません、コードが間違っていたので修正しました
otn

2018/04/26 12:54

つながっていないドライブに対して、RemoveNetworkDrive を行っても害は無いので、 on error resume next した状態であれば、確認せずに RemoveNetworkDrive してかまいません。 追記しておきます。
guest

0

ttyp03さんの回答に変数宣言を追加すれば問題なさそうですが、別案を。

邪道(ネットワークドライブかどうかを判定していない)ですが、シンプルにやる場合の一つの手として。

vbscript

1'... 2strDrive = "Z:" 3Dim fso 'As Scripting.FileSystemObject 4Set fso = CreateObject("Scripting.FileSystemObject") 5 6If fso.FolderExists(strDrive) Then 7 WSH.Echo strDrive & " ドライブを切断しました。" 8 objWshNetwork.RemoveNetworkDrive strDrive, True, True 9End If 10'...

投稿2018/04/26 11:10

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ionn

2018/04/26 11:22 編集

回答ありがとうございます。 ただ、その場合だとZドライブが割り当ててある場合どうしても切断出来ない ようでした。
imihito

2018/04/26 11:30

私の環境(Windows 10 Pro 64bit)では私のコードもttyp03さんのコードも正常に動作しました(ファイル等を開いていても強制切断) ionnさんの環境が特殊な可能性は無いでしょうか?
guest

0

On Error Resume Nextしているので、無条件に切断でも良いのでは。

投稿2018/04/26 04:16

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ionn

2018/04/26 08:28

回答ありがとうございます。 無条件に切断の処理を入れてしまうとその後の入れる予定のErr.Numberでの分岐処理でエラーが切断されていない状態で実行したから起こったのか、別のエラーで起こったのかが分からなくなってしまうので今回、このような質問をさせて頂きました。
guest

0

ベストアンサー

ネットワークドライブの一覧はEnumNetworkDrivesで取得できるようなので、取得されたコレクション中にZドライブがあるかないかで判断できそうです。
以下は動作未確認ですが、こんな感じにすればよいのではないでしょうか。

VBS

1Option Explicit 2On Error Resume Next 3 4Dim objWshNetwork ' WshNetwork オブジェクト 5Dim strDrive ' ドライブ名 6 7Set objWshNetwork = WScript.CreateObject("WScript.Network") 8 9strDrive = "Z:" 10 11' ネットワークドライブ確認 12Set oDrives = objWshNetwork.EnumNetworkDrives 13Dim zmap 14zmap = False 15For i = 0 to oDrives.Count - 1 Step 2 16 If oDrives.Item(i) = strDrive Then 17 zmap = True 18 Exit For 19 End If 20Next 21 22' 接続されていたら切断する 23If zmap Then 24 objWshNetwork.RemoveNetworkDrive strDrive, True, True 25 WScript.Echo strDrive & " ドライブを切断しました。" 26End If 27 28Set objWshNetwork = Nothing 29

投稿2018/04/26 00:54

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ionn

2018/04/26 08:18 編集

回答ありがとうございます。 こちらのコードを試してみましたが、繋がっていないにもかかわらず If zmap Then objWshNetwork.RemoveNetworkDrive strDrive, True, True WScript.Echo strDrive & " ドライブを切断しました。" End If この処理が実行されてしまうようでした
ttyp03

2018/04/26 08:20

私の環境だとWScript.Networkが生成できなかったので、もしかしたら同じ現象が発生していないでしょうか。 それだとおかしな動きになるかもしれません。 oDrives.Countの値を出力したりしてみて、確認してみてください。
ttyp03

2018/04/26 08:53

確認ですが、そもそもRemoveNetworkDriveで切断ってできてますか?
sazi

2018/04/26 09:21

>ionn さん On Error Resume Nextはコメントにしてのデバッグをお薦めします。
ionn

2018/04/26 11:29

変数宣言がない状態で行っていたので不具合があったようでした。 無事に出来たのでベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問