Board logo

标题: [求助]请教一下for /f " delims== tokens=2" [打印本页]

作者: lywlhs     时间: 2008-10-3 18:21    标题: [求助]请教一下for /f " delims== tokens=2"

问题一: 比如我现在有一个123.TXT的文件,每一行都有3个内容, 例如: 星期一=上课=游泳 星期二=劳动=植树 星期三=休息=看电视 ……=……=…… for /f " delims== tokens=2" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%a for /f " delims== tokens=3" %%b in ('more ^<C:\123.txt^|find /i "星期一"') do set 2work=%%b 我现在要用2条命令才能得到2个变量,能不能把2个命令写成一个,并且得到这2个变量? 问题二: 星期一=上课 星期二=劳动 星期三=休息 ……=…… tokens=1* 意思是第1个字符串后面的所有内容,tokens=2 是第2个字符串。 for /f " delims== tokens=1*" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%b 这里tokens=1* 后面do set 1work=%%b 为什么do set 1work=%%a就显示的“星期一”? 问题三: 把上面123.txt里的内容中的“=”号去掉 下面的命令里delims=应该怎么写?还是有别的写法? 星期一 上课 游泳 星期二 劳动 植树 星期三 休息 看电视 …… …… …… 我还是个新手,可能问的问题很简单,但我是真的不会,还请高手帮忙指点一下。谢谢了。

作者: slore     时间: 2008-10-3 18:31
1. tokens 2. 不知道你说啥 仔细看/? 3. set /? 2下空格后那段帮助仔细看

作者: lywlhs     时间: 2008-10-3 18:44
Originally posted by slore at 2008-10-3 18:31: 1. tokens 2. 不知道你说啥 仔细看/? 3. set /? 2下空格后那段帮助仔细看
1。 我上面用的就是tokens,我不会用一条命令得出2个变量。现在只能用2条命令,我想能不能用1条命令就可以?怎么写? 2. for /f " delims== tokens=1*" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%b for /f " delims== tokens=2" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%b 就不正确了。必须是 for /f " delims== tokens=2" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%a 才可以。就是不明白为什么,所以请教一下。 3。 你的回答我看不懂。

作者: zb1007zb     时间: 2008-10-3 18:50
for /f "tokens=2,3 delims== "%%a …… 试试 其实你如果 for /f "tokens=2,3 delims== "%%a 了 2和3的段都会被赋值到 %%a %%b %%c 里面去 [ Last edited by zb1007zb on 2008-10-3 at 18:52 ]

作者: lywlhs     时间: 2008-10-3 19:33
Originally posted by zb1007zb at 2008-10-3 18:50: for /f "tokens=2,3 delims== "%%a …… 试试 其实你如果 for /f "tokens=2,3 delims== "%%a 了 2和3的段都会被赋值到 %%a %%b %%c 里面去 [ Last edi ...
然后 set 1work=%%a set 2work=%%b ………… 是这样吧? 我这样好像是多此一举。。。。。 第2个问题和第三个问题,还等待弄明白。看到的高手给解释一下。 谢谢了。 谢谢楼上的。 [ Last edited by lywlhs on 2008-10-3 at 19:36 ]

作者: slore     时间: 2008-10-3 20:08
tokens 我把s高亮了……说明不是后面只能写一个。 你没有好好看帮助麽? 给的例子是 某些范例可能有助: For /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k 会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将 每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或 空格定界符号。请注意,这个 for 程序体的语句引用 %i 来 取得第二个符号,引用 %j 来取得第三个符号,引用 %k 来取得第三个符号后的所有剩余符号。对于带有空格的文件 名,您需要用双引号将文件名括起来。为了用这种方式来使 用双引号,您还需要使用 usebackq 选项,否则,双引号会 被理解成是用作定义某个要分析的字符串的。 3. set /? 环境变量替换已如下增强: %PATH:str1=str2% 会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。 要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。 "str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的 开始到 str1 剩余部分第一次出现的地方,都一直保持相配。

作者: tireless     时间: 2008-10-3 21:03
问题一
for /f "delims== tokens=2,3" %%a in ('findstr "星期一" C:\123.txt') do echo %%a %%b
问题二 就是那样用的。 问题三 delims 默认的分隔符是 空格 和 Tab

作者: Evangel     时间: 2008-10-3 21:17
又偷学一招:%str:str1=str2%。。。

作者: lserfn     时间: 2008-10-3 21:52
问题一: 比如我现在有一个123.TXT的文件,每一行都有3个内容, 例如: 星期一=上课=游泳 星期二=劳动=植树 星期三=休息=看电视 ……=……=…… for /f " delims== tokens=2" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%a for /f " delims== tokens=3" %%b in ('more ^<C:\123.txt^|find /i "星期一"') do set 2work=%%b 我现在要用2条命令才能得到2个变量,能不能把2个命令写成一个,并且得到这2个变量? for /f "tokens=2,3 delims==" %%a in ('more ^<C:\123.txt^|find /i "星期一") do set 1work=%%a 问题二: 星期一=上课 星期二=劳动 星期三=休息 ……=…… tokens=1* 意思是第1个字符串后面的所有内容,tokens=2 是第2个字符串。 for /f " delims== tokens=1*" %%a in ('more ^<C:\123.txt^|find /i "星期一"') do set 1work=%%b 这里tokens=1* 后面do set 1work=%%b 为什么do set 1work=%%a就显示的“星期一”? tokens=1* 1和1后面的所有内容 也就是说%%a 是在第一列 那么后面的内容当然就是照着顺序走了 %%b就是上课 问题三: 把上面123.txt里的内容中的“=”号去掉 下面的命令里delims=应该怎么写?还是有别的写法? 星期一 上课 游泳 星期二 劳动 植树 星期三 休息 看电视 delims= 直接留个空格