【问题标题】:VBScript to copy/move file by lowest value in filenameVBScript按文件名中的最小值复制/移动文件
【发布时间】:2020-12-02 11:29:24
【问题描述】:

我对脚本还很陌生,需要一些帮助。我遇到了我们的一个非营利客户的独特情况,要求我们比较特定文件夹中的两个或多个文件,并移动文件名中数值最小的文件。

该组织经营一个非营利性广播电台,该电台有数百名志愿者提交的内容,这些志愿者为他们的文件命名(当他们录制多个文件时),末尾有各种数字,代表文件的日期或顺序即将播出。

基本上,我希望创建一个 vbscript(因为我认为可以通过这种方式完成),它将在内容的第一个播出日期前 30 分钟与 windows 任务调度程序一起运行,并移动具有最低值的文件(如果存在多个文件)到一个文件夹中,该文件夹将由无线电自动化软件自动处理。

文件夹中的文件示例可能如下所示:

Folder1:(在本例中,“news.mp3”是最小值)

  • 新闻.mp3
  • news1.mp3
  • news2.mp3

文件夹 2:

  • 娱乐24.mp3
  • 娱乐26.mp3

文件夹 3:

  • localnews081420.mp3
  • localnews081520.mp3

老实说,在这个问题上,我什至不知道从哪里开始。我发现有几个脚本可以查看文件日期或文件名中的特定数字或日期格式,但没有一个脚本可以解析文件名中的数字并根据数值移动/复制文件。我希望有比我更聪明的人可以为我指明正确的方向。感谢您查看我的问题!

我一直在玩的一个脚本(来自脚本专家)查看文件名中的特定年份:

strComputer = “.”
Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)
Set colFiles = objWMIService.ExecQuery _
    (“ASSOCIATORS OF {Win32_Directory.Name=’C:\Test’} Where ” _
        & “ResultClass = CIM_DataFile”)
Set objRegEx = CreateObject(“VBScript.RegExp”)
For Each objFile in colFiles
    objRegEx.Global = True   
    objRegEx.Pattern = “\d{4}”
    strSearchString = objFile.FileName
    Set colMatches = objRegEx.Execute(strSearchString)
    strYear = colMatches(0).Value
    strNewFile = “C:\Test\” & strYear & “\” & objFile.FileName & _
        “.” & objFile.Extension
    objFile.Copy(strNewFile)
    objFile.Delete
Next

...但我似乎无法跳到常规数字然后取最低值...

【问题讨论】:

  • 我希望您不会期望 SO 社区为您编写脚本,这不是 SO 的工作方式。可能有帮助的是将问题分解成更小的部分,以便您可以更集中地搜索。您的文件名带有尾随数字部分。您可以使用 RegEx 提取这些内容。一旦你有了数字和文件名,你可以创建一个Dictionary,文件名作为键,数字部分作为值,排序是值,然后选择最上面(或最后一个)键来获取文件。这只是一种方法。
  • 这是个好主意...顺便说一句,我不是在寻找任何人来编写脚本...只是指导。我会探索你的建议。谢谢!不过,我仍然愿意接受更多建议。我知道有很多方法可以实现这一点。但你只是给了我一个坚实的起点!我很感激!
  • 你应该首先用这个批处理文件Replacing_SmartQuotes.bat替换智能引号。只需将你的文件拖放到这个批处理上,它就会生成一个带有标准引号的新文件。并且不要忘记在修改完成后编辑您的问题。

标签: vbscript automation copy filenames move


【解决方案1】:

您可以使用FileSystemObject 处理驱动器、文件夹和文件。
我还使用GETNUM 函数来获取号码。

试试我的方法:

sFolder = "C:\Test\"
Set oFSO = CreateObject("Scripting.FileSystemObject")

For Each objFile in oFSO.GetFolder(sFolder).Files
    Number=GETNUM(objFile.Name)
    strNewFile = sFolder & Number & "\" & objFile.Name

    If NOT (oFSO.FolderExists(sFolder & Number)) Then
    oFSO.CreateFolder(sFolder & Number)
    End If
    oFSO.MoveFile objFile, strNewFile
Next

Function GETNUM(Str)
For i=1 To Len(Str)
if IsNumeric(Mid(Str,i,1)) Then
Num=Num&Mid(Str,i,1)
End if
Next
GETNUM=Num
End Function

要了解所使用的代码及其工作原理,请打开这些网站并仔细阅读所有页面。

MoveFile method

Vbs Script to check if a folder exist

【讨论】:

    猜你喜欢
    • 2014-08-30
    • 1970-01-01
    • 2011-09-10
    • 2012-04-06
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    相关资源
    最近更新 更多