Имя пользователя:
Пароль:
 | Правила  

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

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

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


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

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


Добрый день! Помогите, пожалуйста, реализовать следующее:

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

строка 1 - текущее имя файла 1
строка 2 - новое имя файла 1
строка 3 - текущее имя файла 2
строка 4 - новое имя файла 2
и т.д.

Затык в чтении второго параметра (во что переименовывать) для команды ren.

Отправлено: 12:09, 27-02-2020

 

Аватара для Elven

Ветеран


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

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


Цитата shraybikus:
цикл выполняется только по А »
что по второму варианту? тот который
Код: Выделить весь код
Код: Выделить весь код
for /f "tokens=1-2 delims=_" %%A in (file) do (
echo ren %%A %%B
)
и для которого нужны пары имен в одну строку через подчеркивание

Отправлено: 16:08, 27-02-2020 | #11



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

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


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


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

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


Цитата Elven:
для которого нужны пары имен в одну строку через подчеркивание »
Это будет менее предпочтительно, т.к. подчёркивание может быть в имени файла.

Отправлено: 16:14, 27-02-2020 | #12


Ветеран


Contributor


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

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


shraybikus,
Цитата shraybikus:
Нужно их переименовать согласно списку, который содержится в текстовом файле: »
Цитата DJ Mogarych:
пример файла приведите, есть ли там пути, расширения и т. д. »
Просили ведь файл, а не его изображение. Суть - какая там кодировка. Предположил, что 1251
Если нужно переименовать файлы в конкретной папке
Код: Выделить весь код
@Echo Off
cls
>nul Chcp 1251	
	Set "BoxIn=Z:\Box_In\29721"
	Set "RenFile=Z:\Box_In\restore.txt"

	Call :ReInDir "%RenFile%" "%BoxIn%"
pause
Exit /B 0

:ReInDir
	If Not Exist "%~2\*.*" Exit /B 1
	Set /A i=0
	FOR /F "usebackq delims=" %%s IN (`2^>nul More "%~1"`) Do (
		Set /A i+=1
		Call :ReFile %%i%% "%%s" %2
	)
Exit /B

:ReFile
	If %1==1 Set "OldName=%~2" &Exit /B
	Set "NewName=%~2"
	If Exist "%~3\%OldName%" Echo Ren "%~3\%OldName%" "%NewName%"
	Set /A i=0
Exit /B 0
Если есть список папок
Код: Выделить весь код
@Echo Off
cls
>nul Chcp 1251	

	Set "BoxIn=Z:\Box_In"
	Set "RenFile=Z:\Box_In\restore.txt"
	Set SubDir="00142" "08278" "14117" "22" "3333333" "29721" "32545" "32730"

	For %%d In (%SubDir%) Do Call :ReInDir "%RenFile%" "%BoxIn%\%%~d"
pause
Exit /B 0

:ReInDir
	If Not Exist "%~2\*.*" Exit /B 1
	Set /A i=0
	FOR /F "usebackq delims=" %%s IN (`2^>nul More "%~1"`) Do (
		Set /A i+=1
		Call :ReFile %%i%% "%%s" %2
	)
Exit /B

:ReFile
	If %1==1 Set "OldName=%~2" &Exit /B
	Set "NewName=%~2"
	If Exist "%~3\%OldName%" Echo Ren "%~3\%OldName%" "%NewName%"
	Set /A i=0
Exit /B 0
Пример файла restore.txt
Код: Выделить весь код
14117
Приложение № 1.pdf
08278
Приложение № 2.xlsx
32545
Приложение № 3.docx
0000142
Приложение № 6666.docx
29721
Приложение № 4.docx
32730
Приложение № 5.docx
30000142
Приложение № 36666.docx
00142
Приложение № 6.docx
Уберите Echo перед Ren - я сейчас его красным выделил

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


Последний раз редактировалось megaloman, 27-02-2020 в 18:32.

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

Отправлено: 16:34, 27-02-2020 | #13


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


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

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


Вложения
Тип файла: txt list.txt
(167 байт, 14 просмотров)

Цитата megaloman:
Если нужно переименовать файлы в конкретной папке »
Да, именно это и нужно.
Попробовал переименовать, вроде команда строится правильно:
Ren "C:\123\1\04238" "Приложение № 1.pdf"
Ren "C:\123\1\10227" "Приложение № 2.xlsx"
Ren "C:\123\1\03227" "Приложение № 3.docx"
Ren "C:\123\1\32591" "Приложение № 4.docx"
Ren "C:\123\1\08606" "Приложение № 5.docx"
Ren "C:\123\1\30239" "Приложение № 6.docx"
Для продолжения нажмите любую клавишу . . .

но самого переименования - не происходит. Файл прикрепил.

Отправлено: 16:53, 27-02-2020 | #14


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


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

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


Цитата megaloman:
берите Echo перед Ren »
Во, класс! Кодировку тоже убрал, а то кракозябры выскочили. Спасибище, то что надо!!!

Отправлено: 17:03, 27-02-2020 | #15


Ветеран


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

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


Без каких-либо проверок:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sListFile=list.txt

for /f "usebackq delims=" %%i in (`type "%sListFile%" ^| find.exe /v /c ""`) do set /a iCount = %%~i / 2

<"%sListFile%" (
	for /l %%i in (1, 1, %iCount%) do (
		set /p sSourceFile=
		set /p sDestFile=
		
		echo ren "!sSourceFile!" "!sDestFile!"
	)
)

endlocal
exit /b 0

Последний раз редактировалось Iska, 28-02-2020 в 18:05.

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

Отправлено: 18:27, 27-02-2020 | #16


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


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

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


Цитата Iska:
Без каких-либо проверок: »
Да, с красным echo тоже не работает. И файл sListFile - без расширения не прокатывает. И путь для обработки файлов - не указать.
Но это всё мелочи, наверно.

Кстати, забыл сказать, для чего мне это понадобилось. Есть такой файлобменник "безлимитный" usercloud с отличной скоростью на upload. В бесплатной версии там ограничение 49 мегабайт на файл, чтобы он не удалился через месяц неактивности. Я залил туда многотомный архив с томами по 49 мегабайт. Но и он тоже удалился спустя месяц, потому что? похоже, многотомный архив тоже воспринимается как один файл хоть об этом нигде не написано у них на сайте.
Для того, чтобы попытаться обойти данное ограничение, я нашёл и допилил скрипт переименовывающий файлы случайными цифрами. Список переименования также пожал в RAR с паролем, и положил в ту же папку с многотомным архивом. Продолжаю вести наблюдение.

Большое спасибо всем за помощь.

Отправлено: 09:22, 28-02-2020 | #17


Ветеран


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

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


Цитата shraybikus:
Да, с красным echo тоже не работает. »
echo — только для того, чтобы посмотреть на команду. Для реального переименования echo нужно убрать.

Цитата shraybikus:
И файл sListFile - без расширения не прокатывает »
«Прокатывает». Не «прокатывает» — если в пути/имени файла пробельные символы. Достаточно просто обрамить %sListFile% кавычками. Другое дело, что переменную окружения завести — я завёл, а вот пользовать её — забыл. Я поправил код выше.

Цитата shraybikus:
И путь для обработки файлов - не указать. »
А зачем его нужно указывать отдельно? Достаточно всего лишь исполнять пакетный файл в искомом каталоге.

Отправлено: 18:08, 28-02-2020 | #18



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Переименование файлов f1rstonlyone@vk Скриптовые языки администрирования Windows 6 20-12-2017 16:20
CMD/BAT - переименование файлов Alexander_88 Скриптовые языки администрирования Windows 10 25-07-2017 21:30
CMD/BAT - Переименование файлов gremlintv2 Скриптовые языки администрирования Windows 3 27-06-2016 23:42
CMD/BAT - Переименование файлов Verilog Скриптовые языки администрирования Windows 4 10-12-2014 14:55
Переименование файлов B1010 Видео и аудио: обработка и кодирование 0 28-09-2014 11:38




 
Переход