dos For
首先,
要明白,for /f的主要作用是从文本行中提取出特定的字符串。因此,它的每一个循环处理的就是一行文本。既然要从这行文本中提取出特定的字符串,当然,就需要对这一行文本进行分隔,分隔的结果就是将这一行文本分成了若干个字段,例如下面一行文本:
Dog*Cat*Monkey*Donkey
很显然,我们如果以*号作为分隔符,那么这一行就会分为下面四个字段:
Dog Cat Monkey Donkey
ok,现在我们要取出其中的一个或者所有字段进行处理,那么在for /f语句中,字段就是用tokens来代表的。
例如,我们这样写:for /f "tokens=1,2,3,4 delims=*" %i in ('...') do ....
那么以上面一行文本为例:tokens中的1就表示Dog、2表示Cat、依次类推。而在Do语句中,%i 代表tokens(1)的值,即Dog,而%j表示tokens(2)的值即Cat,再次依次类推。
如果我们写成:for /f "tokens=2,4 delims=*" %i in ('...') do ...
那么%i = tokens(2) 即Cat,%j=tokens(4)即Donkey。
另外,在tokens中可以使用*号,表示剩余的全部字段,例如:tokens=1,*
那么这里的*号表示tokens(2,3,4)的全部内容,也就是%j = Cat Monkey Donkey。
关于tokens大致就是这些东西了,以上的描述中可能有不准确的地方,以实践为准。
===================
显示注册表某列的值
@echo off
set regpath=HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment
for /f "skip=4 tokens=1,2,*" %%a in ('reg query "%regpath%" /v "PERL5LIB"') do @echo %%c