Пакетный файл для организации изображений с мобильного телефона в папки (на Windows) - PullRequest
0 голосов
/ 06 мая 2020

Я только что создал свой первый пакетный файл, чтобы упорядочить изображения моего мобильного телефона по папкам (на Windows). Это сработало, мне просто интересно, есть ли более эффективный способ кодирования этого, поскольку в его нынешней форме мне пришлось бы go через все возможные комбинации лет и месяцев.

if exist 2018*.* md 2018
if exist 2019*.* md 2019
if exist 2020*.* md 2020
move    2018*.* 2018
move    2019*.* 2019
move    2020*.* 2020
if exist 2018\????_03_*.* md 2018\March
if exist 2018\????_04_*.* md 2018\April
if exist 2018\????_05_*.* md 2018\May
move    2018\????_04_*.*    2018\April
move    2018\????_05_*.*    2018\May
move    2018\????_03_*.*    2018\March
if exist 2019\????_03_*.* md 2019\March
if exist 2019\????_04_*.* md 2019\April
if exist 2019\????_05_*.* md 2019\May
move    2019\????_04_*.*    2019\April
move    2019\????_05_*.*    2019\May
move    2019\????_03_*.*    2019\March
if exist 2020\????_03_*.* md 2020\March
if exist 2020\????_04_*.* md 2020\April
if exist 2020\????_05_*.* md 2020\May
move    2020\????_04_*.*    2020\April
move    2020\????_05_*.*    2020\May
move    2020\????_03_*.*    2020\March

1 Ответ

0 голосов
/ 06 мая 2020
@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.

...