Пакетное создание набора подпапок в нескольких папках - PullRequest
0 голосов
/ 06 марта 2012

Моя цель - создать набор папок с одинаковыми подпапками. Мне нужна одна папка на каждый год, начиная с 1881 года, каждая папка должна содержать папку в месяц, а каждая папка месяца должна содержать папку в день.

Я нашел инструмент для создания папок за эти годы, теперь моя задача - заполнить их подпапками. Я хочу сделать это на клиентском компьютере Windows, желательно без установки чего-либо.

То, над чем я работал, - это использование команд FOR и MD для выполнения этой работы. Вот код, который у меня есть:

SET %g=*.*
FOR /d %var IN %path% DO MKDIR 01 02 03

Всякий раз, когда я запускаю это, я получаю эту ошибку:

% path% был неожиданным в это время

Итак, вот где я сейчас нахожусь. Буду признателен за любую помощь, которую вы можете мне оказать!

Ответы [ 2 ]

6 голосов
/ 07 марта 2012

Извините, П.А. Ваше решение правильно, я просто не мог удержаться от соблазна добавить какой-нибудь код для создания правильного числа дней в месяце.

@echo off
setlocal EnableDelayedExpansion
set m=0
for %%d in (31 28 31 30 31 30 31 31 30 31 30 31) do (
   set /A m+=1
   set daysInMonth[!m!]=%%d
)
pushd d:\dest
for /L %%y in (1881,1,2012) do (
   mkdir %%y
   pushd %%y
   for /L %%m in (1,1,12) do (
      mkdir %%m
      pushd %%m
      set days=!daysInMonth[%%m]!
      if %%m == 2 (
         set /A yMod4=%%y %% 4, yMod100=%%y %% 100, yMod400=%%y %% 400
         if !yMod4! == 0 (
            set /A days+=1
            if !yMod100! == 0 if not !yMod400! == 0 (
               set /A days-=1
            )
         )
      )
      for /L %%d in (1,1,!days!) do (
         mkdir %%d
      )
      popd
   )
   popd
)
popd

Предыдущий код добавить 1 день до февраля ввисокосные годы, то есть, если год делится на 4, но в центориальные годы, только если он также делится на 400. 1600 и 2000 были високосными годами, а 1700, 1800 и 1900 - нет.

3 голосов
/ 06 марта 2012

сначала прочитайте HELP FOR, а затем, чтобы начать с чего-то, попробуйте это в командной строке

  for /l %a in (1881,1,2012) do @echo %a

теперь, когда вы уже мокрая, добавьте немного специй

  for /l %a in (1881,1,2012) do @for /l %b in (1,1,12) do @echo %a-%b

и вы почти закончили

  for /l %a in (1881,1,2012) do @for /l %b in (1,1,12) do @for /l %c in (1,1,31) do @echo %a-%b-%c

Осталось только преобразовать echo в подходящий mkdir и добавить заклинание, чтобы перевести его в файл BAT ....

@echo off
pushd d:\dest
for /l %%a in (1881,1,2012) do (
  mkdir %%a
  pushd %%a
  for /l %%b in (1,1,12) do (
     mkdir %%b
     pushd %%b
     for /l %%c in (1,1,31) do (
       mkdir %%c
     )
     popd
  )
  popd
)
popd

но, имейте в виду, это сойдет с ума!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...