【发布时间】: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