Windows 在批处理文件中写入循环的语法

Windows 在批处理文件中写入循环的语法,windows,batch-file,dos,Windows,Batch File,Dos,我正在尝试为我经常执行的任务编写一个小的批处理文件。我以前从未使用过for,这是我第一次尝试。这就是我到目前为止的收获: for /f %i in ('ct find . -ver lbtype(%1) -print') do ct lsvt -g %i 基本上,它会尝试查找具有给定cleracase标签的所有文件,然后显示这些文件的版本树。问题出在%1中。但当我尝试运行此命令时,有时会出现一个错误,说明-print)不是预期的,或者它只是在命令提示符下打印此命令。我猜它正在被多重偏执所迷惑

我正在尝试为我经常执行的任务编写一个小的批处理文件。我以前从未使用过
for
,这是我第一次尝试。这就是我到目前为止的收获:

for /f %i in  ('ct find . -ver lbtype(%1) -print') do ct lsvt -g %i

基本上,它会尝试查找具有给定cleracase标签的所有文件,然后显示这些文件的版本树。问题出在
%1
中。但当我尝试运行此命令时,有时会出现一个错误,说明
-print)
不是预期的,或者它只是在命令提示符下打印此命令。我猜它正在被多重偏执所迷惑。有什么线索可以解决这个问题吗?

试着在
中引用您正在执行的命令:

for /f %i in  ('"ct find . -ver lbtype(%1) -print"') do ct lsvt -g %i
这适用于一个类似的命令,我用parens处理args

另外,(正如您可能知道的那样),当您将命令放入批处理文件中而不是在命令行中运行它时,您需要将
for
变量的
'%'
字符加倍:

for /f %%i in  ('"ct find . -ver lbtype(%1) -print"') do ct lsvt -g %%i

在取消引用时,您可能希望引用
%%i
,因为它可能包含带空格的文件路径<代码>。。。do ct lsvt-g“%%i”
那里的双引号不应该做任何有意义的事情。@Johannes:需要认识的一点是,单引号不是用来“引用”命令的,它们是
for/f
命令执行命令的语法,并将命令的输出放入
%i
变量中。要认识到的另一件事是,paren对cmd.exe有着特殊的意义,而且它们似乎并不总是被它干净地处理。双引号确实有意义,但我想可能是cmd.exe错误导致了它们的出现。我会用
^
来逃避它,就像你用
|
之类的东西一样。我对引号的最初猜测是,它会尝试将它们之间的所有内容作为可执行文件运行,尽管它是可执行文件和参数。