2016-10-14 7 views
0

私はVBSスクリプティングには新しく、以前はExcel VBAでいくつかのことをやっていました。今私は、ファイルのパス名(それぞれ4文字に切り捨てられた)と単一のファイルの名前を変更するスクリプトを持っている)以下を参照してください。私の目的に合うように少し修正したスクリプトです。しかし、私はファイル名の変更プロセスを自動化し、単一のファイルに対してsciptが動作するのと同じ方法で、フォルダとそのサブフォルダ内のすべてのファイルの名前を変更したいと思います。誰でもこの質問で私を助けることができますか?パス名を使用してファイルの名前を変更するVBSスクリプト

Set Shell = WScript.CreateObject("WScript.Shell") 
Set Parameter = WScript.Arguments 
For i = 0 To Parameter.Count - 1 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    findFolder = fso.GetParentFolderName(Parameter(i)) 
    PathName = fso.GetAbsolutePathName(Parameter(i)) 
    FileExt = fso.GetExtensionName(Parameter(i)) 
    Search = ":" 
    findFolder2= Right(PathName, Len(PathName) - InStrRev(PathName, Search)) 
    arr = Split(findFolder2, "\") 
    For j=0 To UBound(arr)-1 
    arr(j) = ucase(Left(arr(j), 4)) 
    Next 
    joined = Join(arr, "%") 
    prefix = right(joined, len(joined)-1)  
    fso.MoveFile Parameter(i), findFolder + "\" + prefix 
next 

私はいくつかの有用なアイデアを得ることができると願っています。

ハービー

答えて

1

ツリーをウォークするには、レベルごとに自分自身を呼び出す関数が必要です。

On Error Resume Next 
Set fso = CreateObject("Scripting.FileSystemObject") 
Dirname = InputBox("Enter Dir name") 
ProcessFolder DirName 

Sub ProcessFolder(FolderPath) 
    On Error Resume Next 
    Set fldr = fso.GetFolder(FolderPath) 

    Set Fls = fldr.files 
    For Each thing in Fls 
     msgbox Thing.Name & " " & Thing.DateLastModified 
    Next 

    Set fldrs = fldr.subfolders 
    For Each thing in fldrs 
     ProcessFolder thing.path 
    Next 

End Sub 

他のファイルの実行方法に関するヘルプ

Set Shell = WScript.CreateObject("WScript.Shell") 
shell.Run(strCommand, [intWindowStyle], [bWaitOnReturn]) 

だから、ループの外、

Set Shell = WScript.CreateObject("WScript.Shell") 

、ループ内

shell.Run("wscript Yourscript.vbs thing.name, 1, True) 

またVBSヘルプファイルは、最近、MSのWebサイトで降ろされました。それはhttps://1drv.ms/f/s!AvqkaKIXzvDieQFjUcKneSZhDjwで私のskydriveで利用可能ですそれはscript56.chmと呼ばれています。

+0

こんにちは、ありがとうございました。私は現在のスクリプトでmsgboxの行を置き換えようとしましたが、各ファイルのスクリプトを呼び出すとこれはうまくいくが、失敗することを期待していました。 thing.name = "hello.txt"だけを挿入すると、1つのファイルの名前が変更されます...名前を変更するスクリプト用に別のサブファイルを作成してから、それを呼び出す必要があります。オブジェクト? – Herbie245

+0

ああ...これは同じ名前の複数のファイルの名前を変更することができないためです...使用 – Herbie245

+0

こんにちは...ありがとうございます。これは既に多くの助けになります。 thing.name = i& ".txt"のような非常に簡単な引数を使用して、すべてのファイルの名前を変更しました。これにより、イテレータです。しかし、ファイルの名前を変更する手続きは非常に複雑です。だから、スクリプトを組み込むことができたら、それはうまくいきません。スクリプトをそのまま使用し、再帰から呼び出すことは可能でしょうか?おかげでたくさん - – Herbie245

関連する問題