Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Переименовать файлы (заменить часть имени)

Ответить
Настройки темы
VBS/WSH/JS - Переименовать файлы (заменить часть имени)

Аватара для Fresh96

Старожил


Сообщения: 194
Благодарности: 61

Профиль | Отправить PM | Цитировать


Изменения
Автор: Fresh96
Дата: 19-03-2014
Описание: изменился вариант решения (категория)
Здравствуйте.
Есть папка с файлами. Имена файлов следующие(для примера):
Код: Выделить весь код
ПС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

Отправлено: 14:08, 15-01-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Fresh96:
заменить дату »
Какую именно?

Цитата Fresh96:
и в конце имени букву "b" заменить на "u" »
Что делать, если окажется, что файл с таким именем уже существует?

Отправлено: 14:19, 15-01-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Fresh96

Старожил


Сообщения: 194
Благодарности: 61

Профиль | Отправить PM | Цитировать


Дату в имени файла. Например ПС02.ПА_2014.01.12_b.docx (формат ГГГГ.ММ.ДД)

Цитата Iska:
Что делать, если окажется, что файл с таким именем уже существует? »
теоретически такого быть не должно, но практически такое может произойти. Предлагаю в этом случае не переименовывать файл или добавить цифру, например u2 (или Ваш вариант?).

Отправлено: 14:40, 15-01-2014 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Fresh96:
Дату в имени файла. Например ПС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
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:05, 15-01-2014 | #4


Аватара для Fresh96

Старожил


Сообщения: 194
Благодарности: 61

Профиль | Отправить PM | Цитировать


Iska, огромное спасибо. Все работает.

Отправлено: 18:26, 15-01-2014 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Переименовать файлы (заменить часть имени)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Переименовать и переместить файлы vider Скриптовые языки администрирования Windows 7 12-05-2013 16:35
CMD/BAT - [решено] Нужно найти все файлы *.log в папке dir и подпапках и заменить на файлы нулевой длины dclxvi Скриптовые языки администрирования Windows 4 04-07-2012 21:28
Как переименовать системные файлы Centrinar AutoIt 13 11-07-2010 21:54
Недопустимая длинна имени файла - как переименовать blqs Хочу все знать 4 19-10-2007 08:15
Как переименовать имя аккаунта в XP с изменением имени его папки и других файлов. Alikber Microsoft Windows 2000/XP 4 06-03-2006 00:15




 
Переход