Windows 循环语句的批处理文件

Windows 循环语句的批处理文件,windows,batch-file,for-loop,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

我把下面的批处理文件放在一起;我对批处理文件没有太多经验,我无法理解文件失败的原因,错误消息指出:

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
我猜%CHANGES%的格式/结构不适合循环,因此无法执行DO。在循环之前添加以下行,以检查您是否从SET CHANGES命令中获得了预期的结果

ECHO %CHANGES%
如果分配需要执行更多批处理代码,则可能需要使用CALL。调用%1和%2的批处理文件时,您传入了什么

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

ECHO %CHANGES%

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

您可以尝试在没有REM语句的情况下运行它吗。注释有时会使事情变得不同。

您可以尝试在不使用REM语句的情况下运行它吗。评论有时会使事情变得不同

FOR /f %%a IN %CHANGES% DO svn update %%a
应该是

FOR /f %%a IN (%CHANGES%) DO svn update %%a
希望这有帮助

应该是

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

希望这能有所帮助,

在修改了我的原始代码后,我已经让它“正常工作” 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)

在修改了我的原始代码后,我让它“工作” 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)

另一个程序实际上应该调用这个批处理文件并传递一个目录和一个整数值。我添加了代码以回显%1和%2参数;当我自己测试批处理文件并向其传递值时,批处理代码回显空白,表明未分配传递的参数,即post-commit.batfile:///d:/repos 10你知道为什么没有分配参数吗?@Dave Anderson:Binary Worrier的建议是正确的,但并不完全;代码需要usebackq选项和backticks。实际上,另一个程序应该调用这个批处理文件并传递一个目录和一个整数值。我添加了代码以回显%1和%2参数;当我自己测试批处理文件并向其传递值时,批处理代码回显空白,表明未分配传递的参数,即post-commit.batfile:///d:/repos 10你知道为什么没有分配参数吗?@Dave Anderson:Binary Worrier的建议是正确的,但并不完全;代码需要usebackq选项和反勾号。