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

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

Ответить
Настройки темы
CMD/BAT - Переименование файлов в папке по имени папки_счётчик

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


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

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


Есть большое количество папок с разными именами. Все эти папки содержаться в одной исходной папке. В каждой папке содержатся по несколько файлов с разными именами.
Прошу помощи - нужен батник который будет переименовывать файлы в этих папках по названию папок_счётчик и записывать все эти переименованные файлы вместе с папками в другое место. В то время как исходное место (откуда эти файлы с папками берутся должно остаться неизменным.)


У самого никак не получается это реализовать.

Зарание спасибо.

Отправлено: 17:55, 04-03-2013

 

Ветеран


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

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


Если правильно понял
Код: Выделить весь код
@echo off
setlocal

set "sdir=c:\test"
set "ddir=d:\test"


pushd "%sdir%" || goto:eof
2>nul md "%ddir%"

for /f "tokens=*" %%i in (' dir /b /ad ') do (

    pushd "%%i"
    set "cnt=100"
    for /f "tokens=*" %%j in (' dir /b /a ') do call:1 "%%j" "%%i"
    popd
    xcopy /e "%%i" "%ddir%\%%~i\"

)

popd
goto:eof

:1
set /a cnt+=1
ren %1 "%~2_%cnt:~-2%%~x1"
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:18, 04-03-2013 | #2



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

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


Ветеран


Contributor


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

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


Вот еще вариант (Если правильно понял )
Код: Выделить весь код
@Echo Off

SetLocal EnableExtensions EnableDelayedExpansion

FOR /D %%p IN ("D:\Папка номер 1\*.*") DO (
        Set From=%%p
        Set To=!From:D:\Папка номер 1=D:\Упорядоченная папка!
        Set NewName=%%~nxp

        If Not Exist "!To!\" md "!To!\" 

	Set i=1
	FOR /F "usebackq delims=" %%f IN (`Dir "%%p\*.*" /A:-D /B /O:D /T:C 2^>nul`) DO (
		Copy "!From!\%%f" "!To!\!NewName!_!i!" >nul
		Set /A i=!i!+1
	)
)
Нумерую файлы от самых старых по времени создания. Если нужно по имени файла, то Dir должен иметь вид
Код: Выделить весь код
`Dir "%%p\*.*" /A:-D /B /O:N 2^>nul`
У меня файлы копируются, но в постановке непонятное выражение
Цитата:
В то время как исходное место (откуда эти файлы с папками берутся должно остаться неизменным.)
Если имеется ввиду, что файлов в исходном месте не должно быть, а остаться должны только исходные папки, то команду Copy заменить на Move

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


Последний раз редактировалось megaloman, 04-03-2013 в 21:06.


Отправлено: 20:52, 04-03-2013 | #3


Ветеран


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

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


2All: я лично понял так, что придётся сначала скопировать, а затем уже переименовывать. Тогда исходные файлы останутся неизменными. Впрочем, подождём автора.

Отправлено: 21:23, 04-03-2013 | #4


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


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

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


Большое Спасибо!

Вы даже не представляете как помогли.

Скрипт от Foreigner это то что нужно. (только он переименовывает и в исходной папке и в той куда копирует.)
И ещё, желательно чтобы в переименованных файлах был после подчёркивания 1 символ (пример papka_1.jpg) и только если файлов больше десяти то начиная с десятого 2 символа (papka_10.jpg)



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

То есть в исходных папках все файлы, это картинки (.jpg), а переименованные теряют это разрешение, И ещё переименованные файлы не в том порядке получаются, как были в исходной папке. Но это я сам виноват.

Как написал в первом посте так и сделали. (никаких уточняющих факторов не написал)

Уточняю:

В исходных папках файлы могут называться так: document_1.jpg, document_2.jpg и так далее, нумерация по времени создания. (первым создан файл document_1.jpg потом document_2.jpg. и т.д)

Переименованные файлы должны быть в той же нумерации.

Последний раз редактировалось Sergo_zloy, 05-03-2013 в 00:14.


Отправлено: 00:07, 05-03-2013 | #5


Аватара для gora

Ушёл из жизни


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

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


Цитата Sergo_zloy:
желательно чтобы в переименованных файлах был после подчёркивания 1 символ (пример papka_1.jpg) и только если файлов больше десяти то начиная с десятого 2 символа (papka_10.jpg) »
Очевидно, что у Вас и исходная нумерация файлов с переменным числом символов номера?
Цитата Sergo_zloy:
могут называться так: document_1.jpg, document_2.jpg »
А что будет, если число файлов больше 10?
Команда Dir, при сортировке по имени, выдает их в таком порядке:
Код: Выделить весь код
Document_1.jpg
Document_10.jpg
Document_11.jpg
Document_12.jpg
Document_13.jpg
Document_2.jpg
Document_3.jpg
Document_4.jpg
Document_5.jpg
Document_6.jpg
Document_7.jpg
Document_8.jpg
Document_9.jpg
Тут уже простой сортировкой по имени не обойдешься.

Отправлено: 08:52, 05-03-2013 | #6


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


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

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


Цитата gora:
Очевидно, что у Вас и исходная нумерация файлов с переменным числом символов номера? »
Да это так. при создании папки файлы нумеруются в порядке создания.

А можно сделать так чтобы исходное имя файла менялась на название папки, но в конце имени оставалось это пtрвоначально созданное число. (было document_x.jpg, document_y.jpg ..... document_nn.jpg, а стало papka_x.jpg, papka_y.jpg .... papka_nn.jpg)

Отправлено: 10:33, 05-03-2013 | #7


Аватара для gora

Ушёл из жизни


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

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


Цитата Sergo_zloy:
А можно сделать так чтобы исходное имя файла менялась на название папки, но в конце имени оставалось это пtрвоначально созданное число »
Можно, только нужно знать это исходное имя, и что эти имена постоянны для всех папок, т.е., имеют постоянную часть (например, document) которую и следует заменить на имя папки.

Примерно так:
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
Set folder=e:\Temp\3 3
Set OutFolder=e:\Temp\Out

xCopy /T "%folder%\*" "%OutFolder%\"
For /F "tokens=*" %%a In ('Dir /B /S /A:D "%folder%"') Do (
	For /F "tokens=*" %%i In ('Dir /B /S /A:-D "%%~a" 2^>Nul') Do (
		Set name=%%~ni
		Copy "%%i" "%OutFolder%\%%~nxa\!name:document=%%~nxa!%%~xi"
	)
)
Pause

Последний раз редактировалось gora, 05-03-2013 в 11:07.


Отправлено: 10:51, 05-03-2013 | #8


Ветеран


Contributor


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

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


Цитата:
нужен батник который будет переименовывать файлы в этих папках по названию папок_счётчик
- как просили, так и получили, про расширение тут нет ничего. Я сделал с расширением, плюс сделал выравнивание по номеру, не 1, 2,3 а 001 002 003 -считаю это более удобным. Замечание насчет замены Copy на Move остаётся в силе
Код: Выделить весь код
@Echo Off

SetLocal EnableExtensions EnableDelayedExpansion

FOR /D %%p IN ("D:\Папка номер 1\*.*") DO (
        Set From=%%p
        Set To=!From:D:\Папка номер 1=D:\Упорядоченная папка!
        Set NewName=%%~nxp

        If Not Exist "!To!\" md "!To!\" 

	Set i=1001
	FOR /F "usebackq delims=" %%f IN (`Dir "%%p\*.*" /A:-D /B /O:D /T:C 2^>nul`) DO (
		Set ii=!i!
		Set ii=!ii:~-3!
		Copy "!From!\%%f" "!To!\!NewName!_!ii!%%~xf" >nul
		Set /A i=!i!+1
	)
)
Цитата:
В исходных папках файлы могут называться так: document_1.jpg, document_2.jpg и так далее, нумерация по времени создания. (первым создан файл document_1.jpg потом document_2.jpg. и т.д)
- похоже, Вы утаиваете реальную ситуацию, поэтому при нечёткой постановке задачи трудно делать то, что Вас удовлетворит. Что творится в исходной папке? Какие там файлы по имени? Пронумерованные или смесь нумерованных и любых?

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

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

Отправлено: 10:53, 05-03-2013 | #9


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


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

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


Цитата megaloman:
как просили, так и получили, про расширение тут нет ничего »
Да, каюсь, не все условия указал. Простите я не технарь! =(

Цитата megaloman:
Что творится в исходной папке? Какие там файлы по имени? Пронумерованные или смесь нумерованных и любых? »
В исходной папке все файлы пронумерованы по дате создания, то есть имя может быть любое, но потом идёт подчёркивание и номер файла. (уточнение: в пределах папки имена файлов одинаковы, разные только числовые значения в конце имени. В разных папках имена могут быть разные)


megaloman Спасибо вам огромное! Вы даже не представляете как помогли.

Ещё одна просьба. Подскажите какую литературу почитать, чтобы хоть чуть чуть начать разбираться в написании скриптов (bat файлов).


P.S. Благодарю всех за помощь! Сам бы я год до этого доходил.

Последний раз редактировалось Sergo_zloy, 05-03-2013 в 15:41.


Отправлено: 11:50, 05-03-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Переименование файлов с заменой символов по маске Constantant Скриптовые языки администрирования Windows 41 29-03-2016 03:40
CMD/BAT - [решено] открытие файлов по расширению (не по имени) 9119 Скриптовые языки администрирования Windows 1 17-12-2012 10:52
CMD/BAT - Переименование группы файлов по дате создания Serg2010 Скриптовые языки администрирования Windows 8 14-04-2012 00:40
Переименование группы файлов по дате создания Serg2010 AutoIt 1 10-04-2012 10:25
CMD/BAT - Удаление старых файлов по имени файлов Bиктор Скриптовые языки администрирования Windows 1 19-04-2010 03:37




 
Переход