У меня много папок, и у них есть следующее соглашение об именах:

  • folder1(1924)
  • folder2(2014)
  • folder3(1999)
  • Folder4(2001)
  • folder5(1891)

Теперь я хотел бы переместить / найти в проводнике все папки, где год (между ()) ниже 2000 года и выше 1900 года

Таким образом, в выводе будут folder1 и folder3.

Есть ли сценарий, который может сделать это?

2 ответа2

2

Если все эти папки находятся в C:\Source folder запустите следующий пакетный файл из самой C:\Source folder :

@echo off
set dest=D:\Target folder
for /f "tokens=1,2 delims=()" %%d in ('dir /ad /b') do (
    if %%e gtr 1900 (
        if %%e lss 2000 (
            if not exist "%dest%\%%d(%%e)\" md "%dest%\%%d(%%e)"
            robocopy "%%d(%%e)" "%dest%\%%d(%%e)" /e /is /move
        )
    )
)
0

Вот один из примеров способов сделать это (при условии, что все каталоги находятся на одном уровне)

find . -type d -name "fold*" -maxdepth 1|awk -F'[()]'  '{if ($2 > 1900 && $2 < 2000) print $0}'

Если вы хотите выполнить его под ОС Windows, то примерным способом является использование некоторой среды cygwin (также отлично работает mobaxterm) и запуск ее в терминале. К сожалению, мои навыки работы с Windows очень скромны, и я не могу переписать их для родного сценария cmd

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .