こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【VBScript】ファイルのPathを表示させる

初歩ですが、VBScriptの処理で質問させてください。
以下の処理を実現したいと思っています。

・WScript.Arguments.vbsにファイルをドラッグした際に、
ファイルのPathを表示する
・2つ以上のファイルがドラックされた場合は、
アラームを上げて処理を中断する

[WScript.Arguments.vbs]

Dim Inti
Dim oParam(1)

for Inti=0 to 1

Set oParam(Inti) = WScript.Arguments
MsgBox oParam(Inti)

next

このコードですが、他に何を追加すればよろしいでしょうか。
恐れ入りますが、回答いただければ幸いです。

投稿日時 - 2015-11-27 20:04:12

QNo.9087057

困ってます

質問者が選んだベストアンサー

No.1です。

01:Option Explicit
02:Dim c, f, strArgument
03:c = 0
04:If WScript.Arguments.Count = 0 Then
05: WScript.Echo "コマンドライン引数が指定されていません。"
06:Else
07: For Each strArgument In WScript.Arguments
08: c = c + 1
09: f = strArgument
10: Next
11: If c > 1 Then
12: MsgBox("Error")
13: Else
14: WScript.Echo f
15: End If
16:End If

07行目の説明ですが、例えばあるフォルダの中にあるすべてのファイルについて順番に調べていくプログラムを考えたとします。

01:Option Explicit
02:Dim x, y, z
03:Set x = CreateObject("Scripting.FileSystemObject")
04:Set y = x.GetFolder(".")
05:For Each z In y.Files
06: MsgBox(z.Name)
07:Next
08:Set y = Nothing
09:Set x = Nothing

このプログラムを見て頂ければ分かると思いますが、「z」に初期値という概念はなく、勝手に順番に数えてくれる、と理解してください。

だからと言って、「z」に数字が入るわけではありません(「MsgBox(z)」、何てやったらエラーになります)。

04行目の「GetFolder(".")」は、自分(プログラム)自身が存在する場所(フォルダ)です。

「y = x.GetFolder(".")」で「y」には、「D:\Program」などと、フルパスが入ってくれます。

05行目の「y.Files」、「y」フォルダにある、ファイルの数です。

そして、06行目の「z.Name」は「z」番目のファイルの名前(ファイル名)です。

このように、数が分からない繰り返し処理に「For Each ~ In ・・・」を使い、
「For i = 0 to 9」の「i」に当たるのが「~」の部分です。

従って、「strArgument」の初期値を意識する必要は全くありません、というか、気にしても意味はありません。

なお、そもそも、私、人のプログラムをコピーさせていただいたので、今考えれば、「04、05、06、16」行目は不要です。

質問者の意図しておられることは、この4行なしで実現でき、プログラムもすっきりするかと思います。

投稿日時 - 2015-12-01 21:26:09

お礼

回答ありがとうございます。
どういった処理を行っているのか、
しっかりと理解することが出来ました。

投稿日時 - 2015-12-02 23:44:10

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

そのコードに何を追加しても駄目です。自分で考えたので無く、どこかで拾ってきたのでしょうか?

Set args = WScript.Arguments
If args.Count = 1 Then
MsgBox args(0)
Else
MsgBox "エラー 複数ファイルがドロップ"
End If

投稿日時 - 2015-11-27 20:45:49

補足

回答ありがとうございます。

WScript.Arguments
のコードを教えていただいたので、
それに自分で手を加えた形でした。

投稿日時 - 2015-12-01 20:08:51

お礼

回答ありがとうございました。
問題を解決することができました。

投稿日時 - 2015-12-03 06:49:36

ANo.1

http://www.atmarkit.co.jp/ait/articles/0705/17/news121_2.html
を参照しました。

大変、申し訳ございません。
質問者のプログラムを無視してしまっていますが、結果は得られています。

なお、上記のサイトのプログラムでは、ファイルが複数あっても、順番に表示してくれます。
私は、それを、1つなら出力し、2つ以上なら「Error」と表示するように変えただけです。

Option Explicit
Dim c, f, strArgument
c = 0
If WScript.Arguments.Count = 0 Then
WScript.Echo "コマンドライン引数が指定されていません。"
Else
For Each strArgument In WScript.Arguments
c = c + 1
f = strArgument
Next
If c > 1 Then
MsgBox("Error")
Else
WScript.Echo f
End If
End If

投稿日時 - 2015-11-27 20:40:21

補足

回答ありがとうございます。

すみません、想定の動作になることは確認できました。
ただ以下のコードがどういった処理をしているのか
いまいち掴めていません。

>For Each strArgument In WScript.Arguments
> c = c + 1
> f = strArgument
> Next

strArgumentの初期値は何になるのでしょうか。

投稿日時 - 2015-12-01 20:15:04

あなたにオススメの質問