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

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

Ответить
Настройки темы
CMD/BAT - [решено] Батник для переименования файлов

Новый участник


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

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


Уважаемые знатоки! Очень прошу помочь со следующей задачкой: нужен батник для переименования файлов в папке.
Имена файлов нужно заменить на цифры 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

 

Новый участник


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

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


Цитата alpap:
и обратите внимание на парные кавычки »
Что-то я совсем запутался...
Код: Выделить весь код
@echo off
for /f %%i in ('dir /a-d/b "С:\file\*.mp3"'| find /c /v """') do (
 for /l %%j in (1 1 %%i) do (
  call ren %%j.mp3 %%j_%%random%%%%random%%.mp3 2>nul
  )
 )
for /f "delims=" %%i in ('"dir /a-d/b *.mp3"') 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.mp3
 )
exit /b
Не работает, где-то ошибка...

Отправлено: 18:30, 29-11-2019 | #11



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

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


Ветеран


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

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


как минимум:
Цитата temphard:
in ('dir /a-d/b "С:\file\*.mp3"'| find /c /v """') do »
Код: Выделить весь код
in ('dir /a-d/b "С:\file\*.mp3"^| find /c /v ""') do
или
Код: Выделить весь код
in ('"dir /a-d/b "С:\file\*.mp3"| find /c /v """') do
а вообще очень сумбурно код написан, лучше если вы озвучите свою задачу и в деталях, мы поможем написать код и правильно и красиво.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:10, 29-11-2019 | #12


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Powershell, вроде работает:

Код: Выделить весь код
$folder = 'C:\temp\2'
$c = 1

(dir "$folder").foreach({
Rename-Item $_.fullname -NewName $("$c" + "$($_.extension)")
$c++
})

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

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

Отправлено: 21:16, 29-11-2019 | #13


Новый участник


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

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


Цитата alpap:
лучше если вы озвучите свою задачу и в деталях »
Да все просто, пользуюсь этим кодом, чтобы переименовывать в цифровой последовательности 1,2,3... mp3 файлы.
Скрытый текст
Код: Выделить весь код
@echo off

for /f %%i in ('"dir /a-d/b *.mp3| find /c /v """') do (
 for /l %%j in (1 1 %%i) do (
  call ren %%j.mp3 %%j_%%random%%%%random%%.mp3 2>nul
  )
 )
for /f "delims=" %%i in ('"dir /a-d/b *.mp3"') 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.mp3
 )

exit /b

Батник в каталоге с mp3 файлами работает отлично. Но находясь в другом месте, код не срабатывает.
Никак не могу правильно указать путь к каталогу, в котором находятся mp3 файлы, чтобы код их переименовал.
Спасибо, если сможете помочь.

Отправлено: 22:50, 29-11-2019 | #14


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Более продвинутый вариант, с подсчётом кол-ва файлов в папке и на этом основании подстановка нулей в начало:
Код: Выделить весь код
$files = dir 'C:\temp\2' -file
$digits = (($files.count -split '') -match "\d").count
$c = 1

$files.foreach({
Rename-Item $_.fullname -NewName (("{0:D$digits}" + "$($_.extension)") -f $c++)
})
Идея: https://stackoverflow.com/questions/...fixes/18305871

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 23:05, 29-11-2019 | #15


Новый участник


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

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


Цитата DJ Mogarych:
Более продвинутый вариант »
Спасибо, но мне нужна именно такая нумерация 1,2,3... и обязательно указать расширение файлов, так как кроме mp3, в каталоге находятся другие файлы и их трогать нельзя.

Отправлено: 23:37, 29-11-2019 | #16


Ветеран


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

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


temphard,
Цитата temphard:
Но находясь в другом месте, код не срабатывает »
не знаю как вы там запускаете
в моем коде путь указан в переменной, можно задать свой путь или изменив его в переменной непосредственно или задав первым параметром, тогда запускать так:
Код: Выделить весь код
name.bat "C:\Papka"
если раскомментировать 3-ю строку (и закомментировать 2-ю, хотя необязательно), то можно вводить путь по запросу, при этом если ничего не ввести, путь, заданный в переменной, останется по-умолчанию.
Код: Выделить весь код
@echo off
set "sdir=C:\Papka"& if not "%~1"=="" set "sdir=%~1"
:: set "sdir=C:\Papka"& echo Введите путь:& set /p sdir=
set "ext=mp3"

pushd "%sdir%"
 for /f "tokens=1* delims=[]" %%a in ('dir /a-d/b "*.%ext%"^|find /n /v ""') do ren "%%b" "%%a%%~xb"
popd
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:17, 30-11-2019 | #17


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Цитата temphard:
1,2,3... и обязательно указать расширение файлов »
Да какие проблемы-то:
Код: Выделить весь код
$files = dir "C:\temp\1\*.mp3"
$c = 1

$files.foreach({
Rename-Item $_.fullname -NewName $("$c" + "$($_.extension)")
$c++
})

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

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

Отправлено: 08:46, 30-11-2019 | #18


Ветеран


Contributor


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

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


temphard, Не хотел встревать, но:
Вот вариант CMD для нумерации вида 1 2 3 ...
Код: Выделить весь код
@Echo Off
	Set "BoxIn=Z:\Box_In"
	Set "Ext=mp3"

	If Not "%1"=="" Set "BoxIn=%~1"

	For %%f In ("%BoxIn%\*.%Ext%") Do Ren "%%f" "%%~nxf.~tmp"
	Set /A i=0
	For %%f In ("%BoxIn%\*.%Ext%.~tmp") Do (
		Call Set /A i+=1
		Call Ren "%%f" "%%i%%.%Ext%"
	)
Exit /B 0
Вот вариант CMD для нумерации вида 0001 0002 0003 ..0123 ...
Код: Выделить весь код
@Echo Off
	Set "BoxIn=Z:\Box_In"
	Set "Ext=mp3"

	If Not "%1"=="" Set "BoxIn=%~1"

	For %%f In ("%BoxIn%\*.%Ext%") Do Ren "%%f" "%%~nxf.~tmp"
	Set /A i=10000
	For %%f In ("%BoxIn%\*.%Ext%.~tmp") Do (
		Call Set /A i+=1
		Call Ren "%%f" "%%i:~1%%.%Ext%"
	)
Exit /B 0
Обрабатываемую папку можно явным образом прописать в строке по образцу:
Set "BoxIn=Z:\Box_In"
Можно указать её в аргументе в кавычках при вызове скрипта.
Например: kuku.bat "D:\tralala\lamca drica ca"
Можно создать ярлык на этот скрипт и в проводнике затягивать обрабатываемую папку на него.
Но, если в именах файлов есть спецсимволы, берите vbs.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 30-11-2019 в 19:54.

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

Отправлено: 19:43, 30-11-2019 | #19


Новый участник


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

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


Всем спасибо за помощь, для моих нужд ваших предложений более, чем достаточно.
Цитата megaloman:
Не хотел встревать, но »
Ещё небольшой вопросик: в каталоге находится несколько десятков тысяч *.mp3 файлов и скрипту для его выполнения необходимо определённое время, а можно ли сделать так, чтобы скрипт по какому-то алгоритму выбирал первый "попавшийся" *.mp3 файл и переименовывал его в 1.mp3?
В случае, если файл с таким именем уже существует, чтобы он перезаписывался. Главное чтобы скрипт работал быстро.
То есть для меня нет так важно, чтобы все файлы были пронумерованы, но чтобы один mp3 файл точно имел имя 1.mp3
Дело в том, что файл 1.mp3 постоянно удаляется (это так надо) и тем не менее такой файл должен всё время появляться в данном каталоге из числа других mp3 файлов.
Не обессудьте, если мои объяснения кажутся странными.

Отправлено: 21:03, 30-11-2019 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход