Как использовать итерационную переменную в цикле for в пакетных файлах MS-DOS? - PullRequest
0 голосов
/ 03 апреля 2009

У меня есть командный файл, который делает что-то вроде этого

for %%a in (1 2 3 4 5) do dir > %%a.output

%%a просто дает мне .

Как я могу использовать значение переменной %%a для присвоения имени файла (например, 1.output, 2.output)?

Ответы [ 3 ]

2 голосов
/ 21 апреля 2009

Вы должны окружить свою переменную:

for %a in (1 2 3 4 5) do dir > %a%.output
1 голос
/ 03 апреля 2009

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

dir > 1.output
dir > 2.output
dir > 3.output
dir > 4.output
dir > 5.output

Что в свою очередь создаст 1.output, 2.output и т. Д.

В качестве подсказки отладки вы можете попробовать изменить эту строку на что-то вроде этого:

for %%a in (1 2 3 4 5) do echo dir ^> %%a.output

Обратите внимание на ^, который используется для экранирования перенаправления >.

Также:

  • Не забудьте использовать %%a в пакетных файлах но %a в командной строке.
  • Помните, что for переменные с учетом регистра; %%A отличается от %%a.

Обновление

Прошло много времени с тех пор, как я должен был получить пакетный файл, работающий под такой старой версией ОС, но я не удивлюсь, если перенаправление было несовместимо с for в тот день.

Вы можете попробовать это:

for %%a in (1 2 3 4 5) do call helper.bat %%a

В helper.bat:

dir > %1.output

Или, если вам не нравится дополнительный пакетный файл, объедините их в один файл:

if .%1==.sub goto do_sub
for %%a in (1 2 3 4 5) do call %0 sub %%a
goto end
:sub
shift
dir > %1.output
:end
0 голосов
/ 03 апреля 2009

У меня нет системы Win98, но введите for /? в поле DOS и посмотрите, есть ли что-то, что может вам помочь.

Способ сделать это в ОС Windows на базе NT:

FOR /L %variable IN (start,step,end) DO command [command-parameters]

То есть ваше утверждение будет выглядеть примерно так:

FOR /L %%a IN (1,1,5) DO echo dir ^> %%a.output

Возможно, что-то похожее в DOS под Win98.

...