Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/32: Рейтинг темы: голосов - 32, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 99

Для каждой папки добавить её имя ко всем именам файлов в ней

20.01.2014, 23:21. Показов 6614. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Подскажите, пожалуйста, как мне решить теперь следующую проблему.
В папке, в которой лежит батник (условно папка А) имеются папки B,C,D
Нужно во все файлы папки В добавить имя папки В. Во все файлы в папке С добавить имя папки С.
Нарисовал такой цикл:
Bash
1
2
3
4
5
6
7
8
9
chcp 1251>nul
rem Переименование файлов внутри папок
for /d %%a in ("*") do  (
set put="%%~fa"
 
    for /R %put% %%b in ("*.pdf") do (
        rename "%%b" "%%~nb %%~na.pdf")
                        )
pause
Если в папке А только одна вложенная папка, код с успехом справляется с задачей.
Если больше, то ко всем pdf'кам приписывается BCD, то есть строка, получившаяся объединением всех имен папок. Вроде по логике вещей у меня в переменной a хранится путь и в каждом цикле я заново запрашиваю сокращенное имя папки.
Почему так происходит? Где я ошибся?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.01.2014, 23:21
Ответы с готовыми решениями:

Как получить имя папки? Как узнать имена файлов, которые в ней есть?
Добрый вечер. Такой вопрос. Как получить имя папки? Как узнать имена файлов,которые в ней есть, и использовать эти файлы в последствии....

Добавить суффикс к именам файлов
Добрый день. Нужно добавить суффикс в название файлов в папке( .jpg). Нашел как добавить в начало названия For %%i In ("Путь...

Добавить к именам файлов пути к этим файлам
Всем привет. Вечно я с какими то глупостями пристаю к вам было /system: drwxr-xr-x 18 0 0 4096 Mar 13 14:00...

4
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
20.01.2014, 23:55
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Во-первых, актуальное значение переменной put не будет подставлено в строку 6, т.к. было присвоено внутри этого же блока цикла. Потребуется использовать отложенное раскрытие переменной.

Во-вторых, даже если Вы используете его, или решите напрямую подставить переменную цикла в For /R "%%a" - он его все равно посчитает как отложенное выполнение и не воспримет в роле опции для цикла.

Выход использовать другой вариант ключа, либо раскрывать переменную в подпрограмме:

Bash
1
2
3
4
5
6
7
8
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
for /d %%a in (*) do call :Recur "%%a"
pause
 
:Recur
for /R "%~1" %%b in (*.pdf) do echo ren "%%b" "%%~nb %~1%~xb"
0
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 99
21.01.2014, 19:16  [ТС]
Dragokas, благодарю. Но вообще не заработало (если это полный код).

Добавлено через 18 минут
Кодировку прописал 1251, так что проблема не в этом.

Добавлено через 1 час 59 минут
Мой следующий вариант:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
chcp 1251>nul
SetLocal EnableExtensions EnableDelayedExpansion
 
chcp 1251>nul
rem Переименование файлов внутри папок
for /d %%a in ("*") do  (
set p="%%~fa"
     for /R %p% %%b in ("*.pdf") do (
     for /f "delims=\ tokens=1,2,3,4,5,6" %%A in ('echo %%b') do (rename "%%b" "%%~nb %%~F.pdf")
                        )
        )
pause
exit
Теперь в имя файла добавляется имя папки столько раз, сколько папок требуется обработать. По предыдущему примеру, все файлы в папке B стали "name BBB.pdf", в С - "name ССС.pdf"
Ради эксперимента создал еще одну папку Е.
Теперь все файлы называются в папке B "name BBВB.pdf", в С - "name СССС.pdf"
0
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 99
22.01.2014, 20:42  [ТС]
Мой итоговый рабочий код
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
rem Добавление имени папки в имя файлов в папках
for /d %%a in ("*") do  (
set p="%%~fa"
Call :Recur %p%
                        )
 
 
rem функция для добавления имени папки к имени файла
:Recur
for /R %p% %%b in ("*.pdf") do (
for /f "delims=\ tokens=1,2,3,4,5,6" %%A in ('echo %%b') do (rename "%%b" "%%~nb %%~F.pdf")
                                )
exit /B
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
22.01.2014, 21:30
Artyom52, может мой код не сработал потому, что Вы не убрали ключевое слово echo.
А во всем остальном Ваш код в точности его повторяет с кучей лишних при том небезопасных элементов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.01.2014, 21:30
Помогаю со студенческими работами здесь

Если над главной диагональю минимальные элементы столбцов, то добавить всем элементам над ней среднее под ней
Дана действительная матрица размерности (n x n) Если на главной диагонали стоят минимальные элементы столбцов, то ко всем элементам,...

Как получить имя папки, если знаешь путь к ней?
Здравствуйте, Подскажите как получить имя папки, зная путь к ней. Вот что я пытаюсь сделать: using System.IO; string Name...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru