Показать полную графическую версию : Переименовать файлы (заменить часть имени)
Здравствуйте.
Есть папка с файлами. Имена файлов следующие(для примера):
ПС02.ПА_2014.01.12_b.docx
ПС02.С10_2014.01.10_b.docx
ПС02.С7_2014.01.13_b.docx
ПС02.С6.1_2014.01.05_u.docx
ПС02.ПЭ3_2014.01.01_u.pdf
Нужно с помощью bat'ника заменить дату у всех файлов на текущую и в конце имени букву "b" заменить на "u".
Должно получится следующее:
ПС02.ПА_2014.01.15_u.docx
ПС02.С10_2014.01.15_u.docx
ПС02.С7_2014.01.15_u.docx
ПС02.С6.1_2014.01.15_u.docx
ПС02.ПЭ3_2014.01.15_u.pdf
Помогите bat-кодом.
ОС Win7
заменить дату »
Какую именно?
и в конце имени букву "b" заменить на "u" »
Что делать, если окажется, что файл с таким именем уже существует?
Дату в имени файла. Например ПС02.ПА_2014.01.12_b.docx (формат ГГГГ.ММ.ДД)
Что делать, если окажется, что файл с таким именем уже существует? »
теоретически такого быть не должно, но практически такое может произойти. Предлагаю в этом случае не переименовывать файл или добавить цифру, например u2 (или Ваш вариант?).
Дату в имени файла. Например ПС02.ПА_2014.01.12_b.docx (формат ГГГГ.ММ.ДД) »
Ясно. Не доглядел.
Попробуйте так (на WSH):
Option Explicit
Dim strSourceFolder
Dim dtNow
Dim strNow
Dim objDictionary
Dim objRegExp
Dim objFile
Dim strKey
strSourceFolder = "E:\Песочница\0352"
With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(strSourceFolder) Then
dtNow = Now()
strNow = Year(dtNow) & "." & Right("00" & CStr(Month(dtNow)), 2) & "." & Right("00" & CStr(Day(dtNow)), 2)
Set objDictionary = WScript.CreateObject("Scripting.Dictionary")
Set objRegExp = WScript.CreateObject("VBScript.RegExp")
objRegExp.Pattern = "^(.+?)(\d{4}\.\d{2}\.\d{2})(.+)$"
For Each objFile In .GetFolder(strSourceFolder).Files
If objRegExp.Test(objFile.Name) Then
objDictionary.Add objFile.Name, objRegExp.Replace(objFile.Name, "$1" & strNow & "$3")
End If
Next
objRegExp.Pattern = "^(.+)b$"
For Each strKey In objDictionary.Keys
If objRegExp.Test(.GetBaseName(objDictionary.Item(strKey))) Then
objDictionary.Item(strKey) = objRegExp.Replace(.GetBaseName(objDictionary.Item(strKey)), "$1u." & .GetExtensionName(objDictionary.Item(strKey)))
End If
Next
Randomize Timer
For Each strKey In objDictionary.Keys
Do Until Not .FileExists(.BuildPath(strSourceFolder, objDictionary.Item(strKey)))
objDictionary.Item(strKey) = .GetBaseName(objDictionary.Item(strKey)) & "_" & Left(CStr(Rnd() * 10000), 4) & "." & .GetExtensionName(objDictionary.Item(strKey))
Loop
.GetFile(.BuildPath(strSourceFolder, strKey)).Name = objDictionary.Item(strKey)
Next
Else
WScript.Echo "Source folder [" & strSourceFolder & "] not found."
WScript.Quit 1
End If
End With
WScript.Quit 0
Iska, огромное спасибо. Все работает.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.