2013-05-13 2 views
0

У меня есть файлы со следующим соглашением об именах.Переименовать файлы без копирования в одной папке

RE12356_GJ123456789.DAT

Мне нужно переименовать файл в RE12356_GJ123456790.DAT без копирования файлов с помощью VBS, т.е. мне нужно увеличить на 1, каждый раз, когда я запускаю файл VBS. Пожалуйста, помогите мне. Благодаря!

ответ

4

FileSystemObject имеет метод .GetFile (специф_файлов), который возвращает объект для файла имя_файла. Эти объекты имеют свойство (writeable) .Name. Так что получите .Name, измените его и напишите/назначьте новый.

Чтобы дать вам некоторые идеи (зацикливание над файлами в папке, найти файл (ы), чтобы изменить, извлекая число для увеличения):

Option Explicit 

Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject") 

WScript.Quit demoMain() 

Function demoMain() 
    demoMain = 0 ' assume success 

    Dim sDDir : sDDir  = goFS.GetAbsolutePathName(".\") 
    Dim reVictim : Set reVictim = New RegExp 
    reVictim.IgnoreCase = True 
    reVictim.Pattern = "^(victim)(\d+)(\.txt)$" 
    Dim oFile 
    For Each oFile In goFS.GetFolder(sDDir).Files 
     If reVictim.Test(oFile.Name) Then 
     WScript.Echo "found: ", oFile.Name 
     oFile.Name = reVictim.Replace(oFile.Name, GetRef("FINC")) 
     WScript.Echo "renamed:", oFile.Name 
     End If 
    Next 
End Function ' demoMain 

Function FINC(sM, sG1, sG2, sG3, nP, sS) 
    FINC = sG1 & Right(100 + sG2 + 1, 2) & sG3 
End Function 

выход:

cscript finc.vbs 
found: victim00.txt 
renamed: victim01.txt 

cscript finc.vbs 
found: victim01.txt 
renamed: victim02.txt 

cscript finc.vbs 
found: victim02.txt 
renamed: victim03.txt 

Как копировать с переполнением счетчика остается как упражнение.

+0

Вы получаете E для усилий ... – Reimius

2

Вы можете просто использовать «двигаться» команду, которая не будет на самом деле переписать файл, но будет просто переместить запись в таблице файлов ... который по существу является «переименовать»

Если вы не хотите использовать filesystemobject.move можно выдать команду в командной строке с помощью переименования: Wsript.shell

как ...

Dim objShell 
Set objShell = WScript.CreateObject ("WScript.shell") 
objShell.run "cmd /c rename somefile.txt newname.txt" 
Set objShell = Nothing 

или Ekkehard.Horner отметил:

Dim fso, f, s 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set f = fso.GetFile(filespec) 
    f.name = "newFileName.txt" 

см: Name Property (FileSystemObject)

+0

Ekkehard указывает сначала ... как на самом деле делать именно то, что вы хотите. –

Смежные вопросы