- ベストアンサー
【VBScript】ファイルのPathを表示させる
- VBScriptの処理でファイルのPathを表示させる方法について質問です。
- WScript.Arguments.vbsにファイルをドラッグした際に、ファイルのPathを表示する処理を実現したいです。2つ以上のファイルがドラッグされた場合は、アラームを上げて処理を中断するような追加の処理を教えてください。
- VBScriptでファイルのPathを表示させる方法や、複数ファイルのドラッグ時の処理について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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行なしで実現でき、プログラムもすっきりするかと思います。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10358)
そのコードに何を追加しても駄目です。自分で考えたので無く、どこかで拾ってきたのでしょうか? Set args = WScript.Arguments If args.Count = 1 Then MsgBox args(0) Else MsgBox "エラー 複数ファイルがドロップ" End If
お礼
回答ありがとうございました。 問題を解決することができました。
補足
回答ありがとうございます。 WScript.Arguments のコードを教えていただいたので、 それに自分で手を加えた形でした。
- Prome_Lin
- ベストアンサー率42% (201/470)
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
補足
回答ありがとうございます。 すみません、想定の動作になることは確認できました。 ただ以下のコードがどういった処理をしているのか いまいち掴めていません。 >For Each strArgument In WScript.Arguments > c = c + 1 > f = strArgument > Next strArgumentの初期値は何になるのでしょうか。
お礼
回答ありがとうございます。 どういった処理を行っているのか、 しっかりと理解することが出来ました。