Страница: 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 | 
 
		
			Поиск по форуму