Board logo

标题: 求教:tokens和delims是什么意思例子如下 [打印本页]

作者: killer05     时间: 2006-9-19 04:38    标题: 求教:tokens和delims是什么意思例子如下

@echo off
set sharefilename=share_filenames.sfn
if exist %sharefilename% del %sharefilename%
net share > %sharefilename%
for /f "tokens=1,2,3 delims= " %%a in (%sharefilename%) do (
if "%%c"=="默认共享" (
net share %%a /d
echo delete %%a >> deleteshareresult.log
)
if "%%c"=="远程管理" (
net share %%a /d
echo delete %%a >> deleteshareresult.log
)
)
if exist %sharefilename% del %sharefilename%

tokens和delims是什么意思 先谢谢先
作者: xg911335     时间: 2006-9-19 06:50
delims=xxx      - 指分隔符集。这个替换了空格和跳格键的
                  默认分隔符集。
tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                  的 for 本身。这会导致额外变量名称的分配。m-n
                  格式为一个范围。通过 nth 符号指定 mth。如果
                  符号字符串中的最后一个字符星号,
                  那么额外的变量将在最后一个符号解析之后
                  分配并接受行的保留文本。
作者: kcdsw     时间: 2006-9-19 08:01

for /f "tokens=1,2,3 delims= " %%a in (%sharefilename%) do (
if "%%c"=="默认共享" (
net share %%a /d
echo delete %%a >> deleteshareresult.log
)
if "%%c"=="远程管理" (
net share %%a /d
echo delete %%a >> deleteshareresult.log
)
)
tokens 和 delims  联合起来用的

首先定义了分隔符

比如
文档a
1空格2空格3空格4空格
那么它会把空格做分隔符  然后把满足条件的 第一位,第二位,第三位 传递出来
我们在引用的时候 (按此例)
引用方式为
%%a 对应第1位
%%b 对应第2位
%%c 对应第3位

而已而已!!

楼主结合一下 2楼放出来的帮助
我觉得能看明白了吧

[ Last edited by kcdsw on 2006-9-19 at 08:03 ]
作者: killer05     时间: 2006-9-19 21:48    标题: 谢谢xg911335和kcdsw的指教, 说的很明白简单

如果用来扫描ip的话能不能用来判断网络的情况,只是不懂tokens 和 delims的用法
作者: uime     时间: 2006-9-20 05:00
以默认方式,/F 通过每个文件的每一行中分开  的第一个空白符号。跳过空白行。您可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个或多个 指定不同解析选项的关键字。这些关键字为:
       eol=c           - 指一个行注释字符的结尾(就一个)
       skip=n          - 指在文件开始时忽略的行数。
       delims=xxx      - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
       tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
       usebackq        - 指定新语法已在下类情况中使用: 在作为命令执行一个后引号的字符串并且一个单 引号字符为文字字符串命令并允许在 filenameset中使用双引号扩起文件名称。

   某些范例可能有助:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

    会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或 空格定界符号。请注意,这个 for 程序体的语句引用 %i 来 取得第二个符号,引用 %j 来取得第三个符号,引用 %k来取得第三个符号后的所有剩余符号。对于带有空格的文件 名,您需要用双引号将文件名括起来。为了用这种方式来使 用双引号,您还需要使用 usebackq 选项,否则,双引号会
    被理解成是用作定义某个要分析的字符串的。
作者: killer05     时间: 2006-9-22 03:26    标题: uime谢谢你

很详实
作者: renweimin365     时间: 2007-7-27 14:22    标题: 翻译的真差,还是看英文的好

翻译的真差,还是看英文的好,
不会犯就别乱翻,误人子弟阿
作者: slore     时间: 2007-7-27 22:53


  Quote:
Originally posted by renweimin365 at 2007-7-27 14:22:
翻译的真差,还是看英文的好,
不会犯就别乱翻,误人子弟阿

搞笑呢?上面好象是WINDOWS自带的FOR 的/?显示的帮助……

看来楼上E文不错:D
作者: wudixin96     时间: 2007-7-27 23:06
说实在的。WINDOWS帮助里翻译,有时还真是狗屁不通的。
作者: 6622186     时间: 2007-7-28 15:36
是不是机器翻译的啊
作者: luowei14     时间: 2007-7-28 23:26
FOR 还真的下些功夫
作者: kingyn     时间: 2007-8-27 19:53
顶一下,人家就算翻的不好,总比光看不翻强多了吧
作者: kingyn     时间: 2007-8-27 19:53
要不你们来纠正补充下
作者: slore     时间: 2007-8-27 20:42
我没觉得不通顺……=.=难道我理解力太强了?
作者: 726842270     时间: 2010-6-27 16:25
FOR还真不是一般强大呢。看来得用功了