@echo off
for /f "tokens=1,2,* delims=_" %%A in ('
dir /b /a-d ????_??_*.* ^| findstr /b "20[0-9][0-9]_"
') do (
for %%D in (
"01 January"
"02 February"
"03 March"
"04 April"
"05 May"
"06 June"
"07 July"
"08 August"
"09 September"
"10 October"
"11 November"
"12 December"
) do (
for /f "tokens=1,2" %%E in ("%%~D") do (
if "%%~B" == "%%~E" (
if not exist "%%~A\%%~F\" md "%%~A\%%~F\"
if exist "%%~A\%%~F\" move "%%~A_%%~B_%%~C" "%%~A\%%~F\" >nul
)
)
)
)
Это использует шаблон ????_??_*.*
и разрешено, если findstr
определяет первые четыре символа как цифры года в 21 веке со следующим подчеркиванием. Затем он получает месяц из 2 цифр во 2-м токене. Он проверяет, существует ли каталог year\month\
, и создает его, если он не существует. Если каталог year\month\
существует, копирует файл в каталог.
for
переменные:
A
цифры года B
цифры месяца C
остаток от имени файла D
цифры месяца и имя E
цифры месяца F
название месяца
См. for /?
для помощи в понимании a for
l oop.