VBS Remove Readonly attribute recursivelty

岁酱吖の 提交于 2020-01-14 06:28:27

问题


I'm very new to VBS and experimenting with removing the read only attribute from a directory recursively.

It's removing the read only attribute for files but not for the directories. Also The files within these directories seem to have lost their associated program link and are now all showing as an unregistered file type. Any help is greatly appreciated.

Update: I can see why the files have lost their associations now. It's because the . which separates the name from the extension has been removed! Doh! Ideally I'd like to rename the filename only.

re.Pattern =  "[_.]"
re.IgnoreCase = True
re.Global = True

RemoveReadonlyRecursive("T:\Torrents\")

Sub RemoveReadonlyRecursive(DirPath)
    ReadOnly = 1
    Set oFld = FSO.GetFolder(DirPath)

    For Each oFile in oFld.Files
        If oFile.Attributes AND ReadOnly Then
            oFile.Attributes = oFile.Attributes XOR ReadOnly
        End If
        If re.Test(oFile.Name) Then
            oFile.Name = re.Replace(oFile.Name, " ")
        End If
    Next
    For Each oSubFld in oFld.SubFolders
        If oSubFld.Attributes AND ReadOnly Then
            oSubFld.Attributes = oSubFld.Attributes XOR ReadOnly
        End If
        If re.Test(oSubFld.Name) Then
            oSubFld.Name = re.Replace(oSubFld.Name, " ")
        End If

        RemoveReadonlyRecursive(oSubFld.Path)
    Next

End Sub

回答1:


It seems you want to automate a repeatable action by a script. Why don't you use the attrib command to do that for you:

attrib -r "T:\Torrents\*.*" /S

You can place that in a batch file if you want to attach it to an clickable icon.

EDIT: To run it from VBScript silently:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "attrib -r ""T:\Torrents\*.*"" /S", 0, true)

EDIT2: To replace everything except the last period, use a regular expression like:

filename = "my file.name.001.2012.extension"
Set regEx = New RegExp
' Make two captures:
' 1. Everything except the last dot
' 2. The last dot and after that everything that is not a dot
regEx.Pattern = "^(.*)(\.[^.]+)$"     ' Make two captures:

' Replace everything that is a dot in the first capture with nothing and append the second capture        
For each match in regEx.Execute(filename)
    newFileName = replace(match.submatches(0), ".", "") & match.submatches(1)
Next


来源:https://stackoverflow.com/questions/15204777/vbs-remove-readonly-attribute-recursivelty

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!