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

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

Ответить
Настройки темы
CMD/BAT - [решено] Переименовать файла с условием...

Старожил


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

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


Изменения
Автор: 9119
Дата: 23-12-2020
Добрый.

Есть файл - 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
Благодарности: 564

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


Понятное дело несколько вопросов:
- как файл попадает в папку (чем/кем заносится/создается)
- какие еще могут быть файлы в папке, вообще важно именно нет ли файлов с идентичным именем другого расширения

Отправлено: 23:50, 23-12-2020 | #2



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

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


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	Set "FName=sound.mp3"

	Set /A N=0
	Call :MyRen "%BoxIn%" "%FName%"
Pause
Exit /B

:MyRen
	Set /A N+=1
	If Exist "%~1\%~n2%N%%~x2" GoTo :MyRen
	Ren "%~1\%~2" "%~n2%N%%~x2" ||Echo Error with Ren "%~1\%~2" "%~n2%N%%~x2"
Exit /B
Часто mp3-файлы в имени содержат символы, которые CMD не в состоянии обработать. Так что надо понимать ограниченность CMD

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


Последний раз редактировалось megaloman, 24-12-2020 в 00:11.

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

Отправлено: 23:54, 23-12-2020 | #3


Ветеран


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

Профиль | Отправить 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
Благодарности: 10

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


Цитата alpap:
- как файл попадает в папку (чем/кем заносится/создается)
- какие еще могут быть файлы в папке, вообще важно именно нет ли файлов с идентичным именем другого расширения »
1_ копированием в папку.
2 - только этот файл.

Цитата Iska:
Мои пять копеек: »
спасибо. это работает.

Отправлено: 09:32, 24-12-2020 | #5


Ветеран


Contributor


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

Профиль | Отправить 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
))
В чем мучения: Не понимаю, как работает цикл FOR /L %%N. Если поставить очень большой его предел, получим, несмотря на то, что
If отработал,
Exit /B вроде бы должен прекратить выполнение,
но цикл продолжает как-то крутиться и время выполнения скрипта тем больше, чем больше предел.
Еще медный грош, ИМХО, так удобнее
Код: Выделить весь код
@Echo Off
	Call :MyRen "Z:\Box_In\sound.mp3"
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 Error with Ren %1 "%~n1%N%%~x1"
EndLocal
Exit /B

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


Последний раз редактировалось megaloman, 24-12-2020 в 10:14.

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

Отправлено: 09:49, 24-12-2020 | #6


Старожил


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

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


megaloman, спасибо.
правда
Код: Выделить весь код
Echo Error with Ren %1 "%~n1%N%%~x1"
как по мне, лишнее, т.к перед этим в консоль уже выводится что файл не найден.
получается как дубль)

Для себя оставил так:
Скрытый текст
Код: Выделить весь код
@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


Ветеран


Contributor


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

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


9119, ИМХО, скрипач CD не нужен.
Цитата 9119:
Для выхода нажмите любую кнопку »
Такие сообщения сто лет тому назад меня одна бухгалтерша отучила делать. В одном из моих творений я его применил, бухгалтерша из более чем сотни кнопок выбрала Pause

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


Последний раз редактировалось megaloman, 24-12-2020 в 11:36.


Отправлено: 11:29, 24-12-2020 | #8


Ветеран


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

Профиль | Отправить 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


Ветеран


Contributor


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

Профиль | Отправить 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



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

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

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




 
Переход