如何使用 VBScript 重命名文件?

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 的任何引用。我并不是说这不是一个好的答案,但我认为这是一个不同的问题。如果您认为这可能有用,您可以发布您自己的问题并立即自己回答。 这个问题引用自另一个问题 (***.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 重命名文件。

    在 D : Drive 中创建文件夹源和存档。 [您可以选择其他驱动器,但将代码从 D:\Source 更改为 C:\Source,以防您在 C:Drive 中创建文件夹] 将文件保存在要重命名的源文件夹中。 保存以下代码并将其另存为 .vbs,例如 ChangeFileName.vbs

    运行文件,文件将使用现有文件名和当前日期重命名

    选项显式

    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您的回答添加解释并说明适用的限制和假设。 你搞砸了代码格式(在有人已经为你修复之后)。请编辑并更正。

以上是关于如何使用 VBScript 重命名文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PowerShell 中使用条件语句重命名文件

如何使用 NetBeans 重命名文件扩展名?

如何使用终端批量重命名文件?

如果使用 kendoupload 存在,如何重命名文件?

如何使用 git 真正显示重命名文件的日志

如何使用C语言进行文件的重命名及删除操作?