【问题标题】:Rename files without copying in same folder重命名文件而不复制到同一文件夹中
【发布时间】:2013-05-13 17:39:39
【问题描述】:

我有以下命名约定的文件。

RE12356_GJ123456789.DAT

我需要将文件重命名为 RE12356_GJ123456790.DAT 而不使用 VBS 复制文件,即每次运行 VBS 文件时我都需要增加 1。请帮我。谢谢!

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    FileSystemObject 有一个方法 .GetFile(FileSpec) 返回文件 FileSpec 的对象。这些对象有一个(可写的) .Name 属性。因此,获取 .Name,对其进行修改,然后编写/分配新的。

    给你一些想法(遍历文件夹中的文件,找到要更改的文件,提取要增加的数字):

    Option Explicit
    
    Dim goFS : Set goFS = CreateObject( "Scripting.FileSystemObject" )
    
    WScript.Quit demoMain()
    
    Function demoMain()
      demoMain = 0 ' assume success
    
      Dim sDDir    : sDDir        = goFS.GetAbsolutePathName(".\")
      Dim reVictim : Set reVictim = New RegExp
      reVictim.IgnoreCase = True
      reVictim.Pattern    = "^(victim)(\d+)(\.txt)$"
      Dim oFile
      For Each oFile In goFS.GetFolder(sDDir).Files
          If reVictim.Test(oFile.Name) Then
             WScript.Echo "found:  ", oFile.Name
             oFile.Name = reVictim.Replace(oFile.Name, GetRef("FINC"))
             WScript.Echo "renamed:", oFile.Name
          End If
      Next
    End Function ' demoMain
    
    Function FINC(sM, sG1, sG2, sG3, nP, sS)
      FINC = sG1 & Right(100 + sG2 + 1, 2) & sG3
    End Function
    

    输出:

    cscript finc.vbs
    found:   victim00.txt
    renamed: victim01.txt
    
    cscript finc.vbs
    found:   victim01.txt
    renamed: victim02.txt
    
    cscript finc.vbs
    found:   victim02.txt
    renamed: victim03.txt
    

    如何在计数器溢出的情况下进行复制留作练习。

    【讨论】:

      【解决方案2】:

      您可以只使用“移动”命令,该命令实际上不会重写文件,而只会移动文件表中的条目...本质上是“重命名”

      如果您不想使用 filesystemobject.move,您可以通过以下方式发出命令行重命名命令:Wsript.shell

      喜欢...

      Dim objShell
      Set objShell = WScript.CreateObject ("WScript.shell")
      objShell.run "cmd /c rename somefile.txt newname.txt"
      Set objShell = Nothing
      

      或者正如 Ekkehard.Horner 指出的那样:

        Dim fso, f, s
         Set fso = CreateObject("Scripting.FileSystemObject")
         Set f = fso.GetFile(filespec)
         f.name = "newFileName.txt"
      

      见:Name Property (FileSystemObject)

      【讨论】:

      • Ekkehard 首先指出......如何真正做到你想要的。
      猜你喜欢
      • 2012-07-30
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      相关资源
      最近更新 更多