Страница: 1 |
|
Вопрос: как переименовать файл по определенному правилу
|
Добавлено: 12.02.10 22:46
|
|
Автор вопроса: Alexander
|
Ситуация в следующем, есть файлы с именами
abcdef-1.txt
abcdef-3.txt
abcdef-2.txt
ghhgh-2.txt
ghhgh-3.txt
ghhgh-1.txt
1) как написать скрипт для приведения имени файла в вид abcdef.txt ( как сохранить файл с новым именем без двух последних символов, при этом исходное количество символов в имени файла может меняться )
2) Каким образом объединить содержимое текстовых файлов с выше приведенными именами в порядке присвоенного им индекса -1,-2,-3 с учетом имени перед индексом , с окончательным именем файла без приставки -*.
Ответить
|
Номер ответа: 1 Автор ответа: Just
Вопросов: 4 Ответов: 330
|
Профиль | | #1
|
Добавлено: 13.02.10 11:10
|
вот пример моего скрипта. думаю подойдет...
кинуть в папку sendto и потом из контекстного меню вызывать
-
- Option Explicit
- Dim objFSO, LogFile, FilesOrFold, SubFold, DelLeftLen, DelRightLen, strMaskBefore, strMaskAfter, LeftCount, RightCount, strMaskFind, strMaskReplace, strMaskExten, TextCompareReplace, strFolderPath, Sel, objArgs, I, Old_New_Name, objOldName
- Set objFSO = CreateObject("Scripting.FileSystemObject")
-
- Dim FilesArray()
- Dim FilesArrayCount
- FilesArrayCount = 0
-
- Set objArgs = WScript.Arguments
- For I = 0 to objArgs.Count - 1
- strFolderPath = objArgs(I)
- Next
-
-
-
-
- if objFSO.FolderExists(strFolderPath) = 0 then
- msgbox "Ошибка получения пути к папке!", 16, "Переименование..."
- WscriptQuit()
- End If
-
- Sel = MsgBox("Переименовать имена файлов и папок?" & Chr(13) & Chr(10) & "В папке: " & strFolderPath, 4 + 32, "Переименование...")
- If Sel <> 6 Then
- WscriptQuit()
- End If
-
-
-
-
-
-
-
-
- FilesOrFold = InputBox("По умолчанию включен режим переименования только файлов!" & Chr(13) & Chr(10) & "Изменить?" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "1 - переименование только файлов" & Chr(13) & Chr(10) & "2 - переименование только папок" & Chr(13) & Chr(10) & "3 - переименование файлов и папок", "Переименование...", "1")
- If FilesOrFold <> 1 and FilesOrFold <> 2 and FilesOrFold <> 3 Then FilesOrFold = 1
-
- SubFold = InputBox("По умолчанию включен режим переименования без подпапок!" & Chr(13) & Chr(10) & "Изменить?" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "1 - переименовывать в подпапках тоже" & Chr(13) & Chr(10) & "0 - не учитывать подпапки", "Переименование...", "0")
- If SubFold <> 0 and SubFold <> 1 Then SubFold = 0
-
- Sel = MsgBox("Удалить по краям имен символы?", 4 + 32, "Переименование...")
- If Sel = 6 Then
- DelLeftLen = InputBox("Укажите количество удаляемых символов слева." & Chr(13) & Chr(10) & "Если количество удаляемых символов превысит количество символов файла, то файл будет пропущен!", "Переименование...", "0")
- If DelLeftLen < 0 and DelLeftLen = "" Then DelLeftLen = 0
- DelRightLen = InputBox("Укажите количество удаляемых символов справа." & Chr(13) & Chr(10) & "Если количество удаляемых символов превысит количество символов файла, то файл будет пропущен!", "Переименование...", "0")
- If DelRightLen < 0 and DelRightLen = "" Then DelRightLen = 0
- End If
-
- Sel = MsgBox("Заменить символы в имени?", 4 + 32, "Переименование...")
- If Sel = 6 Then
- strMaskFind = InputBox("Укажите строку поиска!", "Переименование...", "")
- strMaskReplace = InputBox("Укажите строку замены!", "Переименование...", "")
- Sel = MsgBox("Учитывать регистр при поиске?", 4 + 32, "Переименование...")
- If Sel = 6 Then
- TextCompareReplace = 0
- else
- TextCompareReplace = 1
- End If
- End If
-
- Sel = MsgBox("Добавить строку в имя?", 4 + 32, "Переименование...")
- If Sel = 6 Then
- strMaskBefore = InputBox("добавить строку в начале имени!", "Переименование...", "")
- strMaskAfter = InputBox("добавить строку в конце имени!", "Переименование...", "")
- End If
-
- Sel = MsgBox("Добавить счетчик с увеличением в имя?", 4 + 32, "Переименование...")
- If Sel = 6 Then
- LeftCount = InputBox("Укажите начальное значение счетчика в начале имени!", "Переименование...", "")
- do until IsNumeric(LeftCount)
- msgbox "Неправельное значение счетчика!" & Chr(13) & Chr(10) & "Счетчик указывается целыми числами!", 16, "Переименование..."
- LeftCount = InputBox("Укажите начальное значение счетчика в начале имени!", "Переименование...", "")
- loop
- if LeftCount <> "" then LeftCount = CLng(LeftCount)
-
- RightCount = InputBox("Укажите начальное значение счетчика в конце имени!", "Переименование...", "")
- do until IsNumeric(RightCount)
- msgbox "Неправельное значение счетчика!" & Chr(13) & Chr(10) & "Счетчик указывается целыми числами!", 16, "Переименование..."
- RightCount = InputBox("Укажите начальное значение счетчика в конце имени!", "Переименование...", "")
- loop
- if RightCount <> "" then RightCount = CLng(RightCount)
- End If
-
- strMaskExten = InputBox("Переименовывать только один тип файлов с введеным расширением?" & Chr(13) & Chr(10) & "Если будет указан тип файлов поиска, то папки не будут учитываться при переименовании!", "Переименование...", ".txt")
-
-
-
- Sel = MsgBox("Начать переименование?", 4 + 32, "Переименование...")
- If Sel = 6 Then
-
- msgbox "Для корректного переименования необходимо выйти из указанной папки до окончания работы программы!", 16, "Переименование..."
-
- RenameByMask()
-
- Sel = MsgBox("Отменить переименование файлов?", 4 + 32, "Переименование...")
- If Sel = 6 Then
- If objFSO.fileexists("C:\WINDOWS\Temp\RenameByMask.log") Then
- Set LogFile = objFSO.OpenTextFile ("C:\WINDOWS\Temp\RenameByMask.log", 1, True)
- Do While LogFile.AtEndOfStream <> True
-
-
- FilesArrayCount = FilesArrayCount + 1
- ReDim Preserve FilesArray(FilesArrayCount)
- FilesArray(FilesArrayCount) = LogFile.ReadLine
-
-
-
- Loop
- LogFile.Close
- elseIf objFSO.fileexists("C:\RenameByMask.log") Then
- Set LogFile = objFSO.OpenTextFile ("C:\RenameByMask.log", 1, True)
- else
- MsgBox "Отмена переименования не выполнена!", 64, "Переименование..."
- End If
-
- Do Until FilesArrayCount < 0
-
-
-
- Old_New_Name = Split(FilesArray(FilesArrayCount), " ---> ", 2)
- if UBound(Old_New_Name) = 1 then
-
-
- On Error Resume Next
- if objFSO.fileexists(Old_New_Name(1)) then
- Set objOldName = objFSO.GetFile(Old_New_Name(1))
- objOldName.Move Old_New_Name(0)
- elseif objFSO.Folderexists(Old_New_Name(1)) then
- Set objOldName = objFSO.GetFolder(Old_New_Name(1))
- objOldName.Move Old_New_Name(0)
- else
- msgbox "Ошибка отмены переименования!", 16, "Переименование..."
- Sel = MsgBox("Завершить работу программы?", 4 + 32, "Переименование...")
- If Sel = 6 Then WscriptQuit()
- end if
- If Err.Number <> 0 Then
- msgbox "Ошибка отмены переименования!", 16, "Переименование..."
- Sel = MsgBox("Завершить работу программы?", 4 + 32, "Переименование...")
- If Sel = 6 Then WscriptQuit()
- End If
- On Error goto 0
- end if
-
- FilesArrayCount = FilesArrayCount - 1
- Loop
- End If
-
- End If
-
-
-
-
-
- msgbox "Выход...", 64, "Переименование..."
-
- WscriptQuit()
- sub WscriptQuit()
- On Error Resume Next
- If objFSO.fileexists("C:\WINDOWS\Temp\RenameByMask.log") Then objFSO.DeleteFile "C:\WINDOWS\Temp\RenameByMask.log", 1
- If objFSO.fileexists("C:\RenameByMask.log") Then objFSO.DeleteFile "C:\RenameByMask.log", 1
- set objArgs = nothing
- set I = nothing
- set objOldName = nothing
- set Old_New_Name = nothing
- set objFSO = nothing
- set LogFile = nothing
- set Sel = nothing
- set FilesOrFold = nothing
- set SubFold = nothing
- set strMaskBefore = nothing
- set strMaskAfter = nothing
- set strMaskFind = nothing
- set strMaskReplace = nothing
- set LeftCount = nothing
- set RightCount = nothing
- set strMaskExten = nothing
- set strFolderPath = nothing
- set TextCompareReplace = nothing
- Err.Clear
- Wscript.quit
- End Sub
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Sub RenameByMask()
- If objFSO.FolderExists(strFolderPath) Then
- If objFSO.FolderExists("C:\WINDOWS\Temp") Then
- Set LogFile = objFSO.OpenTextFile ("C:\WINDOWS\Temp\RenameByMask.log", 2, True)
- else
- Set LogFile = objFSO.OpenTextFile ("C:\RenameByMask.log", 2, True)
- end if
- LogFile.WriteLine Now & "======================================"
- FindContent objFSO.GetFolder(strFolderPath)
- LogFile.WriteLine "========================================================="
- LogFile.Close
- End If
- End Sub
-
- Sub FindContent(objFolder)
- if FilesOrFold <> 2 then
- Dim objFile, objSubFolder, strExten, strFileName, strFileNameExt, strFilePath, strNewFileName
-
- For Each objFile In objFolder.Files
-
-
-
-
- strFilePath = objFile
- if strFilePath <> "" then
- strExten = "." & objFSO.GetExtensionName(strFilePath)
- if len(strExten) > 3 then
- if strMaskExten = "" or LCase(strExten) = LCase(strMaskExten) then
-
- strFileNameExt = objFSO.GetFileName(strFilePath)
- strFileName = Left(strFileNameExt, len(strFileNameExt) - len(strExten))
- strFilePath = Left(strFilePath, len(strFilePath) - len(strFileNameExt))
-
-
-
-
-
-
-
- strNewFileName = ""
- strNewFileName = strFileName
-
-
- if DelLeftLen > 0 then
- if len(strNewFileName) > CLng(DelLeftLen) then
- strNewFileName = Right(strNewFileName, len(strNewFileName) - DelLeftLen)
- end if
- end if
-
-
- if DelRightLen > 0 then
- if len(strNewFileName) > CLng(DelRightLen) then
- strNewFileName = Left(strNewFileName, len(strNewFileName) - DelRightLen)
- end if
- end if
-
-
- if TextCompareReplace = 1 then
- strNewFileName = Replace(strNewFileName, strMaskFind, strMaskReplace, 1, -1, 1)
- else
- strNewFileName = Replace(strNewFileName, strMaskFind, strMaskReplace, 1, -1, 0)
- end if
-
-
- strNewFileName = Trim(strNewFileName)
-
-
- strNewFileName = LeftCount & strMaskBefore & strNewFileName & strMaskAfter & RightCount
-
-
- if LCase(objFile) <> LCase(strFilePath & strNewFileName & strExten) then
-
- if objFSO.fileexists(strFilePath & strNewFileName & strExten) then
- do until objFSO.fileexists(strFilePath & strNewFileName & strExten) = 0
- strNewFileName = inputbox("До: " & objFile & Chr(13) & Chr(10) & "После: " & strFilePath & strNewFileName & strExten & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Файл с таким именем уже существует!" & Chr(13) & Chr(10) & "Переименовать?", "Переименование...", strNewFileName)
- loop
- end if
-
- if strNewFileName <> "" then
- LogFile.WriteLine objFile & " ---> " & strFilePath & strNewFileName & strExten
-
- On Error Resume Next
- objFile.name = strNewFileName & strExten
- If Err.Number <> 0 Then
- msgbox "Ошибка переименования файла!", 16, "Переименование..."
- Sel = MsgBox("Завершить работу программы?", 4 + 32, "Переименование...")
- If Sel = 6 Then WscriptQuit()
- end if
- On Error goto 0
-
- if LeftCount <> "" then LeftCount = LeftCount +1
- if RightCount <> "" then RightCount = RightCount +1
- else
-
- LogFile.WriteLine "Файл пропущен: " & objFile
- end if
- end if
-
- end if
- else
-
- LogFile.WriteLine "Ошибка получения имени файла, файл пропущен! " & objFile & " (возможно файл без расширения...)"
- end if
-
- end if
- Next
- end if
- For Each objSubFolder In objFolder.SubFolders
-
- if SubFold = 1 then
- FindContent objSubFolder
- end if
-
- if FilesOrFold <> 1 then
- Dim LenFolderPath, strFolderPath, strFolderName, strNewFolderName
-
-
-
- strFolderPath = objSubFolder
- if strFolderPath <> "" then
- if strMaskExten = "" then
- LenFolderPath = InStrRev(objSubFolder, "\")
- strFolderPath = Left(objSubFolder,LenFolderPath)
- strFolderName = right(objSubFolder, len(objSubFolder) - LenFolderPath)
-
-
-
-
-
- strNewFolderName = ""
- strNewFolderName = strFolderName
-
-
-
- if DelLeftLen > 0 then
- if len(strNewFolderName) > CLng(DelLeftLen) then
- strNewFolderName = Right(strNewFolderName, len(strNewFolderName) - DelLeftLen)
- end if
- end if
-
-
- if DelRightLen > 0 then
- if len(strNewFolderName) > CLng(DelRightLen) then
- strNewFolderName = Left(strNewFolderName, len(strNewFolderName) - DelRightLen)
- end if
- end if
-
-
- if TextCompareReplace = 1 then
- strNewFolderName = Replace(strNewFolderName, strMaskFind, strMaskReplace, 1, -1, 1)
- else
- strNewFolderName = Replace(strNewFolderName, strMaskFind, strMaskReplace, 1, -1, 0)
- end if
-
-
- strNewFileName = Trim(strNewFileName)
-
-
- strNewFolderName = LeftCount & strMaskBefore & strNewFolderName & strMaskAfter & RightCount
-
-
- if LCase(objSubFolder) <> LCase(strFolderPath & strNewFolderName) then
-
- if objFSO.FolderExists(strFolderPath & strNewFolderName) then
- do until objFSO.FolderExists(strFolderPath & strNewFolderName) = 0
- strNewFolderName = inputbox("До: " & objSubFolder & Chr(13) & Chr(10) & "После: " & strFolderPath & strNewFolderName & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Папка с таким именем уже существует!" & Chr(13) & Chr(10) & "Переименовать?", "Переименование...", strNewFolderName)
- loop
- end if
-
- if strNewFolderName <> "" then
- LogFile.WriteLine objSubFolder & " ---> " & strFolderPath & strNewFolderName
-
- On Error Resume Next
- objSubFolder.name = strNewFolderName
- If Err.Number <> 0 Then
- msgbox "Ошибка переименования папки!", 16, "Переименование..."
- Sel = MsgBox("Завершить работу программы?", 4 + 32, "Переименование...")
- If Sel = 6 Then WscriptQuit()
- end if
- On Error goto 0
-
- if LeftCount <> "" then LeftCount = LeftCount +1
- if RightCount <> "" then RightCount = RightCount +1
- else
-
- LogFile.WriteLine "Папка пропущена: " & objSubFolder
- end if
-
- end if
-
-
- end if
- else
-
- LogFile.WriteLine "Ошибка получения имени папки, папка пропущена! " & objSubFolder
- end if
- end if
- Next
- End Sub
Ответить
|
Номер ответа: 2 Автор ответа: Alexander
Вопросов: 2 Ответов: 11
|
Профиль | | #2
|
Добавлено: 02.03.10 11:16
|
есть файлы в папке
qwe7676-2001-1.pdf и qwe7676-2001-2.pdf 1 и 2 в конце имени указывают на часть документа
qwe787-2001-1.pdf и qwe787-2001-2.pdf
необходимо сравнивать имена файлов и при совпадении символов между qwe...-2001-*.pdf запускать скажем команду asd.exe (1-й файл) (2-й файл), затем их удалять и так далее со всеми файлами в папке.
Пытаюсь приспособить регулярные выражения пока-что не очень,
Просьба подсобите?????
Ответить
|
Номер ответа: 3 Автор ответа: Шпион
ICQ: 250543104
Вопросов: 13 Ответов: 118
|
Профиль | | #3
|
Добавлено: 14.07.10 23:51
|
если есть в имени файла определенная хрень (instr(1,strSearchFrom,strSearchString)=1) , т.е. строка поиска найдена в начале строки поиска, тогда слить два дока objShell.Run strMycmd,1,True
Ответить
|
Страница: 1 |
Поиск по форуму