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

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

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

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


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

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


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


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

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

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

 

Ветеран


Contributor


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

Профиль | Отправить 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!\" 
        
        FOR %%f IN ("%%p\*.*") DO (
		Call :Number "%%~nf"
		If Not !Num!==0 Copy "%%f" "!To!\!NewName!_!Num!%%~xf" >Nul
	)
)
GoTo :Eof

:Number

Set Num=0
Set N=%~1

Set NN=%N:~-1%
Set M=%N:~-2%
If "%M:~0,1%"=="_" Set Num=00%NN%& GoTo :Eof

Set NN=%N:~-2%
Set M=%N:~-3%
If "%M:~0,1%"=="_" Set Num=0%NN%& GoTo :Eof

Set NN=%N:~-3%
Set M=%N:~-4%
If "%M:~0,1%"=="_" Set Num=%NN%& GoTo :Eof
Ограничение: Пронумерованных файлов в папке не может быть более 999. При желании эту цифру можно увеличить. При отсутствии номера, символа _ перед ним, превышения числа ограничения файл скопирован не будет

Замечание насчет замены Copy на Move остаётся в силе

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


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


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



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

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


Аватара для gora

Ушёл из жизни


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

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


Цитата Sergo_zloy:
В исходной папке все файлы пронумерованы »
Код: Выделить весь код
@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
		Call :_ExtractN
		Copy "%%i" "%OutFolder%\%%~nxa\%%~nxa_!name!%%~xi"
	)
)
Pause
Exit

:_ExtractN
Set name=%name:*_=%
If Not "%name%"=="%name:*_=%" GoTo :_ExtractN
GoTo :EOF
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:49, 06-03-2013 | #12


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


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

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


Возможно для кого-то несложно будет написать скрипт создания папок от 01 до 12?

Отправлено: 10:06, 17-01-2014 | #13


Ветеран


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

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


Самое простое:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /l %%i in (1, 1, 9)   do md "0%%i"
for /l %%i in (10, 1, 12) do md  "%%i"

endlocal
exit /b 0
Можно, конечно, и одним проходом — с дополнительной переменной, обрезанием с конца, но так проще.

Отправлено: 16:58, 17-01-2014 | #14



Компьютерный форум 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




 
Переход