我把下面的批处理文件放在一起;我对批处理文件没有太多经验,我无法弄清楚文件失败的原因,并显示错误消息:
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
答案 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)