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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Пакетное переименование файлов с отсечением лишнего в имени.

Ответить
Настройки темы
Любой язык - [решено] Пакетное переименование файлов с отсечением лишнего в имени.

Аватара для LukAleX

Пользователь


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


Конфигурация

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


Изменения
Автор: LukAleX
Дата: 31-07-2016
Здравствуйте, помогите пожалуйста.
Столкнулся с проблемой. Есть папка в неё сыплются файлы, очень много файлов, с именами вида

ЕСТЬ
PA-1312.PDF
бла-бла-блаPA-1513.PDF
PA-6734тыц-тыц-тыц.PDF
PA-6734тру-ля-ля.PDF
ля-ля-ляPA-5617ля-ля-ля.PDF


то есть в имени есть неизменная часть "PA-" и следующие за ней случайные 4 символа (вся проблема в этих символах).
Задача состоит в том что нужно переименовать все файлы удалив из имени все символы до и после PA-XXXX если они есть.
А если в папке уже есть файл с таким же именем, добавить к имени счетчик.

НУЖНО
PA-1312.PDF
PA-1513.PDF
PA-6734.PDF
PA-6734 1.PDF
PA-5617.PDF


Заранее ОГРОМНОЕ СПАСИБО за помощь.


Удалить ДО PA-XXXX (подсмотренно у Iska)

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=D:\Otchet

2>nul pushd "%sSourceFolder%" && (
for /f "usebackq delims=" %%i in (
`2^>nul dir /b /a:-d`
) do (
set sVar=%%~i
ren "%%~i" "!sVar:*PA-=!"
)
popd
) || (
echo Can't find source folder [%sSourceFolder%]
exit /b 1
)

endlocal
exit /b 0

Отправлено: 18:42, 31-07-2016

 

Ветеран


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

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


Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set "sSourceFolder=D:\Otchet"

2>nul pushd "%sSourceFolder%" && (
 for /f "usebackq delims=" %%i in (
  `2^>nul dir /b /a:-d`
 ) do (
  set sVar=%%~ni
  set sVar=!sVar:*PA-=!
  call :sub "%%i" "PA-!sVar:~,4!%%~xi"
 )
 popd
) || (
 echo Can't find source folder [!sSourceFolder!]
 exit /b 1
)

endlocal
exit /b 0

:sub
 (
  2>nul ren %1 %2
 ) || (
  set /a i+=1
  call :sub %1 "PA-!sVar:~,4! !i!%~x2"
 )
 set i=
 exit /b 0

Последний раз редактировалось Georgio, 01-08-2016 в 06:57.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:24, 01-08-2016 | #2



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

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


Ветеран


Contributor


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

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


LukAleX, попробуйте так (WSH):
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strSourceFolder
Dim strFileNamePattern

Dim objFSO
Dim objFile

Dim strNewFileName

Dim strTempFolder
Dim iCount


strSourceFolder    = "C:\Мои проекты\0001"
strFileNamePattern = ".*(PA\-.{4}).*(\.pdf)"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
	With WScript.CreateObject("VBScript.RegExp")
		.IgnoreCase = True
		.Pattern    = strFileNamePattern
		
		strTempFolder = objFSO.CreateFolder(GetTemporaryName()).Path
		
		For Each objFile In objFSO.GetFolder(strSourceFolder).Files
			If .Test(objFile.Name) Then
				With .Execute(objFile.Name).Item(0).Submatches
					strNewFileName = objFSO.BuildPath(strTempFolder, .Item(0) & .Item(1))
					iCount = 2
					
					Do While objFSO.FileExists(strNewFileName)
						strNewFileName = objFSO.BuildPath(strTempFolder, .Item(0) & "-" & CStr(iCount) & .Item(1))
						iCount = iCount + 1
					Loop
					
					objFile.Move strNewFileName
				End With
			End If
		Next
		
		objFSO.MoveFile objFSO.BuildPath(strTempFolder, "*.*"), strSourceFolder
		objFSO.DeleteFolder strTempFolder, True
	End With
Else
	WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
	WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
' Серый форум / vbscript: генерация пути для временного файла или папки
' (http://forum.script-coding.com/viewtopic.php?id=1221)
'=============================================================================
Function GetTemporaryName()
	Const TemporaryFolder = 2
	
	Dim strTempName
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		Do
			strTempName = .BuildPath(.GetSpecialFolder(TemporaryFolder), .GetTempName)
		Loop While .FileExists(strTempName) Or .FolderExists(strTempName)
	End With
	
	GetTemporaryName = strTempName
End Function
'=============================================================================

Нумерацию я таки сделал с двойки, а не с единицы.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:30, 01-08-2016 | #3


Аватара для LukAleX

Пользователь


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

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


Можно было бы 100 раз тыкнуть в "полезное сообщение", клянусь тыкнул бы.
Спасибо ОГРОМНОЕ за помощь. Все работает отлично.

Отправлено: 11:16, 01-08-2016 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Пакетное переименование файлов с отсечением лишнего в имени.

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Пакетное переименование файлов ArsenBespalov Скриптовые языки администрирования Windows 9 11-08-2016 03:56
CMD/BAT - Переименование файлов в папке по имени папки_счётчик Sergo_zloy Скриптовые языки администрирования Windows 13 17-01-2014 16:58
CMD/BAT - [решено] Пакетное переименование файлов (синхронизирование имён одного расширения с другим) 19w85 Скриптовые языки администрирования Windows 13 04-10-2013 22:02
[решено] Пакетное переименование ярлыков SimSim Хочу все знать 9 24-10-2012 10:44
CMD/BAT - [решено] Пакетное переименование с создание сложных имён файлов alexmoreman Скриптовые языки администрирования Windows 4 28-11-2011 02:27




 
Переход