|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник для переименования файлов |
|
|
CMD/BAT - [решено] Батник для переименования файлов
|
Новый участник Сообщения: 2 |
Уважаемые знатоки! Очень прошу помочь со следующей задачкой: нужен батник для переименования файлов в папке.
Имена файлов нужно заменить на цифры 1.jpg, 2.jpg, 3.jpg .... n.jpg Имена файлов могут быть любые - могут содержать символы % и !. В эти символы я, собственно, и уперся при попытке написать переименовалку самостоятельно: @echo off setlocal for %%i in (*.jpg) do call:ren "%%i" goto:eof :ren set "file=%~1" ren %1 %file:!=% переименовывает все, кроме файлов с символами "%" в названии. Если включаю setlocal enabledelayedexpansion и пробую аналогично убирать из названия %, то не срабатывает на файлах, в которых есть символы "!". Мог бы сделать по-очереди, но встречаются файлы, в которых есть и то и другое - их ничего не берет ![]() Может кто что подскажет? |
|
Отправлено: 00:27, 11-11-2014 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать |
Отправлено: 01:02, 11-11-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать [решено] Спасибо огромное!
|
Отправлено: 01:23, 11-11-2014 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Школьник 5:
|
|
Отправлено: 02:43, 11-11-2014 | #4 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Iska, ну эта проблема решаема: @echo off for /f %%i in ('"dir /a-d/b *.jpg| find /c /v """') do ( for /l %%j in (1 1 %%i) do ( call ren %%j.jpg %%j_%%random%%%%random%%.jpg 2>nul ) ) for /f "delims=" %%i in ('"dir /a-d/b *.jpg"') do ( set /a n+=1 cmd /v:on /c ren "%%i" !n!.jpg ) exit /b . Может встретится и ещё одна "неприятность": в составе имен переименуемых файлов могут быть имена глобальных переменных в окружении знаков процента. Думаю, понятно, к чему это может привести. Но и эта проблема решаема: @echo off for /f "delims=" %%i in ('"dir /a-d/b *.jpg"') do ( set /a n+=1 ( call set /p="%%n%% "<nul echo %%i )>>.tmp ) for /f "tokens=1*" %%i in ('"type .tmp& del .tmp"') do ( ren "%%j" %%i.jpg ) exit /b . Таким образом, если объединить оба решения, получится такой код: @echo off for /f %%i in ('"dir /a-d/b *.jpg| find /c /v """') do ( for /l %%j in (1 1 %%i) do ( call ren %%j.jpg %%j_%%random%%%%random%%.jpg 2>nul ) ) for /f "delims=" %%i in ('"dir /a-d/b *.jpg"') do ( set /a n+=1 ( call set /p="%%n%% "<nul echo %%i )>>.tmp ) for /f "tokens=1*" %%i in ('"type .tmp& del .tmp"') do ( ren "%%j" %%i.jpg ) exit /b . |
||
Отправлено: 05:26, 11-11-2014 | #5 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать |
Последний раз редактировалось temphard, 10-11-2019 в 18:33. Отправлено: 18:23, 10-11-2019 | #6 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата Школьник 5:
BoxIn = "Z:\Box_In"
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set AllF = FSO.GetFolder(BoxIn).Files
If Err.Number <> 0 Then
MsgBox """" + BoxIn + """" + vbCrLf + vbCrLf + "Open folder, Err.Number=" + CStr(Err.Number) + vbCrLf + Err.Description
WScript.Quit 1
End If
With CreateObject("VBScript.RegExp")
.Pattern = "^~~~.*$"
.IgnoreCase = True
.Global = True
For Each FileIn In AllF
If Not .Test(FileIn.Name) Then
FSO.MoveFile FileIn, BoxIn + "\~~~" + FileIn.Name
End If
Next
i = 0
j = 100000
For Each FileIn In AllF
If .Test(FileIn.Name) Then
i = i + 1
j = j + 1
FSO.MoveFile FileIn, BoxIn + "\" + CStr(i) + "." + FSO.GetExtensionName(FileIn)
' FSO.MoveFile FileIn, BoxIn + "\" + Mid(CStr(j), 2) + "." + FSO.GetExtensionName(FileIn)
End If
Next
End With
On Error GoTo 0
Если нужен такой вид, то закомментируйте предыдущую строку и откомментируйте эту (убрать ') При этом если файлов более 99999, то увеличьте число нулей в j = 100000 |
|
------- Отправлено: 22:39, 10-11-2019 | #7 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать temphard,
Вот еще вариант. Введен фильтр на расширение файлов в папке.
Можно указать папку явно. Можно указать её в аргументе в кавычках при вызове скрипта. Можно создать ярлык на этот скрипт и в проводнике затягивать обрабатываемую папку на него BoxIn = "Z:\Box_In" ' Путь к папке (при отсутствии аргумента в вызове скрипта)
Ext = "mp3" ' Расширение файлов
With WScript.Arguments
If .Count <> 0 Then
BoxIn = .Item(0)
End If
End With
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set AllF = FSO.GetFolder(BoxIn).Files
If Err.Number <> 0 Then
MsgBox """" + BoxIn + """" + vbCrLf + vbCrLf + "Open folder, Err.Number=" + CStr(Err.Number) + vbCrLf + Err.Description
WScript.Quit 1
End If
With CreateObject("VBScript.RegExp")
.Pattern = "^.*\." + Ext + "$"
.IgnoreCase = True
.Global = True
For Each FileIn In AllF
If .Test(FileIn.Name) Then
FileIn.Name = FileIn.Name + "~~~"
End If
Next
i = 0
j = 100000
.Pattern = "^.*\." + Ext + "~~~$"
For Each FileIn In AllF
If .Test(FileIn.Name) Then
i = i + 1
j = j + 1
FileIn.Name = CStr(i) + "." + Ext
' FileIn.Name = Mid(CStr(j), 2) + "." + Ext
End If
Next
End With
On Error GoTo 0
MsgBox "Done"
|
------- Отправлено: 13:24, 11-11-2019 | #8 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать |
Отправлено: 14:14, 29-11-2019 | #9 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать |
Отправлено: 17:09, 29-11-2019 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] батник для переименования файлов | Pumpik | Скриптовые языки администрирования Windows | 5 | 01-02-2014 20:12 | |
CMD/BAT - [решено] Батник для двойной сортировки и переименования | Nun-Nun | Скриптовые языки администрирования Windows | 20 | 19-01-2012 16:31 | |
Нужна программа для пакетного переименования файлов | gaulle | Хочу все знать | 5 | 18-01-2012 07:30 | |
Прочие - Программы для массового переименования каталогов и файлов | Daiv | Программное обеспечение Windows | 39 | 17-06-2011 16:33 | |
CMD/BAT - [решено] Нужна помощь в создании bat-ника для распаковки и переименования файлов/папок | Nun-Nun | Скриптовые языки администрирования Windows | 6 | 14-05-2009 15:45 |
|