DOS FOR /F循环后的任何内容都不执行

7
我在谷歌上进行了广泛的搜索,寻找与我的问题类似的例子,但我找不到任何人在FOR /F循环之外执行其他操作的示例,因此我只能创建一个新线程。
我正在使用FOR /F循环来执行Ruby Gem,每次它在参考文件中发现一行时都会执行一次,这个过程非常完美。问题是,在完成滚动参考文件并正确执行Ruby Gem的次数后,它将无法完成FOR /F循环之外的任何其他操作。
以下是我的.CMD代码:
FOR /F "tokens=1,2,3 delims=," %%a in (c:\cygwin\usr\work\easy.lst) do (
c:\ruby191\bin\scrapitalist website -u http://www.website.com/%%a/%%c/%%b.html -o     C:\cygwin\usr\autobets\work\%%b_%%c.easy
)
copy c:\cygwin\usr\work\*.easy c:\cygwin\usr\autobets\work\easy.imp

easy.lst文件有两行数据。

循环正常工作,执行Ruby Gem并创建*.easy文件作为输出,但是COPY命令从未执行。 我可以用ECHO替换复制,或者事实上任何东西,但它不会执行。

我看不到我从FOR /F语法中漏掉了什么 - 有什么想法吗?

谢谢


1
我可以建议使用UNIX风格的shell吗?它的语法更加强大,也更加合理。看起来你已经安装了cygwin,那为什么不直接使用附带的bash shell呢? - tdammers
@tdammers 这是一个公正的建议,但这就像在 OP 想要汇编语言时建议使用 C# 一样,无论原因是什么。 - Eitan T
1个回答

10

我猜想scrapitalist是一个批处理文件本身,因此它停止了批处理文件的运行,但由于FOR循环被缓存,所以它一直运行到结束。

要解决这个问题,您只需要在前面加上一个单独的call

FOR /F "tokens=1,2,3 delims=," %%a in (c:\cygwin\usr\work\easy.lst) do (
  call c:\ruby191\bin\scrapitalist website -u http://www.website.com/%%a/%%c/%%b.html -o     C:\cygwin\usr\autobets\work\%%b_%%c.easy
)
copy c:\cygwin\usr\work\*.easy c:\cygwin\usr\autobets\work\easy.imp

jeb - 你说得完全正确,这解决了问题。很烦人的是,我之前用了'Call'命令试过了,所以那个时候一定是写错了语法。哎呀!非常感谢! - user1458484

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接