Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Пакетное переименование с использованием алфавитного счётчика (http://forum.oszone.net/showthread.php?t=175355)

kotik147 10-05-2010 23:14 1410567

Пакетное переименование с использованием алфавитного счётчика
 
OS XP... CMD... Есть общая папка: d:\mail_out\ с подпапками: d:\mail_out\15\ d:\mail_out\29\ и т.п. d:\mail_out\55\
Во вложенные папки юзеры кидают файлы:
*.doc *.xls
!!! Имена файлов кириллица или транслит количество файлов не определено.
Надо сделать CMD для сортировки файлов по дате создания с последующим переименованием всех файлов во всех подпапках по шаблону:
ATЕ+Номер подпапки+Порядковый номер+Текущая дата.маска, где
ATЕ=21 административно-территориальная единица (SET my_Ate=21)
Номер подпапки=Имя папки где лежат файлы (структурный раздел организации)
Порядковый номер=от A до Z длина 1 символ, шаг 1 !!! для каждой подпапки свой счетчик
Текущая дата=дата вида DD (SET t_Date=%DATE:~0,2%)
Конечное имя файла вида 7.3
d:\mail_out\15\2115B09.xls самый новый
2115A09.xls самый старый
2115B09.doc самый новый
2115A09.doc самый старый
Заархивировать все файлы подпапки посредством RAR с удалением файлов
для 9 числа d:\mail_out\15\*.* в архив 2115A09.rar предварительно проверив папку d:\mail_rar\MM - текущий месяц
на наличие 2115A09.rar если есть то создать архив 2115B09.rar и т.п. (нужен счетчик для *.rar A для старого в числе Z для нового)
Если папка d:\mail_rar\MM (SET T_Month=%DATE:~3,2%) не существует то создать.
(IF NOT EXIST d:\mail_rar\%DATE:~3,2% MD d:\mail_rar\%DATE:~3,2%)
Прошу помощи со счётчиком (как минимум) и если можно ссылки на доходчивое описание FOR (не дошло).
Благодярю...

amel27 11-05-2010 09:03 1410715

Цитата:

Цитата kotik147
CMD для сортировки файлов по дате создания с последующим переименованием всех файлов во всех подпапках по шаблону »

где-то так:
Код:

@Echo Off

Set ROOT=d:\mail_out
Set ABC= ABCDEFGHIJKLMNOPQRSTUVWXYZ

For /R "%ROOT%" %%i In (.) Do If /I Not "%%~fi"=="%ROOT%" Call :EX "%%~fi" *.DOC& Call :EX "%%~fi" *.XLS
Exit /B 0

:EX
For /F "Tokens=1* Delims=[]" %%a In ('DIR /B/OD "%~1\%~2"^|Find /N /V ""') Do (
Call REN "%~1\%%b" "21%~n1%%ABC:~%%a,1%%%DATE:~0,2%.*" 2>Nul)
GoTo :EOF


El Sanchez 11-05-2010 21:10 1411185

kotik147, а если юзеры накидают в подпапки более 26 файлов одного расширения? А то букв латинского алфавита может и не хватить. :)


amel27, сильно! :up

kotik147 11-05-2010 23:54 1411306

Цитата:

Цитата El Sanchez
26 файлов одного расширения? »

Шаблон сверху спустили. Применение цифрового счётчика было бы куда логичней. Две маски 52 файла. На практике максимум 30.

kotik147 12-05-2010 00:13 1411324

Цитата:

Цитата amel27
где-то так: »

Огромное спасибо amel27 за оперативную помощь. Здоровья богатырского и счастья бесконечного!!!
Проверил, есть одно но… Если в имени файла использованы точки все, что после точки не обрабатывается, остается в хвосте файла.
До имя.файла.doc После 2115C11.файла.doc
Постараюсь разобраться. А если не выйдет разобраться надо будет юзеров отучить от использования точки.

amel27 12-05-2010 04:24 1411388

Цитата:

Цитата kotik147
Если в имени файла использованы точки все, что после точки не обрабатывается, остается в хвосте файла. »

Код:

@Echo Off

Set ROOT=d:\mail_out
Set ABC= ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890
For /R "%ROOT%" %%i In (.) Do Call :EX "%%~fi" *.DOC& Call :EX "%%~fi" *.XLS

:EX
If Not "%~1"=="" For /F "Tokens=1* Delims=[]" %%a In ('DIR /B/OD "%~1\%~2" 2^>Nul^
|Find /N /V ""') Do Call REN "%~1\%%b" "21%~n1%%ABC:~%%a,1%%%DATE:~0,2%%%~xb"
GoTo :EOF


kotik147 13-05-2010 00:03 1411987

Восхищаюсь Вашим талантом, amel27, и благодарю ещё раз. Не понимаю как, но все работает.


Время: 05:54.

Время: 05:54.
© OSzone.net 2001-