[ Last edited by HAT on 2008-12-11 at 17:42 ]作者: exzzz 时间: 2008-12-11 15:23 我也不是很明白,但是就日常的使用经验,如果不加“ ^ ”,那么 for 语句中 in 后面的 “()”遇到“ | ”的时候,句子就会分为前后两段。
前一句是:
for /f "tokens=2 delims= " %%i in ('systeminfo
后一句是:
find "物理内存总量"') do (set m=%%i)
两句语法都不对。
在教材中|&也是一种命令,可以组合其它被充许的命令,你反过来理解不就是分割吗
CMD解释命令是逐行的,当读入一行组合命令如echo a&echo b时,他在内部处理时自然会将这行拆分为两个命令行(echo a与echo b,这里是抽象举例),但也在这两个命令行中形成了一个继承或条件关系,先在这里称之为组合初始化
FOR %variable IN (set) DO command
CMD在解释FOR命令时,首先的工作是将一个完整的FOR命令读入,但在读取(set)中若发现|&符号,便会进行上述的组合初始化工作,很显然,CMD会在这里报错,命令是不能正确执行的,但为什么加上^符号便可以正常执行,而不是让CMD将|&当做单纯的字符来处理?
其实CMD的确将加了^的|&符号当做字符来处理了,而只所以能正常执行,是因为这一步处理是发生在CMD读入FOR整个命令行的过程中,而不是FOR接管后将(set)提交给CMD的过程中,下边来看看过程
CMD读入前:for /f %i in (echo a^&echo b) do echo %i
CMD读入后:for /f %i in (echo a&echo b) do echo %i
FOR提交时:CMD<(echo a&echo b) 作者: qzwqzw 时间: 2008-12-11 19:25 简单的解释
for /f "tokens=2 delims= " %%i in ('systeminfo ^| find "物理内存总量"') do (
set m=%%i
)
cmd会理解为执行以下几句
systeminfo
find "物理内存总量"
for /f "tokens=2 delims= " %%i in ("xxxx") do (set m=%%i)
for /f "tokens=2 delims= " %%i in ('systeminfo | find "物理内存总量"') do (
set m=%%i
)
少了^,cmd会理解为执行以下几句
for /f "tokens=2 delims= " %%i in ('systeminfo
find "物理内存总量"') do (set m=%%i)