Пока вы не предоставите больше информации о формате дат, я не могу дать однозначного ответа. Но я могу показать вам, как я это сделаю на своей машине.
Я использую формат гггг-мм-дд в именах файлов и папок, поэтому 13 декабря 2011 года будет 2011-12-13. Моя машина использует формат мм / дд / гггг для дат (13.12.2011). Поэтому мне нужно перевести вывод %% ~ tF с 13.12.2011 в 2011-12-13. Примечание - /
нельзя использовать в именах файлов или папок.
Так что этот код будет делать то, что вы хотите на моей машине:
set "source=\directory\path\archive"
set "targetRoot=\directory\path\archive"
for %%F in ("%source%\*") do (
for /f "tokens=1,2,3 delims=/ " %%A in ("%%~tF") do (
move "%%~fF" "%targetRoot%\%%C-%%A-%%B"
)
)
Добавление - Вопрос в комментарии просит метод для добавления левой части числа с нулями для создания dir. Я вижу два простых варианта. (Это действительно должен быть другой вопрос)
Этот первый метод прост, но утомителен и не практичен в качестве общего решения
for %%A in (01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) do ...
Второй метод является общим решением. Поскольку ваше назначение находится в скобках, вам нужно использовать отложенное расширение.
setlocal enableDelayedExpansion
for /l %%A in (1 1 31) do (
set "day=0%%A"
set "day=!day:~-2!
...
)
Вы увеличиваете число ведущих нулей, добавляя больше 0 вперед, а затем увеличивая количество символов, сохраняемых в операции подстроки.
НО - зачем заранее заполнять каталоги? Ваша стратегия добавит дни каталогов, которых нет в календаре, плюс у вас, вероятно, будет много неиспользуемых папок, для которых в этот день не было изменено ни одного файла. Лучше создавать папки только по мере необходимости. Тогда заполнение 0 для вас уже сделано, и ненужные папки не создаются.
set "source=\directory\path\archive"
set "targetRoot=\directory\path\archive"
for %%F in ("%source%\*") do (
for /f "tokens=1,2,3 delims=/ " %%A in ("%%~tF") do (
if not exist "%targetRoot%\%%C\%%A\%%B" mkdir "%targetRoot%\%%C\%%A\%%B"
move "%%~fF" "%targetRoot%\%%C\%%A\%%B"
)
)