如何在MS-DOS批处理文件中的for循环中使用迭代变量?

时间:2009-04-02 22:41:34

标签: batch-file dos

我有一个类似这样的批处理文件

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

%%a只给了我一个.

如何使用变量%%a的值来分配文件名(例如1.output,2.output)?

3 个答案:

答案 0 :(得分:2)

你必须包围你的变量:

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

答案 1 :(得分:1)

您的命令语法对我来说是正确的。我希望批处理文件的行可以生成这些命令:

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

反过来会创建1.output2.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

答案 2 :(得分:0)

我没有Win98系统,但是在DOS框中输入for /?,看看是否有可以帮助你的东西。

在基于NT的Windows操作系统中执行此操作的方法是:

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

所以你的陈述是这样的:

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

也许在Win98下的DOS中有类似的东西。