我正在编写一个批处理文件,在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"
答案 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)