Найдите файл с определенной строкой в ​​имени и переименуйте его.

Я любитель VBScript (и весьма очарован тем, как он работает ;)). Мне приходится ежедневно работать над определенными отчетами, для которых я создал сценарий для выполнения этой задачи. Проблема в том, что я сгенерировал этот сценарий для определенного имени файла, и эти отчеты ежедневно приходят с датой времени и несколькими дополнительными параметрами, добавленными к ним в имени. Итак, мне нужен vbscript, чтобы сэкономить 10 минут ежедневной работы по переименованию файлов в соответствии с именем, указанным в скрипте.

Например, D:/reports/ есть файл AMR KilobyteData_23022013_4399_223.xls Я хочу переименовать его просто в AMR KilobyteData.xls. Вот и все ! :)

Помогите, пожалуйста, с проблемой :)


person Developer by Blood    schedule 26.02.2013    source источник


Ответы (2)


Сначала просмотрите все файлы в вашей папке, используя такой скрипт:

Dim fso, folder, file
Dim folderName, searchFileName, renameFileTo

' Parameters
folderName     = "D:\reports\"
searchFileName = "AMR KilobyteData"
renameFileTo   = "AMR KilobyteData.xls"

' Create filesystem object and the folder object
' how the FSO works: http://msdn.microsoft.com/en-us/library/2z9ffy99(v=vs.84).aspx
Set fso = CreateObject("Scripting.FileSystemObject")  
Set folder = fso.GetFolder(folderName)  

' Loop over all files in the folder until the searchFileName is found
For each file In folder.Files    
    ' See if the file starts with the name we search
    ' how instr works: http://www.w3schools.com/vbscript/func_instr.asp
    If instr(file.name, searchFileName) = 1 Then
        file.name = renameFileTo
        ' Exit the loop, we only want to rename one file
        Exit For
    End If
Next

Должно работать корректно (но я не проверял). Надеюсь, я пробудил ваше любопытство, и вы изучите механизмы работы этого кода. Вот почему я помещаю ссылки, где можно найти документацию.

person AutomatedChaos    schedule 26.02.2013
comment
Хорошая работа :) Спасибо :) На самом деле я изучил механику кода и попытался сделать его более динамичным. Когда я попытался сделать это с помощью переменной 2D-массива, мне это не удалось. Не знаю почему. Dim SearchFileName(4,2) SearchFileName(0,0)="Allowed KilobyteData" - person Developer by Blood; 27.02.2013

Всегда ли информация, которую вы хотите удалить, следует после первого символа подчеркивания в имени файла? Если это так, вы можете сделать что-то вроде этого:

Set fso = CreateObject("Scripting.FileSystemObject")

For Each f In fso.GetFolder("D:\reports").Files
  pos = InStr(f.Name, "_")
  If pos > 0 Then
    newName = Left(f.Name, pos-1) & "." & fso.GetExtensionName(f.Name)
    f.Move fso.BuildPath(f.ParentFolder, newName)
  End If
Next
person Ansgar Wiechers    schedule 26.02.2013