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

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

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

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


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

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


Изменения
Автор: dassen
Дата: 07-01-2019
Есть папки с именами F-LDR*. Нужно добавить к их именам суффикс __MY, т.е. привести к виду F-LDR*__MY.
И противоположная задача (более важная):
Есть папки с именами F-LDR*__MY. Нужно убрать из их имен суффикс __MY, т.е. привести к виду F-LDR*.
(ReNamer такое делает, в т.ч. и с папками, но хотелось бы то же выполнять из пакетного файла - быстрее и удобнее).
Интересует только CMD/BAT.
Все папки непустые, будут лежать в одном каталоге и на одном уровне с требующимся батником; подпапки не трогать.
(Гуглил, но ничего подобного для папок не нашел... Если возможно, научите. Спасибо!)

Отправлено: 00:15, 07-01-2019

 

Аватара для YuS_2

Crazy


Contributor


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

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


С такой постановкой задачи:
Цитата dassen:
Интересует только CMD/BAT. »
Вот это вряд ли:
Цитата dassen:
Если возможно, научите. Спасибо!) »
Хотя, в принципе, можно примерно так:
Код: Выделить весь код
for /f "delims=" %%i in ('dir /b/ad "F-LDR<"') do echo ren "%%~i" "%%~i__MY"
echo - в боевых условиях удалить.
обратное действие, тоже можно накидать подобным способом, через цикл, только имена каталогов придется передавать через промежуточную переменную и затем, заменой удалять ненужные символы, примерно так:
Код: Выделить весь код
... do (
    set "var=%%~i"
    echo ren "%%~i" "!var:__MY=!"
)
восклицательный знак тут не случайно, ибо внутри скобок придется использовать отложенное раскрытие... ну или использовать вызов call и стандартное %-раскрытие...

ЗЫ
Но возникает закономерный вопрос: Вам шашечки или ехать?
Лучше изучайте повершелл, в нем многое гораздо проще делать...

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 07-01-2019 в 08:13.

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

Отправлено: 08:07, 07-01-2019 | #2



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

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


Ветеран


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

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


Цитата YuS_2:
можно примерно так: »
Туда попадают и ранее переименованные каталоги, наподобие:
Цитата:
Код: Выделить весь код
C:\Мои проекты\0235\01>dir /b/ad "F-LDR<"
F-LDR001__MY
F-LDR002
F-LDR003__MY
F-LDR004
Колитесь, коллега, откуда брали про «<» в маске, и что он даёт?

Отправлено: 08:48, 07-01-2019 | #3


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Iska:
Туда попадают и ранее переименованные каталоги, наподобие: »
Ну, тут надо выбирать, либо туда, либо сюда... то бишь, сначала удаляем суффиксы, потом все скопом переименовываем, как требуется.
К тому же, в условии не сказано, что там уже присутствуют каталоги с суффиксами...

Цитата Iska:
Колитесь, коллега, откуда брали про «<» в маске, и что он даёт? »
Дежавю, однако.

-------
scio me nihil scire. Ѫ

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

Отправлено: 09:29, 07-01-2019 | #4


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


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

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


YuS_2, спасибо!
Цитата YuS_2:
Хотя, в принципе, можно примерно так: »
F-LDR* to F-LDR*__MY работает отлично. Но гораздо больше чисто практически интересует что-то подобное именно для F-LDR*__MY to F-LDR*, т.к. можно было бы вставить готовый код в мой "рабочий" батник - поэтому:
Цитата dassen:
Интересует только CMD/BAT. »
А что касается:
Цитата YuS_2:
Лучше изучайте повершелл »
, то если бы написание более-менее сложных скриптов было бы каждодневной необходимостью (а не от случая к случаю), то так бы и сделал... (наверное, уже на пенсии).
Другими словами, на сегодняшнй день очень интересует:
Цитата dassen:
Есть папки с именами F-LDR*__MY. Нужно убрать из их имен суффикс __MY, т.е. привести к виду F-LDR*. »
Вот только:
Цитата YuS_2:
тоже можно накидать подобным способом »
- это точно не с моими теперешними навыками... Выручайте...

Отправлено: 10:29, 07-01-2019 | #5


Ветеран


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

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


Цитата YuS_2:
Дежавю, однако. »
Угу. Ну, ещё раза два-три спрошу, опосля, может быть, запомню .


dassen, что делать, если есть, например, и каталог F-LDR003, и каталог F-LDR003__MY?

There.cmd
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
	`2^>nul dir /b /a:d ^| findstr.exe /i /r /c:"^F-LDR.*" ^| findstr.exe /i /v /r /c:".*__MY$"`
) do (
	if not exist "%%~i__MY\." (
		echo Rename folder [%%~i] into [%%~i__MY].
		ren "%%~i" "%%~i__MY"
	) else (
		echo Can't rename folder [%%~i] into [%%~i__MY] because folder [%%~i__MY] already exists.
	)
)

endlocal
exit /b 0
…and…
Back Again.cmd
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
	`2^>nul dir /b /a:d ^| findstr.exe /i /r /c:"^F-LDR.*__MY$"`
) do (
	set sFolderName=%%~i
	set sNewFolderName=!sFolderName:~0,-4!

	if not exist "!sNewFolderName!\." (
		echo Rename folder [%%~i] into [!sNewFolderName!].
		ren "%%~i" "!sNewFolderName!"
	) else (
		echo Can't rename folder [%%~i] into [!sNewFolderName!] because folder [!sNewFolderName!] already exists.
	)
)

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

Отправлено: 11:48, 07-01-2019 | #6


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


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

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


Немного помыслил...
В принципе, мне все равно, каким суффиксом изначально было для себя метить папки F-LDR*. Главное - чтобы можно было в нужный момент этот суффикс отбросить.
И если использовать суффикс
Код: Выделить весь код
.__MY
вместо
Код: Выделить весь код
__MY
, то с задачей F-LDR*.__MY to F-LDR* вполне справится этот код:
Код: Выделить весь код
for /f %%i in ('dir /b/ad "F-LDR*.__MY"') do ren "%%i" "%%~ni"
(на идею натолкнул код от YuS_2 ).
Необычно? Но работает. Может, что-то "по-грамотному" подправить/добавить?
"А можно такое же, но без точки?"
P.S.
Отправил это сообщение еще до того, как обнаружил, что уже есть предыдущее от Iska.
Прошу учесть...

Последний раз редактировалось dassen, 07-01-2019 в 15:33.


Отправлено: 12:19, 07-01-2019 | #7


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


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

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


Iska, спасибо! Именно то, что требовалось!
Цитата Iska:
dassen, что делать, если есть, например, и каталог F-LDR003, и каталог F-LDR003__MY? »
Именно то, что и делает ваш There.cmd:
к F-LDR* добавлять суффикс __MY
к F-LDR*__MY еще один суффикс __MY добавлять не нужно.
P.S.
Если бы прочитал Ваше сообщение до написания своего

Цитата dassen:
Немного помыслил... »
, то свое бы уже не писал.

Последний раз редактировалось dassen, 07-01-2019 в 20:23.


Отправлено: 13:13, 07-01-2019 | #8


Ветеран


Contributor


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

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


Удаление суффикса
Код: Выделить весь код
@Echo Off
cls
	Set "Pref=F-LDR"
	Set "Suff=__MY"
	Set "Ext=.*"

	Set "BoxIn=%~dp0"
	If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%"
 
	FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxIn%\%Pref%*%Suff%%Ext%" /B /A:D`) DO (
		Call :MyDel "%BoxIn%\%%d" "%Suff%"
	)	
Pause
GoTo :Eof

rem Удаление суффикса
:MyDel
	Set "Name=%~n1:"
	Call Set "Name=%%Name:%~2:=%%"
	If Not "%~n1:%~x1"=="%Name%%~x1" Ren %1 "%Name%%~x1" ||(Echo Ren %1 --^> "%Name%%~x1" already exists &Echo.)
GoTo :Eof
Добавление суффикса
Код: Выделить весь код
@Echo Off
cls
	Set "Pref=F-LDR"
	Set "Suff=__MY"
	Set "Ext=.*"

	Set "BoxIn=%~dp0"
	If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%"

	FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxIn%\%Pref%*%Ext%" /B /A:D`) DO (
		Call :MyAdd "%BoxIn%\%%d" "%Suff%"
	)	
Pause
GoTo :Eof

rem Добавление суффикса если его еще нет
:MyAdd
	Set "Name=%~n1:"
	Call Set "Name=%%Name:%~2:=%%"
	If "%~n1:%~x1"=="%Name%%~x1" Ren %1 "%~n1%~2%~x1" ||(Echo Ren %1 --^> "%~n1%~2%~x1" already exists &Echo.)
GoTo :Eof
Цитата dassen:
.__MY »
Это уже не суффикс, а окончание (или, как принято, расширение), и для него надо спеть другую песТню.
Цитата
Тестировал на наборе (туда-сюда) на папках с расширениями и без
:
F-LDRkuku__MY
F-LDRkuku__MY.ttt
F-LDRkuku__MY.__MY
F-LDRтра ля ля__MY
F-LDRтра ля ля__MY.kkk
F-LDRтра ля ля__MY.__MY

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


Последний раз редактировалось megaloman, 07-01-2019 в 13:35.

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

Отправлено: 13:18, 07-01-2019 | #9


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата dassen:
- это точно не с моими теперешними навыками... Выручайте... »
Дык, это же почти готовое решение, т.е. берем этот код:
Код: Выделить весь код
for /f "delims=" %%i in ('dir /b/ad "F-LDR<"') do echo ren "%%~i" "%%~i__MY"
и превращаем его в такой:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b/ad "F-LDR<"') do (
    set "var=%%~i"
    echo ren "%%~i" "!var:__MY=!"
)

-------
scio me nihil scire. Ѫ

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

Отправлено: 13:38, 07-01-2019 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Переименование файла по маске. Damien_here Скриптовые языки администрирования Windows 5 13-06-2017 12:51
CMD/BAT - Пакетное переименование файлов по маске Viktor99 Скриптовые языки администрирования Windows 1 15-08-2016 23:25
CMD/BAT - [решено] Переименование имени файла по маске Дмитрий_Кульгейко@vk Скриптовые языки администрирования Windows 10 12-07-2016 20:15
CMD/BAT - Переименование фалов по маске mych_man Скриптовые языки администрирования Windows 19 01-06-2016 15:00
CMD/BAT - Переименование файлов по маске tobornforlife@vk Скриптовые языки администрирования Windows 5 24-02-2014 17:07




 
Переход