Войти

Показать полную графическую версию : [решено] Копирование отдной структуры каталогов в другую


siff009
30-05-2012, 13:48
Подскажите структуру батника

Исходные данные:
каталоги с файлами
Папка 1
Папка 11
Папка 111
Папка 112
Папка 12
Папка 121
Папка 122

Внутри папок XXX лежат файлы типа 01-01-01.csv (дата-месяц-год) - ВАЖНО -> внутри каждой папки имена файлов одинаковы.

Нужно: перенести эти файлы в структуру каталогов типа

0000-01 (год-месяц)
Папка 1
Папка 11
Папка 111
Папка 112
Папка 12
Папка 121
Папка 122
0000-02
Папка 1
Папка 11
Папка 111
Папка 112
Папка 12
Папка 121
Папка 122

где в папках XXX будут лежать файлы только за конкретный месяц.

megaloman
30-05-2012, 22:14
@Echo Off

Set From=D:\Папка с данными
Set To=D:\Папка с отсортированными данными

FOR %%D IN ("Папка 1" "Папка 11" "Папка 111" "Папка 112" "Папка 12" "Папка 121" "Папка 122") DO (
FOR /F "usebackq delims=" %%F IN (`Dir /B /A:-D "%From%\%%~D\??-??-??.csv"`) DO Call :FDir %%D "%%F"
Rd "%From%\%%~D" >nul 1>Nul 2>Nul
)

GoTo :Eof

:FDir
Set Name=%~2
Set God=%Name:~6,2%
Set Mes=%Name:~3,2%

If Not Exist "%To%\20%God%-%Mes%\%~1\" Md "%To%\20%God%-%Mes%\%~1\"
If Exist "%From%\%~1\%~2" Move /Y "%From%\%~1\??-%Mes%-%God%.csv" "%To%\20%God%-%Mes%\%~1\" >Nul
Папка From и To может быть одной и той же, там располагаются исходные и отсортированные папки. Пустые папки удаляются. Если этого не надо, уберите строку с RD. Сделано в предположении, что год >=2000

siff009
31-05-2012, 07:47
Спасибо, счас буду пробовать.

siff009
31-05-2012, 09:24
megaloman
К сожалению моих знаний явно не хватает и я не все правильно объяснил.

Папка 1
Папка 11
Папка 111
Папка 112
Папка 12
Папка 111
Папка 112

- это структура вложенности папок
наименование Папка 11 и Папка 12 разные
Внутри 11 и 12 всегда 2 папки с одинаковыми именами
и уже внутри них файлы.

Я попытался подделать код под себя, но не срослось))).
Вернул все как было у Вас


@Echo Off

Set From=D:\2\mat\k
Set To=D:\2\test

FOR %%D IN ("zhd" "1t" "2t") DO (
FOR /F "usebackq delims=" %%F IN (`Dir /B /A:-D "%From%\%%~D\??-??-??.csv"`) DO Call :FDir %%D "%%F")
)

GoTo :Eof

:FDir
Set Name=%~2
Set God=%Name:~6,2%
Set Mes=%Name:~3,2%

If Not Exist "%To%\20%God%-%Mes%\%~1\" Md "%To%\20%God%-%Mes%\%~1\"
If Exist "%From%\%~1\%~2" Move /Y "%From%\%~1\??-%Mes%-%God%.csv" "%To%\20%God%-%Mes%\%~1\" >Nul



Выдает следующее
D:\2\mat>2.bat
Файл не найден
Не удается найти указанный файл.
Не удается найти указанный файл.

На картинке структура папок и файлы

megaloman
31-05-2012, 16:36
@Echo Off

Set From=D:\Папка 1 с данными
Set To=D:\Папка с отсортированными данными

FOR /F "usebackq delims=" %%D IN (`Dir /B /A:D /S "%From%\"`) DO (
FOR /F "usebackq delims=" %%F IN (`Dir /B /A:-D "%%D\??-??-??.csv"`) DO Call :FDir "%%D\" "%%F"
Rd "%From%\%%~D" >nul 1>Nul 2>Nul
)

GoTo :Eof

:FDir

Set Name=%~2
Set God=%Name:~6,2%
Set Mes=%Name:~3,2%

If Not Exist "%To%\20%God%-%Mes%\%~p1\" Md "%To%\20%God%-%Mes%\%~p1\"
If Exist "%~1%~2" Move /Y "%~1%~2" "%To%\20%God%-%Mes%\%~p1" >NulПапка To не должна быть вложена в From. Пустые папки низшей вложенности удаляются, если есть RD после For.

siff009
31-05-2012, 16:58
Спасибо, завтра с утра отчитаюсь.

siff009
01-06-2012, 13:23
Все супер.
Большое спасибо.




© OSzone.net 2001-2012