Войти

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


mezzin
10-12-2016, 16:07
Добрый день.
Есть папка в которую камера скидывает видео в таком формате
_2016Y11M07D18H_00M00S.mp4
_2016Y11M07D18H_01M00S.mp4
и так далее

Прошу помочь создать батник чтобы раскидывать эти файлы по структуре папок вида YYYY\MM\DD
Важное условие: для имен папок нужно использовать имена файлов, а не даты создания этих файлов.

megaloman
10-12-2016, 16:34
@Echo Off

Set "In=Z:\Box_In"
Set "Mask=_????Y??M??D*.mp4"

Set "Out=Z:\Box_Out"

FOR /F "usebackq tokens=1,2,3 delims=_YMD" %%i IN (`Dir "%In%\%Mask%" /B /A:-D 2^>nul`) DO (
If Exist "%In%\_%%iY%%jM%%k*.mp4" (
If Not Exist "%Out%\%%i\%%j\%%k" Md "%Out%\%%i\%%j\%%k"
Move /Y "%In%\_%%iY%%jM%%k*.mp4" "%Out%\%%i\%%j\%%k\" >nul
)
)

mezzin
10-12-2016, 18:00
спасибо, то что надо!

mezzin
10-12-2016, 20:18
А можно использовать этот скрип на несколько папок?
Для решения задачи принимаем что Out всегда совпадает с In а Mask всегда одинаковы.

megaloman
10-12-2016, 21:11
@Echo Off

Set "In="Z:\Box_In" "Z:\Box_Arc" "Z:\dddddddd" "Z:\Tra La La""
Set "Mask=_????Y??M??D*.mp4"

FOR %%d IN (%In%) DO (
FOR /F "usebackq tokens=1,2,3 delims=_YMD" %%i IN (`Dir "%%~d\%Mask%" /B /A:-D 2^>nul`) DO (
If Exist "%%~d\_%%iY%%jM%%k*.mp4" (
If Not Exist "%%~d\%%i\%%j\%%k" Md "%%~d\%%i\%%j\%%k"
Move /Y "%%~d\_%%iY%%jM%%k*.mp4" "%%~d\%%i\%%j\%%k\" >nul
)
)
)
или, ИМХО, нагляднее @Echo Off

Set "Mask=_????Y??M??D*.mp4"

Call :Trans "Z:\Box_In"
Call :Trans "Z:\Box_Arc"
Call :Trans "Z:\dddddddd"
Call :Trans "Z:\Tra La La"

GoTo :Eof

:Trans

FOR /F "usebackq tokens=1,2,3 delims=_YMD" %%i IN (`Dir "%~1\%Mask%" /B /A:-D 2^>nul`) DO (
If Exist "%~1\_%%iY%%jM%%k*.mp4" (
If Not Exist "%~1\%%i\%%j\%%k" Md "%~1\%%i\%%j\%%k"
Move /Y "%~1\_%%iY%%jM%%k*.mp4" "%~1\%%i\%%j\%%k\" >nul
)
)




© OSzone.net 2001-2012