|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименовать файла с условием... |
|
|
CMD/BAT - [решено] Переименовать файла с условием...
|
Старожил Сообщения: 286 |
Добрый.
Есть файл - sound.mp3, по пути - С:\Temp Помогите с батником: Если в папке есть этот файл - переименовать его в sound1.mp3. Если его нет - вывести в консоль "Файл не найден" Если в папке есть sound.mp3 и sound1.mp3 - переименовать sound.mp3 в sound2.mp3 Если в папке есть sound.mp3, sound1.mp3, sound2.mp3 - переименовать sound.mp3 в sound3.mp3 Если в папке есть sound.mp3, sound1.mp3, sound2.mp3, sound3.mp3 - переименовать sound.mp3 в sound4.mp3 .....и так до sound10.mp3 (или до бесконечности) |
|
Отправлено: 22:22, 23-12-2020 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Понятное дело несколько вопросов:
- как файл попадает в папку (чем/кем заносится/создается) - какие еще могут быть файлы в папке, вообще важно именно нет ли файлов с идентичным именем другого расширения |
Отправлено: 23:50, 23-12-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать
Часто mp3-файлы в имени содержат символы, которые CMD не в состоянии обработать. Так что надо понимать ограниченность CMD
|
------- Последний раз редактировалось megaloman, 24-12-2020 в 00:11. Отправлено: 23:54, 23-12-2020 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Мои пять копеек:
Скрытый текст
@echo off setlocal enableextensions enabledelayedexpansion set sSourceFileName=sound set sSourceFileExt=.mp3 set sSourceFile=%sSourceFileName%%sSourceFileExt% set /a iCount = 1 if not exist "%sSourceFile%" ( echo Source file [%sSourceFile%] not found. exit /b 1 ) :Repeat 2>nul ren "%sSourceFile%" "%sSourceFileName%!iCount!%sSourceFileExt%" || ( set /a iCount += 1 goto :Repeat ) endlocal exit /b 0 |
Отправлено: 00:57, 24-12-2020 | #4 |
Старожил Сообщения: 286
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 09:32, 24-12-2020 | #5 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Iska,
Сухов: Лучше, конечно, помучиться. (Белое солнце пустыни)
Вот работает:
@Echo Off
cls
For %%f In ("Z:\Box_In\sound.mp3") Do (
FOR /L %%N IN (1,1,1000) DO If Not Exist "%%~dpnf%%N%%~xf" (
Ren %%f "%%~nf%%N%%~xf" ||Echo Error with Ren %%f "%%~nf%%N%%~xf"
Exit /B
))
If отработал, Exit /B вроде бы должен прекратить выполнение, но цикл продолжает как-то крутиться и время выполнения скрипта тем больше, чем больше предел. |
------- Последний раз редактировалось megaloman, 24-12-2020 в 10:14. Отправлено: 09:49, 24-12-2020 | #6 |
Старожил Сообщения: 286
|
Профиль | Отправить PM | Цитировать megaloman, спасибо.
правда как по мне, лишнее, т.к перед этим в консоль уже выводится что файл не найден. получается как дубль) Для себя оставил так: Скрытый текст
@Echo Off cd "%~dp0" set sSourceFileName=sound set sSourceFileExt=.mp3 Call :MyRen "%~dp0%sSourceFileName%%sSourceFileExt%" Exit /B :MyRen SetLocal Set /A N=0 :Begin Set /A N+=1 If Exist "%~dpn1%N%%~x1" GoTo :Begin Ren %1 "%~n1%N%%~x1" || (echo Для выхода нажмите любую кнопку... pause > nul) EndLocal Exit /B |
Отправлено: 10:55, 24-12-2020 | #7 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать 9119, ИМХО,
Цитата 9119:
![]() |
|
------- Последний раз редактировалось megaloman, 24-12-2020 в 11:36. Отправлено: 11:29, 24-12-2020 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Упрощение кода на основе идеи коллеги megaloman:
Скрытый текст
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFile=sound.mp3
set /a iCount = 1
if not exist "%sSourceFile%" (
echo Source file [%sSourceFile%] not found.
exit /b 1
)
:Repeat
for %%i in ("%sSourceFile%") do 2>nul ren "%sSourceFile%" "%%~ni!iCount!%%~xi" || (
set /a iCount += 1
goto :Repeat
)
endlocal
exit /b 0
|
Отправлено: 22:20, 24-12-2020 | #9 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Вариант Iska, еще короче, хотя ИМХО иметь процедуру гораздо удобнее, да и, по большому счету, этот вариант не короче, чем с процедурой.
@Echo Off Set "FileIn=Z:\Box_In\sound.mp3" rem Set "FileIn=%~dp0sound.mp3" Set /A N=0 :Begin Set /A N+=1 For %%f In ("%FileIn%") Do ( If Exist "%%~dpnf%N%%%~xf" GoTo :Begin Ren %%f "%%~nf%N%%%~xf" ||Echo Error with Ren %%f "%%~nf%N%%%~xf" ) Exit /B @Echo Off Set "FileIn=Z:\Box_In\sound.mp3" rem Set "FileIn=%~dp0sound.mp3" For %%f In ("%FileIn%") Do Set "dpnf=%%~dpnf" &Set "nf=%%~nf" &Set "xf=%%~xf" Set /A N=0 :Begin Set /A N+=1 If Exist "%dpnf%%N%%xf%" GoTo :Begin Ren "%dpnf%%xf%" "%nf%%N%%xf%" ||Echo Error with Ren "%dpnf%%xf%" "%nf%%N%%xf%" Exit /B |
------- Последний раз редактировалось megaloman, 25-12-2020 в 00:20. Отправлено: 23:32, 24-12-2020 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Переименовать папку в имя файла | Sorda | Хочу все знать | 1 | 30-01-2019 19:05 | |
2010 - "Прикрутить" столбец из другого файла с условием | blackeangel | Microsoft Office (Word, Excel, Outlook и т.д.) | 16 | 08-02-2016 09:02 | |
PowerShell - [решено] С условием убрать первую букву в имени файла | c4uran | Скриптовые языки администрирования Windows | 4 | 09-12-2015 16:14 | |
CMD/BAT - [решено] Батник меняющий имя файла(как правильно переименовать)? | ofcoss | Скриптовые языки администрирования Windows | 1 | 07-09-2009 12:53 | |
Недопустимая длинна имени файла - как переименовать | blqs | Хочу все знать | 4 | 19-10-2007 08:15 |
|