FOR语句是使您可以“循环”或重复执行多次的命令。它与几种编程语言中提供的FOR语句非常相似。 FOR语句通常在批处理文件中使用,但也可以直接在命令行上使用。

提醒一下,FOR循环的一般形式为:

FOR %variable IN (set) DO command [command-parameters]

其中“变量”是一个字母,“(组)”指定一组一个或多个文件,“命令”是将针对该组中每个文件执行的命令提示符命令,“命令参数”是可选的参数传递给“命令”。

因此,假设您已经获得了几个需要在Windows注册表中注册的COM .dll文件。您可以将它们全部放在一个文件夹中,然后可以在该文件夹中运行以下命令:

C:\DLLs> FOR %i IN (*.dll) DO regsvr32 /s %i

对于在当前目录中找到的每个.dll文件,此操作将在其上运行regsvr32程序。 (“ / s”开关只是告诉regsvr32静默进行工作。)所使用的变量(“%i”)区分大小写,并且依次假定每个.dll文件的值。然后,使用相同的“%i”变量将.dll文件的名称传递到regsvr32程序。

常规FOR循环的一个变体使用/ L开关,并具有以下常规形式:

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

这将执行一个循环,在该循环中,首先将%variable设置为“ start”,然后将其递增“ step”,直到达到“ end”值为止。 (这种用法应该是程序员非常熟悉的。)因此,假设您需要显示从1到5的数字列表。可以这样操作:

C:\> FOR /L %i IN (1,1,5) DO @echo %i

FOR循环的另一个变体使用/ D开关,并且具有以下一般形式:

FOR /D %variable IN (set) DO command [command-parameters]

对于此变体,如果“设置”包含通配符,则该命令将对目录名而不是文件名起作用。例如,如果您要从目录树复制一组文件并将所有文件放在一个目录中,这将很有用。

例如,我有一个名为\ Temp的目录。它包含名为\ Temp \ Temp2和\ Temp \ Barry的子目录。 \ Temp \ Barry和\ Temp \ Temp2目录包含我要复制的文件。如果我想将\ Temp树中的所有文件(没有目录结构)复制到一个名为\ Files的目录中,则可以这样做:

C:\Temp> FOR /D %i IN () DO Copy %i\.* \Files

我已经把我认为是FOR循环最深奥的形式留到最后。似乎使用/ F开关将使您几乎可以做任何事情-如果您只能弄清楚如何使用它。通用形式为:

FOR /F "options" %variable IN (`command`) DO command [command-parameters]

(对不起,它不能全部放在一行上。)您可以使用多个“选项”,第一个“命令”(被反撇号包围的命令)可以是任何命令提示符命令。因此,这里是一个如何使用它的示例:

FOR /F "Usebackq Delims==" %i IN (`dir/b c:\temp\a*.tmp`) DO @echo c:\temp\%i | Findstr /f:/ "a b c"

(很抱歉,它不能全部放在一行上。)此命令在C:\ Temp \ A.tmp上执行DIR / B命令。对于找到的每个文件,它将回显文件名并将其通过管道传递给Findstr命令,该命令将查找包含“ a”,“ b”或“ c”的所有行。当然,这是一件很奇怪的事情,但至少它显示了如何使用/ F。我建议您执行FOR /?*以获取所有选项的完整列表,然后基本上只受您想像如何使用它的约束。

您也可以在批处理文件中使用FOR命令。唯一不同的是,您将%符号加倍,而在命令行中仅使用一个%符号。例如,如果将上面的第二个示例放在批处理文件中,则看起来像这样:

FOR /L %%i IN (1,1,5) DO @echo %%i

本技巧(13196)适用于Windows 7、8和10。