2015-02-07 2 views
1

Я пытаюсь написать пакетный файл, который выполняет следующие действия:Командная строка: Использование цикла для создания каталогов с возрастающими именами

  1. Запрашивать пользователь для каталога, чтобы создать новую папку новейшего
  2. Запрашивать целое предела
  3. Создать каталог новейшего
  4. CD новейших
  5. цикл для предела итераций
    • Создание каталога "Месяц" + итерации

Например:
новейший = Reports
предел = 12
Я должен закончить с:


\ Reports \ Месяц 1
\ Reports \ месяц 2
\ Reports \ месяц 3
...
\ Reports \ месяц 12

Это мой код до сих пор:

setlocal enabledelayedexpansion 
FOR /L %%i IN (1,1,%limit%) DO (
set "month_counter=Month %%i" 
echo %month_counter% 
MD %month_counter% 
) 
endlocal 

Если установить предел = 12, я получаю 12 сообщений об ошибках с указанием:

Echo is off. 
The syntax of the command is incorrect. 

Я ценю помощь.

ответ

1
FOR /L %%i IN (1,1,%limit%) DO (
MD "Month %%i" 
) 

У вас есть стандартные delayed expansion проблема - сотни статей о SO об этом.

В пределах оператора блока (a parenthesised series of statements), блок всей анализируется и затем выполняются. Любой %var% в блоке будет заменен значением этой переменной на момент анализа блока - до того, как блок будет выполнен - ​​то же самое относится к FOR ... DO (block).

Следовательно, IF (something) else (somethingelse) будет выполнен с использованием значений %variables% в момент возникновения ошибки IF.

Два распространенный способ преодоления этого является: 1) использовать setlocal enabledelayedexpansion и использовать !var! вместо %var%, чтобы получить доступ к измененному значению var или 2) для вызова подпрограммы, чтобы выполнить дальнейшую обработку с использованием измененных значений.

Обратите внимание, что использование CALL ECHO %%var%% отображает измененное значение var. CALL ECHO %%errorlevel%% отображает, но, к сожалению, RESETS errorlevel.

Итак - вы могли использовать

set "month_counter=Month %%i" 
CALL echo %%month_counter%% 

Если вы действительно, действительно хотите - или один из других методов, но это гораздо проще просто сделать каталог из ваших постоянных данных + итерация счетчик в %%i как показано.

+0

Это очень помогает. Я не знаю, почему я слишком усложнял это. Я не был разницей между разбором кода до и после выполнения. – fyrtoes

Смежные вопросы