循环的批处理文件

时间:2011-07-21 16:32:43

标签: windows powershell batch-file

我正在编写一个批处理文件,在Windows Server 2008 R2上运行,它有一个for循环,无论我在线阅读多少教程并尝试,它都不会运行for循环。< / p>

echo "Starting blur detection..."
if not exist %root%\output mkdir output
set tempnum = dir root | find /i "file"
set num = tempnum-5
for /l %idx in (0, 1, num) do (
   %root%\blurDetection.exe %root%\%img%__%idx%.tif %root%\output
   echo "blurDetection" %idx " of " %num )

Windows powershell说“idx此时出乎意料。” 有什么建议吗?

编辑:其实我认为这一行是导致问题的,我不认为它会得到和整数值作为回报。

set tempnum = dir root | find /i "file"

2 个答案:

答案 0 :(得分:4)

(在最初的帖子后添加)哦,我错过了最大的问题。这确实是这一行:

set tempnum = dir root | find /i "file"

你的意思是捕获dir的输出,对吗?这可以,AFAIK只能在for内完成,除非您可以输出到文件中并稍后将其用作输入。

语法是这样的:

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

注意:这些不是反引号。

NT脚本for的最佳解释:http://www.robvanderwoude.com/ntfor.php

还有一个注意事项:,因为您似乎依赖文件名作为某个数字,我怀疑dir /b是更好的选择。普通dir也会输出日期和文件大小等......


for变量的IIRC名称不能超过一个字母。此外,在脚本文件内部(与命令行相对应),这些变量如下所示:

%%i

此外,

set num=tempnum-5

应该是

set /a num=%tempnum%-5

关于find的另一个问题是您是否打算使用findstr。上下文太少,但findstr似乎更自然。

来自for /?

FOR %variable IN (set) DO command [command-parameters]

  %variable  Specifies a single letter replaceable parameter.
  (set)      Specifies a set of one or more files.  Wildcards may be used.
  command    Specifies the command to carry out for each file.
  command-parameters
             Specifies parameters or switches for the specified command.

To use the FOR command in a batch program, specify %%variable instead
of %variable.  Variable names are case sensitive, so %i is different
from %I.

特别注意这两个陈述:

  • %variable指定单个字母可替换参数。
  • 要在批处理程序中使用FOR命令,请指定%%variable而不是%variable

for循环的另一个特殊功能是您可以拆分输入,并且令牌将按字母顺序分配给变量。因此,for %a ...令牌中的内容会被分配到%a%b等等... set tempnum = dir root |找/我“文件”

答案 1 :(得分:4)