循环语句的批处理文件

时间:2009-08-25 15:58:33

标签: windows batch-file for-loop

我把下面的批处理文件放在一起;我对批处理文件没有太多经验,我无法弄清楚文件失败的原因,并显示错误消息:

  

DO命令是意料之外的。

看下面的代码,有谁知道我做错了什么?感谢。

@ECHO OFF
REM Set arguments supplied by Subversion 
SET REPOS = %1
SET REV = %2

REM Set working directory path 
SET WORKSPACE = D:\apache\htdocs

REM Assign changes to variable 
SET CHANGES = svnlook changed %REPOS% -r %REV% 

REM Update only changed files  
FOR /f %%a IN %CHANGES% DO svn update %%a

4 个答案:

答案 0 :(得分:6)

FOR /f %%a IN %CHANGES% DO svn update %%a

应该是

FOR /f %%a IN (%CHANGES%) DO svn update %%a

希望这有帮助,

答案 1 :(得分:0)

我猜测%CHANGES%的循环格式/结构不正确,因此DO无法执行。在循环之前添加以下行,以检查您是否从SET CHANGES命令获得了预期结果;

ECHO %CHANGES%

如果分配的批处理代码更多,则可能需要使用CALL。在调用%1%2的批处理文件时,您传递了什么?

答案 2 :(得分:0)

你可以尝试在没有REM声明的情况下运行它。评论有时会使事情有所不同。

答案 3 :(得分:0)

修改原始代码后,我就让它“工作”。 svnlook命令返回例如:trunk \ images \ smileyface.jpg

目前,for循环只返回'U'而不是我想要的'smileyface.jpg'。因此,虽然代码现在可以正常工作,但它确实可以运行我喜欢的方式(仍在使用它)。

下面是经过修改的代码(注意:我必须删除变量及其指定值之间的所有空格)。

@ECHO OFF
REM Set arguments supplied by Subversion 
SET REPOS=%1
SET REV=%2

REM Set working directory path 
SET WORKSPACE=D:\apache\htdocs

REM Assign changes to variable 
SET CHANGES=svnlook changed %REPOS% -r %REV% 

REM Update only changed files  
FOR /F "usebackq" %%a IN (`%CHANGES%`) DO (svn update %%a)