0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 9
1

Переименование файлов именами существующих файлов

28.01.2019, 00:09. Показов 7559. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Помогите, пожалуйста, решить задачу. Не программист, сам бат-ники писать их не умею, знаю только, что с их помощью можно решить мой вопрос.

Условия.
Есть некая, любая, папка(dir1).
В ней лежат файлы: картинки, чаще всего jpeg. Имена файлов всегда начинаются с нумерации, первые четыре символа, в виде 0001 ... 9999.
Есть папка(dir2), но это может быть одна и та же папка(как будет нужно для бат-ника так и сделаю).
В ней лежат файлы, в том же порядке, т.е. с такой же нумерацией, как в dir1. Это нужные имена файлов. Только после первых четырех цифр идет набор символов, буквы/цифры. Длина имён произвольная. В конце всегда идет размер файла в пикселях, разный, от 7 до 9 символов. Пример: 0003_1548112401959772_cde1_e_preview_4_fade_res640x292.jpg.

Количество файлов в dir1 и dir2, соответственно, одинаковое.

Задача.
Нужно взять имена всех файлов из dir2 и заменить ими все файлы в dir1, сохраняя последовательность, т.е. первые четыре цифры. Или сделать это в одной папке, сразу с заменой файлов, из которых берутся имена.

P.S. Вроде как, есть программа позволяющая в имя файла(jpg) дописать его разрешение в пикселях, но.. Беда в том, что программа генерирующая имена файлов(dir2), часто ошибается с именем/размером на 1 пиксель. И формат картинки не всегда jpg. Поэтому просто добавить размер в имя - не вариант, к сожалению. Нужна только замена файла с заданным именем.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2019, 00:09
Ответы с готовыми решениями:

Переименование файлов по определённому правилу и их перемещение в папки с соответствующими именами
Здравствуйте. Помогите пожалуйста написать батник. Необходимо переименовать массив файлов по...

Распределение файлов в папках по подпапкам с именами, соответствующими именам этих файлов
Распределение файлов в папках по подпапкам с названием подпапок как файл. например в папке 0005...

Копирование файлов из разных каталогов в каталоги с именами, соответствующими номерам в именах файлов
Добрый день! Помогите решить проблему. Есть семь папок (cam_1, cam_2, cam_3 и.т.д) с фотографиями...

Создание папок с именами заданных файлов и перемещение этих файлов в созданные папки
Подскажите пожалуйста как по названиям файлов txt создать папки и положить в каждую из папок файл с...

13
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
28.01.2019, 01:37 2
Лучший ответ Сообщение было отмечено userbat как решение

Решение

Попробуй
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
Setlocal EnableDelayedExpansion
pushd "%userprofile%\desktop\2"
for %%a in (*.*) do (
set a=%%a
call :1 !a:~0,4!%%~xa !a:~4! !a:~0,4!
)
exit /b
:1
 
pushd "%userprofile%\desktop\1"
dir /a:-d /b "%userprofile%\desktop\1\%1" && ren %1 %3%2
popd
exit /b
Добавлено через 7 минут
Да,вопрос.Названия файлов одинаковое,а расширение тоже?ИЛи например в одной папке 0002.jpg , а в другой папке 0002_ваыаыаыв_ываыаыв.png и надо переименовать 1 файл вторым именем.
2
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 9
28.01.2019, 03:44  [ТС] 3
Большое спасибо за ответ! Да, расширение файлов тоже одинаковое. Скажите, пожалуйста, как теперь использовать этот код?) Откуда запускать файл с расширением *.cmd и как правильно указывать путь к папкам? Указал путь в кавычках: "x:\Temp\6_1" и "x:\Temp\6_2". Запустил *.cmd из произвольного места на диске, ничего не происходит)
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
28.01.2019, 12:15 4
В 3 строке путь с файлами ,имя которых имеют пиксельные значения: 0005_6543рпар_рппро_560х654.jpg и так далее.В 11 строке путь к файлам с именами от 0001 до 9999.В 12 строке надо прописать такой же путь ,как будет у тебя в 11 строке.
Батник можно запускать прямо с рабочего стола.
1
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 9
28.01.2019, 16:47  [ТС] 5
ОГРОМНОЕ спасибо, еще раз. Всё работает)

Добавлено через 3 часа 32 минуты
Можно еще маленькую просьбу?) Надо чтобы в папке dir1, скрипт заменял любое имя файла после первых четырёх цифр; соответственно само имя тоже может быть произвольным. Пример. Dir1(до скрипта): 0001_абра-кадабра.jpg Dir2: 0001_res640x480.jpg После выполнения скрипта: Dir1: 0001_res640x480.jpg
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
28.01.2019, 18:45 6
Цитата Сообщение от userbat Посмотреть сообщение
Можно еще маленькую просьбу?) Надо чтобы в папке dir1, скрипт заменял любое имя файла после первых четырёх цифр; соответственно само имя тоже может быть произвольным. Пример. Dir1(до скрипта): 0001_абра-кадабра.jpg Dir2: 0001_res640x480.jpg После выполнения скрипта: Dir1: 0001_res640x480.jpg
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
Setlocal EnableDelayedExpansion
pushd "%userprofile%\desktop\2"
for %%a in (*.*) do (
set a=%%a
call :1 !a:~0,4!%%~xa !a:~4! !a:~0,4!
)
pause
exit /b
:1
 
pushd "%userprofile%\desktop\1"
for /f "delims=" %%b in ('dir /a:-d /b') do (
set b=%%b
if "%1"=="!b:~0,4!%%~xb" ren !b! %3%2
)
popd
exit /b
0
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 9
28.01.2019, 23:40  [ТС] 7
В консоли 3 раза написал: "Ошибка в синтаксисе команды". И не переименовал 3 файла, вот их имена:
0007_CRW_3067 Panorama_preview_2_1_5_fade_4_res.jpg
0008_CRW_3087 Panorama_preview_2_5_crop 1366_fade_2_res.jpg
0013_PSD 006_My_e_preview_1_fade_res.jpg

Сначала подумал, может из-за длины имен, но потом увидел, что в переименованных были и более длинные.
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
29.01.2019, 01:11 8
userbat,
так пойдет?
(в dir1 и dir2 в точности так как в вашей задаче)
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
set "d1=C:\dir1"
set "d2=C:\dir2"
 
for /f "delims=" %%A in ('dir /a-d/b/s "%d1%"') do (
 for /f "delims=" %%a in ('dir /a-d/b/s "%d2%"^|find "%%~nA"') do ren "%%A" "%%~na%%~xA"
)
pause
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
29.01.2019, 01:25 9
Конечно не переименовал.В их именах есть пробелы.
И еще одно НО.Работает только ,если названия 0000 до 9999,если 1000-работать не будет.
Попробуй в 15 строке после REN заключить каждую подстроку в отдельные кавычки,должно аолучится типа такого: "рпрр" "оорпр"
1
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 9
29.01.2019, 01:55  [ТС] 10
Про количество понятно, без вопросов. ...только опечатка, наверное, 10 000 имелось ввиду?) ...в программировании чайник, не знал, что наличие пробелов тоже надо прописывать в задаче) ...Да, теперь всё работает! Спасибо!)

alpap, Спасибо за помощь! Работает, но в базовом варианте, по ТЗ первого поста. На тот момент не рассчитал всех тонкостей предстоящей работы. Тот же вопрос: можно чтобы в папке dir1 скрипт работал для любых имён файлов, после первых 4-х цифр в имени, включая наличие пробелов?
0
199 / 209 / 69
Регистрация: 09.02.2016
Сообщений: 1,040
29.01.2019, 02:04 11
1.Да.10000.В общем все,что более первых 4 символов.
2.Конечно можно и такое сделать.Но вмегда есть НО.Например наличие постоянного символа после первых символрв в нащвании файла.В примере это _ .Постояннин ли он, вот в чем вопрос.
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
29.01.2019, 02:51 12
Цитата Сообщение от userbat Посмотреть сообщение
можно чтобы в папке dir1 скрипт работал для любых имён файлов
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
set "d1=C:\dir1"
set "d2=C:\dir2"
 
for /f "tokens=1* delims=_" %%A in ('dir /a-d/b/s "%d1%"') do (
 for /f "delims=" %%a in ('dir /a-d/b/s "%d2%"^|find "%%~nA"') do ren "%%A_%%B" "%%~na%%~xB"
)
pause
1
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 9
29.01.2019, 14:27  [ТС] 13
Ребята, спасибо! Очень выручили! Оба варианта работают!)

"_" - постоянный символ.

alpap, при выполнении задачи скрипт написал много раз "Файл с таким именем уже существует или не найден" и "не удаётся найти указанный файл", НО переименование выполнил правильно ...наверное просто побочный эффект)
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
29.01.2019, 15:44 14
Цитата Сообщение от userbat Посмотреть сообщение
написал много раз "Файл с таким именем уже существует или не найден"
значит файлы с такими именами как в dir2 были в dir1, они переименованы не будут, но не переименуются и те в которых номер совпадет, т.е. нельзя чтобы файлы были с идентичными именами и даже с именами в которых первая цифровая часть до _ будет в нескольких файлах, такие файлы должны быть уникальны.
А чтобы не наблюдать строки ошибки занулите их вот так: ... 2>nul ren "%%A_%%B" "%%~na%%~xB"
0
29.01.2019, 15:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2019, 15:44
Помогаю со студенческими работами здесь

Копирование файлов по списку в текстовом файле в папки с именами, соответствующими расширениям этих файлов
Добрый день, уважаемые форумчане. Прошу помощи с написанием bat-файла. Значит задача такая. Есть...

Перемещение файлов в каталоги, создаваемые в соответствии с именами или частями имён этих файлов
Добрый день. Прошу помочь. Задача: в текущем каталоге имеется N-ое кол-во файлов с определенными...

Сравнение файлов в папке и создание папок с именами файлов
Нужно пройтись по папке, если есть картинка с названием, но нет папки с таким же названием, создать...

Переименование PDF-файлов в имена, берущиеся из содержимого этих файлов
Всем доброго времени суток!:) Подскажите, пожалуйста, как переименовать файл с расширением pdf,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru