- ベストアンサー
VBS : 正常に動作しないのはなぜ?
複数ファイルのファイル名を変更する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
- みんなの回答 (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のファイル名がさらに変更されますけど とてもはずしてそうです・・・・
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
実際に試していないので、関係のない指摘かもしれませんが、 >For Each f1 In f.Files > e f1 の部分 f1 は、ファイルオブジェクトであってファイルパスではないので、 e f1.Path とすべきではないですか