激凹みから立ち直る方法

複数ファイルのファイル名を変更するVBSを作りましたが、正常に動作しません。
複数のファイルが入ったフォルダをVBSファイルにドラッグアンドドロップすると、
ファイル名が正しく変更される場合と、予期しないファイル名になってしまう場合があります。
フォルダ内のファイル数が多いと、ファイル名が異様に長いものになってしまいます。

どこが悪いのかをご指摘いただければ幸いです。
よろしくお願いいたします。


'ドロップされたファイルの情報を取得
Set arg=WScript.Arguments

'店IDの入力ウィンドウを表示
ShopID = InputBox("店IDを入力してください。","店IDの追加","")
If ShopID = "" Then
  WScript.Quit
End If

Set fs=CreateObject("Scripting.FileSystemObject")
For Each item0 In arg
  If fs.FileExists(item0) Then
    e(item0)
  ElseIf fs.FolderExists(item0) Then
    r fs.GetFolder(item0)
  End If
Next
WScript.Quit

Sub r(f)
  For Each f1 In f.Files
    e f1
  Next
  For Each f1 In f.SubFolders
    r f1
  Next
End Sub

'ファイル名の頭に店IDを付ける
Sub e(FilePth)
  NewName = ShopID & "_" & fs.GetFileName(FilePth)
  Set src = fs.GetFile(FilePth)
    src.Name = NewName
End Sub

A 回答 (2件)

ちょっと気になったので。

はずしてたらごめんなさい。
例えば次のようなフォルダ構成をドラッグアンドドロップしたとします。
C:\AAA\BBB\f1.txt
このとき、argには
C:\AAA
C:\AAA\BBB
C:\AAA\BBB\f1.txt
と入るのでしょうか?
もし入るのならf1.txtの名前が期待したものにならにですよね?
先にargに(順番に寄りますが)
arg(0)="C:\AAA\BBB\f1.txt"
arg(1)="C:\AAA\BBB"
arg(2)="C:\AAA"
と入ってたら、
arg(0)でe(FilePath)を呼んでf1.txtの名前が変更されて、
次にarg(1)でr(f)関数が呼ばれて、その下のファイルをサーチしてf1.txtのファイル名がさらに変更されますけど

とてもはずしてそうです・・・・
    • good
    • 0

実際に試していないので、関係のない指摘かもしれませんが、


>For Each f1 In f.Files
>  e f1
の部分 f1 は、ファイルオブジェクトであってファイルパスではないので、
e f1.Path
とすべきではないですか
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!