如何循环进入Windows批处理文件?


Answers:


128
FOR %%A IN (list) DO command parameters

list 是任何元素的列表,用空格,逗号或分号分隔。

命令 可以是任何内部或外部命令,批处理文件,甚至可以是-在OS / 2和NT中-命令列表

parameters 包含命令的命令行参数。在此示例中,将使用参数(如果指定)对列表中的每个元素执行一次命令。

参数(甚至命令)的一种特殊类型是%% A,它将被列表中的每个元素连续替换。

FOR循环


3
我可以在列表中给出范围(1到100)吗?
Pradeep

36
FOR /L %x IN (1,1,100) DO ...
乔伊

[ parameters ]如果您想在for循环中添加多行,请放个括号
Frank Bryce 2015年

1
@aaiezza,我赞成你的意见。我现在正在与这些流血的循环作斗争,完全出乎意料地工作,而且我不知道什么控制着看输出的东西。可怕的东西。有用,但可怕。
RockDoctor

223

如果您想做x次,可以执行以下操作:

范例(x = 200):

FOR /L %%A IN (1,1,200) DO (
  ECHO %%A
)

1,1,200 手段:

  • 开始= 1
  • 每步增量= 1
  • 结束= 200

17
感谢您的添加。如果将示例中的起始值更改为与增量不同的值,则可能会更清楚。
沃伦·史蒂文斯

7
最终值包含在内。
罗兰·皮拉卡斯

54

类型:

for /?

您将获得几页的帮助文本。


8
我喜欢这个而不是公认的答案,因为它可以处理DOS / Windows的不同版本。多年来,“ For”功能已经得到了很大的增强,问题并没有说明目标是哪个版本,也没有说明正在尝试什么方案。
马蒂亚斯·安德森

34

有条件地多次执行命令。

  • 文件语法

    FOR %%parameter IN (set) DO command 
    
  • 语法-FOR-文件根植于路径

    FOR /R [[drive:]path] %%parameter IN (set) DO command 
    
  • 文件夹语法

    FOR /D %%parameter IN (folder_set) DO command 
    
  • 语法-FOR-数字列表

    FOR /L %%parameter IN (start,step,end) DO command 
    
  • 文件语法

    FOR /F ["options"] %%parameter IN (filenameset) DO command 
    

    要么

    FOR /F ["options"] %%parameter IN ("Text string to process") DO command
    
  • 语法-FOR-命令结果

    FOR /F ["options"] %%parameter IN ('command to process') DO command
    

  • 取一组数据
  • 使FOR参数%%G等于该数据的某些部分
  • 执行命令(可以选择使用参数作为命令的一部分)。
  • ->对每个数据重复

如果您在命令行而不是批处理程序中使用FOR命令,请仅使用一个百分号:%G而不是%%G

FOR参数

  • 必须使用单个字符(例如字母G)定义第一个参数。

  • FOR %%G IN ...

    在FOR循环的每次迭代中,都会对IN ( ....)子句进行评估并将其%%G设置为不同的值

    如果此子句产生单个值,则将%% G设置为等于该值并执行命令。

    如果该子句产生多个值,则会隐式定义额外的参数来保存每个参数。这些将自动按字母顺序分配%%H %%I %%J...(隐式参数定义)

    如果参数引用文件,则可以使用增强型变量引用来提取文件名/路径/日期/大小。

    您当然可以选择除之外的任何其他字母%%G。但这是一个不错的选择,因为它与任何路径名格式的字母(a,d,f,n,p,s,t,x)都没有冲突,并且提供了最长的不冲突字母作为隐式参数。


1
如何使用for循环获取先前设置的变量?我尝试使用/ F“ tokens = 2 delims =”,(%a%)中的%% i可以(…..但这行不通。它失败时说“(此时是意外的”)
Shivani

嗨,您好。是%a%给一个普通文件的名字?用这种格式很难帮助您。阅读“ 如何提问”后,随时提出新问题。
J. Chomel

2
@ jumping_monkey,FOR命令创建用字母而不是数字标识的参数变量(例如,%% G)。路径格式参数扩展也可以应用这些。为避免两组字母之间的混淆,请避免使用字母(a,d,f,n,p,s,t,x,z)作为FOR参数,或者仅选择大写的FOR参数字母。
J. Chomel

@ J.Chomel,您好,谢谢So for example in a reference like %%~fG the %%G is the FOR parameter, and the ~f is the Parameter Expansion.(在这里)[ ss64.com/nt/syntax-args.html)。队友的欢呼声。
跳Jump_monkey


13

试试这个代码:

@echo off
color 02
set num1=0
set num2=1 
set terminator=5
:loop
set /a num1= %num1% + %num2%
if %num1%==%terminator% goto close
goto open
:close
echo %num1%
pause 
exit
:open
echo %num1%
goto loop

num1是要增加的数字,是num2加到的值num1,终止子是num1将要结束的值。您可以在此语句(if %num1%==%terminator% goto close)中为终止符指定不同的值。这是布尔表达式goto close是布尔值为true时的过程,goto open是布尔值为false时的过程。


这是最容易理解的。其他答案几乎没有解释命令和标志的作用。对于只使用JavaScript的人来说,批处理文件根本不直观。
1934286

5
@echo off
echo.
set /p num1=Enter Prelim:
echo.
set /p num2=Enter Midterm:
echo.
set /p num3=Enter Semi:
echo.
set /p num4=Enter Finals:
echo.
set /a ans=%num1%+%num2%+%num3%+%num4%
set /a avg=%ans%/4
ECHO %avg%
if %avg%>=`95` goto true
:true
echo The two numbers you entered were the same.
echo.
pause
exit

5

FOR /?帮助文档:

FOR%variable IN(设置)DO命令[命令参数]

%variable指定单个字母可替换参数。
(设置)指定一组一个或多个文件。可以使用通配符。command指定要对每个文件执行的命令。
command-parameters
指定用于指定命令的参数或开关。

要在批处理程序中使用FOR命令,请指定%% variable而不是
%variable。变量名称区分大小写,因此%i
与%I 不同。

如果启用了命令扩展,则支持以下
FOR命令的其他形式:

FOR / D%variable IN(设置)DO命令[命令参数]

If set contains wildcards, then specifies to match against directory  
names instead of file names.                                          

FOR / R [[驱动器:]路径]%variable IN(设置)DO命令[命令参数]

Walks the directory tree rooted at [drive:]path, executing the FOR    
statement in each directory of the tree.  If no directory             
specification is specified after /R then the current directory is     
assumed.  If set is just a single period (.) character then it        
will just enumerate the directory tree.                               

FOR / L%variable IN(开始,步骤,结束)DO命令[命令参数]

The set is a sequence of numbers from start to end, by step amount.   
So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would   
generate the sequence (5 4 3 2 1)                                     
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.