0

我有一个批处理文件,它做这样的事情

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

%%a只是给了我一个.

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

4

3 回答 3

2

你必须包围你的变量:

for %a in (1 2 3 4 5) do dir > %a%.output
于 2009-04-21T18:45:22.267 回答
1

你的命令语法对我来说是正确的。我希望批处理文件的那一行按原样生成这些命令:

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
于 2009-04-02T23:01:43.803 回答
0

我没有 Win98 系统可供我使用,但进入for /?一个 DOS 框,看看那里有没有什么东西可以帮助你。

在基于 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也有类似的东西。

于 2009-04-03T12:45:47.240 回答