|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Пакетное переименование файлов с отсечением лишнего в имени. |
|
Любой язык - [решено] Пакетное переименование файлов с отсечением лишнего в имени.
|
Пользователь Сообщения: 109 |
Профиль | Отправить PM | Цитировать
Здравствуйте, помогите пожалуйста.
Столкнулся с проблемой. Есть папка в неё сыплются файлы, очень много файлов, с именами вида ЕСТЬ
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
|
Профиль | Отправить 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить 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 |
Пользователь Сообщения: 109
|
Профиль | Отправить PM | Цитировать Можно было бы 100 раз тыкнуть в "полезное сообщение", клянусь тыкнул бы.
Спасибо ОГРОМНОЕ за помощь. Все работает отлично. |
Отправлено: 11:16, 01-08-2016 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|