|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Добавление имени папки в имя файлов, которые лежат в этой папке |
|
|
CMD/BAT - Добавление имени папки в имя файлов, которые лежат в этой папке
|
Новый участник Сообщения: 8 |
Профиль | Отправить PM | Цитировать Добрый день, нужна помощь. Написал тут не много, а дальше трабл. Как сделать так чтоб при нажатии несколько раз на бат имя папки в файле не дублировалось, а лишь менялось если имя папки изменилось?
rem функция для добавления имени папки к имени файла :Recur for /R %p% %%b in ("*.dwg") do ( for /f "delims=\ tokens=1,2,3,4,5,6" %%A in ('echo %%b') do (rename "%%b" "%%~F %%~nb.dwg") ) for /R %p% %%b in ("*.xlsx") do ( for /f "delims=\ tokens=1,2,3,4,5,6" %%A in ('echo %%b') do (rename "%%b" "%%~F %%~nb.xlsx") ) exit /B |
|
Отправлено: 11:36, 26-06-2018 |
Ветеран Сообщения: 2723
|
Профиль | Отправить PM | Цитировать sway38, Лучше бы Вы изложили задачу, а не демонстрировали трабл.
У Вас есть путь к папке в переменной %p% Вы ищете все файлы по маске. В переменной %%b получаете полные пути К именам исходных файлов впереди прибавляется имя папки шестого уровня вложенности, в том числе и для файлов, расположенных более глубоко, или пробел, если такого уровня вложенности у файла нет. Смысл задачи в этом случае от меня ускользает Вопросы: 1. Что, те файлы, которые переименовываются, расположены на самом низком уровне вложенности (у Вас он =6)? Или надо рассматривать только файлы на 6 уровне вложенности? 2. В именах папок и непереименованных файлов возможны пробелы? |
------- Отправлено: 13:01, 26-06-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать задача такая. Есть папка с названием (ХХХХ) в ней файлы и папки(имена этих папок роли не играют) с файлами. Нужно добавить имя папки с названием (ХХХХ) к именам файлов внутри этой папки и файлам внутри папок вложенных в эту папку. Сделать так чтобы при нажатии на батник несколько раз имя папки не добавлялось несколько раз к именам файлов, а менялось только если изменилось имя папки с названием (ХХХХ). Проблема в том что количество вложенных папок везде разное, поэтому 6 уровней вложенности. Объяснил как смог... Вот как на картинке, если меняется BTS38-151GUL26, то батник меняет имя его и во всех вложенных файлах, не дублируя!
|
Последний раз редактировалось sway38, 26-06-2018 в 15:45. Отправлено: 15:36, 26-06-2018 | #3 |
Ветеран Сообщения: 2723
|
Профиль | Отправить PM | Цитировать @Echo Off Set "BoxIn=Z:\Box_Arc\xxxx" Set "Mask="*.dwg" "*.xlsx"" For /R "%BoxIn%" %%f In (%Mask%) Do Call :DirFile "%BoxIn%" "%%f" "%%~nxf" GoTo :Eof :DirFile For /F "tokens=1,2 delims=#" %%i IN (%3) DO ( If "%%j"=="" Ren %2 "%~nx1#%~3" &&Exit /B 0 If /I "%%i#"=="%~nx1#" Exit /B 0 If /I Not "%%i#"=="%~nx1#" Ren %2 "%~nx1#%%j" &&Exit /B 0 ) Exit /B 1 |
------- Отправлено: 17:41, 26-06-2018 | #4 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать sway38
допустим вот так значит к именам всех файлов вглубь меняющей имя папки "papkaA" (на данном этапе) будет добавлено имя этой папки через знак нижнего подчеркивания (пример: было "file1.txt" стало "papkaA_file1.txt"). Этот знак вынес в переменную на случай, если он уже присутствует в именах файлов, то использовать его нельзя и надо заменить на другой допустимый в именах, например: "-" @echo off set "sh=_" call :# "papkaA" pause& exit :# setlocal enabledelayedexpansion if exist "%~1" for /f "delims=" %%f in ('dir /a-d/b/s "%~1"') do set "nf=%%f"& echo "%%f"|>nul find "%sh%" && ren "%%f" "%~1%sh%!nf:*%sh%=!" || ren "%%f" "%~1%sh%%%~nxf" endlocal exit /b (кодировка у меня везде 866 и не забываем про "_", перед первым запуском его не должно быть в именах файлов) |
|
Последний раз редактировалось alpap, 26-06-2018 в 18:12. Отправлено: 17:54, 26-06-2018 | #5 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать megaloman, Почему то при добавлении имени папки к имени файла получается Имяпапки#Имяфайла. А можно сделать так чтобы не нужно было заходить в батник и менять путь ручками, а просто кинул батник в папку с файлами которые нужно исправить и он сам брал имя папки в которой лежит?
|
Последний раз редактировалось sway38, 26-06-2018 в 18:32. Отправлено: 18:10, 26-06-2018 | #6 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать alpap, не фунциклирует
|
Отправлено: 18:31, 26-06-2018 | #7 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата sway38:
@echo off set "sh=_" set "d=%~dp0" setlocal enabledelayedexpansion for %%a in ("%d:~0,-1%.") do set "np=%%~nxa" for /f "delims=" %%f in ('dir /a-d/b/s "."^|find /v "%~f0"') do set "nf=%%f"& echo "%%f"|>nul find "%sh%" && ren "%%f" "%np%%sh%!nf:*%sh%=!" || ren "%%f" "%np%%sh%%%~nxf" endlocal exit Цитата sway38:
|
||
Отправлено: 18:42, 26-06-2018 | #8 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать вот папка "papka0" с файлами и bat, помещенному в папку
Файл 153068 после 1го запуска Файл 153069 изменил имя папки на "papkaA" Файл 153070 запуск уже в этой папке Файл 153071 |
Последний раз редактировалось alpap, 01-12-2018 в 18:09. Отправлено: 18:58, 26-06-2018 | #9 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать хмм ну по юзерски))) создал .txt внутри папки где переименовываются файлы, открыл через notepad++, вставил код, 866, save .bat. двойной клик. И ничего не изменилось. Можно прописать для каких типов файлов в папке нужно переименование? .dwg, .xlsx
https://c.radikal.ru/c18/1806/ee/1f6db040fc7b.jpg |
Отправлено: 19:05, 26-06-2018 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Добавление названия папки к имени файлов. | Viktor99 | Скриптовые языки администрирования Windows | 7 | 16-11-2017 17:56 | |
VBS/WSH/JS - Копирование файлов в папке и ее подпапках которые не старше 5минут | gremlintv2 | Скриптовые языки администрирования Windows | 1 | 30-03-2016 14:30 | |
CMD/BAT - удаление файлов которые содержаться в папке 1 из 2рой папки | PunkRediska | Скриптовые языки администрирования Windows | 1 | 31-05-2013 19:53 | |
CMD/BAT - [решено] Добавление к имени файла имя папки | Arsenik77 | Скриптовые языки администрирования Windows | 12 | 13-08-2011 20:28 | |
Как переименовать имя аккаунта в XP с изменением имени его папки и других файлов. | Alikber | Microsoft Windows 2000/XP | 4 | 06-03-2006 00:15 |
|