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

siff009 30-05-2012 13:48 1924949

Копирование отдной структуры каталогов в другую
 
Подскажите структуру батника

Исходные данные:
каталоги с файлами
Папка 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 1925230

Код:

@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 1925373

Спасибо, счас буду пробовать.

siff009 31-05-2012 09:24 1925398

Вложений: 2
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 1925605

Код:

@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 1925625

Спасибо, завтра с утра отчитаюсь.

siff009 01-06-2012 13:23 1926019

Все супер.
Большое спасибо.


Время: 23:13.

Время: 23:13.
© OSzone.net 2001-