フォルダ内のファイルの名前を再帰的に変更するためのvbscriptを作成しようとしています。 私の最終的な計画は、フォルダをZIPファイルにコピーすることですが、ファイルにvbscript regexを使用してファイルの名前を再帰的に変更する
(a-z)または(0-9)または "_"、 ""以外の文字が含まれていると失敗します。
たとえば、ファイル名に英語以外の文字が含まれている場合、そのファイルをzipにコピーすることはできません。私はさまざまなウェブサイトを見ており、バッチでも答えが出る可能性があります。
私は正規表現にかなり慣れており、昨日それについて学び始めました。
エラーは「ファイルは既に存在しています」です。
マイスクリプト:
Const ForReading = 1
Const ForWriting = 2
Const ForAppend = 8
Const OverwriteExisting = TRUE
scriptdir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = scriptdir & "\Fragments"
Set objFolder = objFSO.GetFolder(objStartFolder)
Set colFiles = objFolder.Files
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.Pattern = "[^A-Za-z_0-9-\n\r]"
For Each objFile in colFiles
If regEx.test(objFile.Name) = true Then
FirstlevelNewFileName = objRegEx.Replace(objFile.Name, "_")
objFSO.MoveFile objFile, FirstlevelNewFileName
End If
Next
ShowSubfolders objFSO.GetFolder(objStartFolder)
Sub ShowSubFolders(Folder)
For Each Subfolder in Folder.SubFolders
Set objFolder = objFSO.GetFolder(Subfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
NewFileName = objRegEx.Replace(objFile.Name, "_")
objFSO.MoveFile objFile.Path, NewFileName
Next
ShowSubFolders Subfolder
Next
End Sub
はお時間をいただき、ありがとうございます!
私はあなたがしていることを理解していません。ファイル名に不正な文字が含まれていると、Windowsは最初にファイルを作成することを許可しないので、正規表現では何もしないでください。だからあなたは 'FirstlevelNewFileName'に何も割り当てず、決してファイルを移動しようとしません(' if'は決して入力されません)。 –
@KenWhiteたとえば、ファイル名に中国語の文字などを使用すると、名前を付けることができますが、名前を変更せずにファイルをzipファイルにコピーすることはできません。 – theperfectcucumber
それでも論理的な欠陥があります。 '@'は何百という中国語やその他の無効な文字*のどれかを表していて、 'ABC @ .txt'というファイルを持っているとします(' @ 'は何十万という文字のどれかになります)と 'ABC @ .txt'(ここで' @ 'は数十万の文字のうちの別のものです)と同じ文字をすべて同じ' _'で置き換えています。同じ名前のファイルが2つありますが、それらのファイルは最初から始まっていません。 –