批量执行列表中每个元素的一些代码

时间:2014-09-24 08:00:38

标签: batch-file

set machines=PC2 TEST-PC PC34
for %%a in (%machines%) do (
   echo %%a 
   echo. 
) > PCs.txt

我想遍历一个机器列表并为每台机器执行代码。 但是在我的PCs.txt中只有一行PC34。

我的错是什么?

提前致谢!

2 个答案:

答案 0 :(得分:2)

循环正常工作;唯一的问题是重定向到文件会覆盖文件(如果文件已经存在)。要添加,请使用>>重定向运算符。 (事先清除文件以删除任何现有内容。)像这样:

set machines=PC2 TEST-PC PC34
copy /Y NUL: PCs.txt
for %%a in (%machines%) do (
   echo %%a 
   echo. 
) >> PCs.txt

答案 1 :(得分:1)

问题是重定向运算符。如果文件存在,它将覆盖该文件,如果该文件不存在则创建该文件。但是在编写时,将对循环的每次迭代执行操作。

您有两种选择。第一个是

type nul > pcs.txt
for %%a in (%machines%) do (
    echo %%a
    echo.
) >> pcs.txt

首先创建/清空文件,然后将数据附加到文件中。但是这将为每次迭代打开一次文件以添加数据。

第二个选项是

(for %%a in (%machines%) do (
    echo %%a
    echo.
)) > pcs.txt

也就是说,不是在每次迭代中打开和写入,而是只对整个for循环执行一次。