偷梁换柱:用脚本实现共享文件夹路径的转换

有同事来找我写个脚本,将公司现有的共享文件夹移到同一个驱动器上的不同目录上,以方便即将进行的向SAN环境的迁移。

原来支持文件服务器是N年前的事了......但同事的面子咱还得给不是?谁叫咱喜欢捣鼓脚本呢,于是又再作冯妇了......

本来呢,手工改路径是标准做法。但很多时候,“标准”就意味着效率不高,况且有几百个共享文件夹,一个个改过去,人都傻掉了。这种机械化的工作很自然就会想起由电脑来代劳。

其实这种“自然”的想法,也是在工作中逐渐形成的。如果不知道有脚本这东西,就要花费很多时间在做这种重复劳动。VBA也是一个例子,多少人不知道有捷径可走,每天在一个EXCEL时重复同样的工作,久而久之就成为工作的奴隶。叹哉。

说了不少废话,现在言归正传。这个脚本的思路是:

1. 移动共享文件夹到新路径;

Function MoveFolder(strShare, strSource, strTarget)
On Error Resume Next

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If Not objFSO.FolderExists(strTarget) Then
        arrItem = split(strTarget,"/")
        'strCurrentFolder = arrItem(0)
        i = 0
        For each strItem in arrItem
            strCurrentFolder = strCurrentFolder & arrItem(i) & "/"            
            If i > 0 Then
                If (StrComp(strShare,arrItem(i)) <>0) And (Not objFSO.FolderExists(strCurrentFolder)) Then
                    Set objNewFolder = objFSO.CreateFolder(strCurrentFolder)
                End If
            End If
            i = i + 1
        Next
        'Set objFolder = objFSO.CreateFolder(strTarget)
    End If
    objFSO.MoveFolder strSource , strTarget   
    If Err.Number <> 0 Then
        MoveFolder = Now & ": " & Err.Description
        Err.Clear
    Else
        MoveFolder = Now & ": Folder " & strSource & " is moved to " & strTarget & " successfully."
    End If
End Function

上述函数实现文件夹的移动,如果新文件夹不存在则创建之。


2. 更改注册表的信息以指向新路径。

Function ChangeSharePath(strShare, strPath)
On Error Resume Next
    Const HKEY_LOCAL_MACHINE = &H80000002

    strComputer = "."

    Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!//" & _
    strComputer & "/root/default:StdRegProv")
    strKeyPath = "SYSTEM/CurrentControlSet/Services/LanmanServer/Shares"
    strValueName = strShare
    oReg.GetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath, _
    strValueName,arrValues
  'Modify share folder to refer to new path
  arrValues(2) = "Path=" & strPath
  'Update registry
  oReg.SetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath, _
    strValueName,arrValues
    If Err.Number <> 0 Then
        ChangeSharePath = Now & ": " & Err.Description
        Err.Clear
    Else
        ChangeSharePath = Now & ": " & "Registry value " & strShare & " is modified successfully."
    End If
End Function

上述函数实现注册表信息的更改。当然,要重启电脑才能生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值