как пакетно перемещать файлы по дате в папку с именем файла?

У меня есть много файлов изображений с именами ГГГГММДД_ЧЧмм.jpg

Как я могу переместить эти файлы в: target_directory\YYYY\MM\YYYYMMDD_HHmm.jpg ?

Спасибо


person igmox igmox    schedule 12.04.2015    source источник


Ответы (2)


Вы можете использовать цикл for, подстроки и mkdir:

@echo off
setlocal enabledelayedexpansion

for /f %%a in ('dir /b /a-d') do (
    set filename=%%a

    ::exclude this file
    if not "!filename!" == "%~nx0" (

        ::substr to grab characters 0-4 and 4-6 as year and month
        set year=!filename:~0,4!
        set month=!filename:~4,2!

        ::make dirs for the files if they don't already exist
        if not exist !year! mkdir !year!
        if not exist !year!\!month! mkdir !year!\!month!

        ::move the files there
        move !filename! !year!\!month!
    )
)

Цикл for запускает dir /b /a-d, который возвращает все файлы в текущем каталоге, кроме папок. Обозначение подстроки !variable:~start,length!.

Как лучше всего сделать подстроку в пакетном файле?

person Joel I    schedule 12.04.2015

Однострочник для командной строки:

for %a in (*.jpg) do @set "FName=%~a"&call xcopy "%FName%" "%FName:~0,4%\%FName:~4,2%\"&&del "%~a"&set "FName="
person Endoro    schedule 13.04.2015