【问题标题】:How do I rename a file using VBScript?如何使用 VBScript 重命名文件?
【发布时间】:2020-04-03 08:30:48
【问题描述】:

我正在尝试重命名文件并使用以下代码,但它似乎不起作用。有人可以告诉我为什么吗?从 VBScript 重命名文件的正确方法是什么?

FSO.GetFile("MyFile.txt).Name = "Hello.txt"

我正在使用此线程作为参考:Rename files without copying in same folder

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    您可以通过移动它使用 FSO 重命名文件:MoveFile Method

    Dim Fso
    Set Fso = WScript.CreateObject("Scripting.FileSystemObject")
    Fso.MoveFile "A.txt", "B.txt"
    

    【讨论】:

    • 我不想移动文件只是重命名它..你能举个例子来说明你的说法吗。
    • 我尝试通过此代码 FSO.MoveTo \\net\stat\help.txt \\net\stat\main.css 使用 MoveTo 方法,但它不起作用
    • 在卷内移动(MoveFile,不是MoveTo)与重命名没有太大区别,实际上是相同的操作:更新文件描述符而不复制实际数据。这基本上是您没有专用重命名方法的原因。
    • 抱歉使用了 MoveFile ..MoveTo 是一个错字..仍然无法正常工作
    • 得到了问题..在代码早期写入文件并且对象没有关闭..感谢大家的帮助
    【解决方案2】:

    我只看到您的代码无法工作的一个原因,文件名字符串后缺少引号:

    VBScript:

    FSO.GetFile("MyFile.txt[missed_quote_here]).Name = "Hello.txt"
    

    【讨论】:

    • 这是正确的,也是更优雅的解决方案。
    【解决方案3】:

    是的,您可以这样做。
    这里我将一个 .exe 文件重命名为 .txt 文件

    重命名文件

    Dim objFso  
    Set objFso= CreateObject("Scripting.FileSystemObject")  
    objFso.MoveFile "D:\testvbs\autorun.exe", "D:\testvbs\autorun.txt"
    

    【讨论】:

      【解决方案4】:
      Rename filename by searching the last character of name. For example, 
      
      Original Filename: TestFile.txt_001
      Begin Character need to be removed: _
      Result: TestFile.txt
      
      Option Explicit
      
      Dim oWSH
      Dim vbsInterpreter
      Dim arg1 'As String
      Dim arg2 'As String
      Dim newFilename 'As string
      
      Set oWSH = CreateObject("WScript.Shell")
      vbsInterpreter = "cscript.exe"
      
      ForceConsole()
      
      arg1 = WScript.Arguments(0)
      arg2 = WScript.Arguments(1)
      
      WScript.StdOut.WriteLine "This is a test script."
      Dim result 
      result = InstrRev(arg1, arg2, -1)
      If result > 0 then
          newFilename = Mid(arg1, 1, result - 1)
          Dim Fso
          Set Fso = WScript.CreateObject("Scripting.FileSystemObject")
          Fso.MoveFile arg1, newFilename
          WScript.StdOut.WriteLine newFilename
      End If
      
      
      
      Function ForceConsole()
          If InStr(LCase(WScript.FullName), vbsInterpreter) = 0 Then
              oWSH.Run vbsInterpreter & " //NoLogo " & Chr(34) &     WScript.ScriptFullName & Chr(34)
              WScript.Quit
          End If
       End Function
      

      【讨论】:

        【解决方案5】:

        据我了解,您的上下文是从 ALM 下载。 在这种情况下,ALM 将文件保存在: C:/Users/user/AppData/Local/Temp/TD_80/ALM_VERSION/random_string/Attach/artefact_type /ID

        在哪里:

        ALM_VERSION 是您的 alm 安装版本,例如 12.53.2.0_952

        artefact_type是artefact的类型,例如:REQ

        ID是人工制品的ID

        下面的代码示例连接到 ALM 实例、域“DEFAUT”、项目“MY_PROJECT”,从 ID 为 6 的 REQ 获取所有附件并将它们保存在 c:/tmp 中。它是 ruby​​ 代码,但很容易转录为 VBSctript

        require 'win32ole'
        require 'fileutils'
        
        # login to ALM and domain/project 
        alm_server = ENV['CURRRENT_ALM_SERVER']
        tdc = WIN32OLE.new('TDApiOle80.TDConnection')
        tdc.InitConnectionEx(alm_server)
        username, password = ENV['ALM_CREDENTIALS'].split(':')
        tdc.Login(username, password)
        tdc.Connect('DEFAULT', 'MY_PROJECT')
        
        # get a handle for the Requirements 
        reqFact = tdc.ReqFactory
        
        # get Requirement with ID=6
        req = reqFact.item(6)
        
        # get a handle for the attachment of REQ 
        att = req.Attachments
        
        # get a handle for the list of attachements
        attList = att.NewList("")
        
        thePath= 'c:/tmp'
        
        # for each attachment:
        attList.each do |el|
          clientPath = nil
        
          # download the attachment to its default location
          el.Load true, clientPath
        
          baseName = File.basename(el.FileName)
          dirName = File.dirname(el.FileName)
          puts "file downloaded as : #{baseName}\n in Folder #{dirName}"  
          FileUtils.mkdir_p thePath
          puts "now moving #{baseName} to #{thePath}"  
          FileUtils.mv el.FileName, thePath
        end
        

        输出:

        => 文件下载为:REQ_6_20191112_143346.png

        => 在文件夹 C:\Users\user\AppData\Local\Temp\TD_80\12.53.2.0_952\e68ab622\Attach\REQ\6

        => 现在将 REQ_6_20191112_143346.png 移动到 c:/tmp

        【讨论】:

        • 是什么让您认为这个问题与 ALM 相关?我根本没有看到对 ALM 的任何引用。我并不是说这不是一个好的答案,但我认为这是一个不同的问题。如果您认为这可能有用,您可以发布您自己的问题并立即自己回答。
        • 这个问题引用自另一个问题 (stackoverflow.com/questions/59262400/…)。但是现在,我意识到我发错了问题,对此感到抱歉
        【解决方案6】:

        下面的代码绝对对我更新文件扩展名有用。

        例如:abc.pdf 到 abc.txt

        Filepath = "Pls mention your Filepath"
        
        Set objFso = CreateObject("Scripting.FileSystemObject")
        
        '' Below line of code is to get the object for Folder where list of files are located 
        Set objFolder = objFso.GetFolder(Filepath)
        
        '' Below line of code used to get the collection object to hold list of files located in the Filepath.
        Set FileCollection = objFolder.Files
        
        For Each file In FileCollection
        
            WScript.Echo "File name ->" + file.Name
            ''Instr used to Return the position of the first occurrence of "." within the File name
            s = InStr(1, file.Name, ".",1)
            WScript.Echo s
            WScript.Echo "Extn --> " + Mid(file.Name, s, Len(file.Name))
        
            'Left(file.Name,s-1) = Used to fetch the file name without extension
            ' Move method is used to move the file in the Desitnation folder you mentioned
            file.Move(Filepath & Left(file.Name,s-1)&".txt") 
        
        Next
        

        【讨论】:

        • 您不应该使用字符串操作来获取文件的扩展名。您可以使用FileSystemObject.GetExtensionName() 获取扩展名。
        【解决方案7】:

        使用 VB SCript 重命名文件。

        1. 在 D : Drive 中创建文件夹源和存档。 [您可以选择其他驱动器,但将代码从 D:\Source 更改为 C:\Source,以防您在 C:Drive 中创建文件夹]
        2. 将文件保存在要重命名的源文件夹中。
        3. 保存以下代码并将其另存为 .vbs,例如 ChangeFileName.vbs
        4. 运行文件,文件将使用现有文件名和当前日期重命名

          选项显式

          Dim fso,sfolder,fs,f1,CFileName,strRename,NewFilename,GFileName,CFolderName,CFolderName1,Dfolder,afolder

          调整我的日期

          myDate =日期

          函数 pd(n, totalDigits)

              if totalDigits > len(n) then 
          
                  pd = String(totalDigits-len(n),"0") & n 
          
              else 
          
                  pd = n 
          
              end if 
          

          结束函数

          我的日期= Pd(DAY(date()),2) & _

          Pd(月(date()),2) & _

          年份(日期())

          'MsgBox("在D盘创建文件夹'Source''Destination'和'Archive'。将PDF文件保存到Source Folder")

          sfolder="D:\Source\"

          'Dfolder="D:\Destination\"

          afolder="D:\archive\"

          设置 fso= CreateObject("Scripting.FileSystemObject")

          设置 fs= fso.GetFolder(sfolder)

          对于 fs.files 中的每个 f1

                  CFileName=sfolder & f1.name
          
                  CFolderName1=f1.name
          
                  CFolderName=Replace(CFolderName1,"." & fso.GetExtensionName(f1.Path),"")
          
                  'Msgbox CFileName 
          
                  'MsgBox CFolderName 
          
                  'MsgBox myDate
          
                  GFileName=fso.GetFileName(sfolder)
          
                  'strRename="DA009B_"& CFolderName &"_20032019"
          
                  strRename= "DA009B_"& CFolderName &"_"& myDate &""
          
                  NewFilename=replace(CFileName,CFolderName,strRename)
          
                  'fso.CopyFile CFolderName1 , afolder
          
                  fso.MoveFile CFileName , NewFilename
          
                  'fso.CopyFile CFolderName, Dfolder
          

          下一个

          MsgBox "文件重命名成功!!!"

          设置 fso= 无

          设置 fs=Nothing

        【讨论】:

        • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
        • 你搞砸了代码格式(在有人已经为你修复之后)。请编辑并更正。
        猜你喜欢
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        • 2015-03-16
        • 2013-03-06
        • 2017-12-09
        • 1970-01-01
        • 2013-04-12
        相关资源
        最近更新 更多