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

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

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

Пользователь


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

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


Нужен батник который добавляет к имени файла имя папки где он находится
например: есть c:\Down\RRR\1.jpg надо c:\Down\RRR_1.jpg
Папка Down основная, в неё записываются разные папки и файлы.
при одинаковых именах добавлять цифру RRR_1(1).jpg, желательно контроль длины имени файла (<260 символов).
Опустевшие папки удалять.
Заранее спасибо.

Отправлено: 14:22, 13-08-2011

 

Ветеран


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

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


Arsenik77, возможны ошибки, не тестировал:
Код: Выделить весь код
@echo off
setlocal

pushd "c:\Down" || goto:eof

for /f "tokens=*" %%i in ('dir /b /s /a-d') do call:1 "%%~dpi." "%%~nxi" "%%i"

popd
goto:eof

:1
set "file=%~nx1_%~2"

:2
set /a cnt+=1

if exist "%file%" set "file=%~nx1_%~n2(%cnt%)%~x2" && goto:2

move %3 "%file%"
2>nul rd %1
set "cnt="

Отправлено: 15:48, 13-08-2011 | #2



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

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


Пользователь


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

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


не удаляет пустые папки если там были другие папки (можно прикрутить это )
при одинаковых именах просто заменяет файлы, надо чтоб переименовывал.

Отправлено: 18:38, 13-08-2011 | #3


Ветеран


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

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


Arsenik77,
На счет файлов не знаю, все отрабатывает корректно, по крайней мере на тестовой папке. Для удаления директорий надо исправить:
Код: Выделить весь код
for /f "tokens=*" %%i in (' "dir /b /s /a-d | sort /r" ') do call:1 "%%~dpi." "%%~nxi" "%%i"
ЗЫ. Разобрался, что значит замещает, у меня все тестовые файлы были одинаковые. Исправил:
Код: Выделить весь код
@echo off
setlocal

for /f "tokens=*" %%i in (' "dir /b /s /a-d "C:\Down" | sort /r" ') do call:1 "%%~dpi." "%%~nxi" "%%i"
goto:eof

:1
set "file=%~nx1_%~2"

:2
set /a cnt+=1

if exist "C:\Down\%file%" set "file=%~nx1_%~n2(%cnt%)%~x2" && goto:2

move %3 "C:\Down\%file%"
2>nul rd %1
set "cnt="

Последний раз редактировалось Foreigner, 13-08-2011 в 19:15.


Отправлено: 19:02, 13-08-2011 | #4


Пользователь


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

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


на счет файлов понял, а что исправить (непонятно)??

Отправлено: 19:17, 13-08-2011 | #5


Ветеран


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

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


Arsenik77,
Просто скопируй второй вариант и замени все "C:\Down" если у тебя другой путь.

Отправлено: 19:21, 13-08-2011 | #6


Пользователь


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

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


Папки и подпапки все равно не удаляет.
При каждом новом запуске к имени добавляется "down" это не хорошо (батник будет запускаться каждый час), надо чтоб батник отрабатывал только папки и подпапки в "Down", а сами файлы находящиеся в корне ("Down") не трогал.

Этот хорошо удаляет все папки, но только я не знаю куда его прикрутить.
Цитата:
@echo off

:again
for /f "tokens=*" %%i in (' dir /b /s /ad "c:\Down" ') do 2>nul rd /q "%%i" && goto:again

Отправлено: 19:33, 13-08-2011 | #7


Ветеран


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

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


Цитата Arsenik77:
Папки и подпапки все равно не удаляет. »
Не знаю даже, у меня все удаляет. Чтобы не трогать файлы в самой C:\Down:
Код: Выделить весь код
@echo off
setlocal

for /d %%i in ("C:\down\*") do (

    for /f "tokens=*" %%j in (' "dir /b /s /a-d "%%i" | sort /r" ') do call:1 "%%~dpj." "%%~nxj" "%%j"

)

popd
goto:eof

:1
set "file=%~nx1_%~2"

:2
set /a cnt+=1

if exist "C:\Down\%file%" set "file=%~nx1_%~n2(%cnt%)%~x2" && goto:2

move %3 "C:\Down\%file%"
2>nul rd "%~dpnx1"
set "cnt="

Последний раз редактировалось Foreigner, 13-08-2011 в 19:55.

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

Отправлено: 19:42, 13-08-2011 | #8


Пользователь


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

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


С переименовкой все хорошо!
Скажите куда прописать.
Код: Выделить весь код
:again
for /f "tokens=*" %%i in (' dir /b /s /ad "c:\Down" ') do 2>nul rd /q "%%i" && goto:again

Отправлено: 19:47, 13-08-2011 | #9


Ветеран


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

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


Arsenik77,
Просто скопируй второй вариант, полностью. Я там исправил переименовку, и удаление пустых папок. Если не получится, то будем думать, как решить проблему. Твой пример с удалением не очень подходит.

PS. Посмотрел, вообще можно и так. Замени 2>nul rd "%~dpnx1" На эти две строчки (:again)

Последний раз редактировалось Foreigner, 13-08-2011 в 20:06.


Отправлено: 19:59, 13-08-2011 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование имени папки/файла в буфер обмена cpp.svet Скриптовые языки администрирования Windows 3 06-07-2011 19:16
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. OSArev Скриптовые языки администрирования Windows 2 30-01-2011 11:58
Ошибка - Каракули в реестре "Синтаксическая ошибка в имени файла,имени папки или метке тома" permas Microsoft Windows 2000/XP 2 20-02-2010 19:30
Как переименовать имя аккаунта в XP с изменением имени его папки и других файлов. Alikber Microsoft Windows 2000/XP 4 06-03-2006 00:15
Как получить имя текущего пользователя для использования его в имени файла Denchik Автоматическая установка Windows 2000/XP/2003 1 25-01-2006 22:33




 
Переход