![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 00:31 |
共 47,811 主题排行 / 349,897 发帖 / 今日 2 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]请教一下for /f " delims== tokens=2" |
| 可打印版本 1,208 / 8 |
| 第1楼 lywlhs | 发表于 2008-10-03 18:21 |
| 初级用户 发帖 10 积分 25 | |
|
[求助]请教一下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=应该怎么写?还是有别的写法? 星期一 上课 游泳 星期二 劳动 植树 星期三 休息 看电视 …… …… …… 我还是个新手,可能问的问题很简单,但我是真的不会,还请高手帮忙指点一下。谢谢了。 |
|
| 第2楼 slore | 发表于 2008-10-03 18:31 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
1.
tokens 2. 不知道你说啥 仔细看/? 3. set /? 2下空格后那段帮助仔细看 |
|
| 第3楼 lywlhs | 发表于 2008-10-03 18:44 |
| 初级用户 发帖 10 积分 25 | |
Originally posted by slore at 2008-10-3 18:31: 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。 你的回答我看不懂。 |
|
| 第4楼 zb1007zb | 发表于 2008-10-03 18:50 |
| 初级用户 发帖 39 积分 88 | |
|
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 ] |
|
| 第5楼 lywlhs | 发表于 2008-10-03 19:33 |
| 初级用户 发帖 10 积分 25 | |
Originally posted by zb1007zb at 2008-10-3 18:50: 然后 set 1work=%%a set 2work=%%b ………… 是这样吧? 我这样好像是多此一举。。。。。 第2个问题和第三个问题,还等待弄明白。看到的高手给解释一下。 谢谢了。 谢谢楼上的。 [ Last edited by lywlhs on 2008-10-3 at 19:36 ] |
|
| 第6楼 slore | 发表于 2008-10-03 20:08 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
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 剩余部分第一次出现的地方,都一直保持相配。 |
|
| 第7楼 tireless | 发表于 2008-10-03 21:03 |
| 银牌会员 发帖 1,122 积分 2,025 | |
|
问题一
问题二 就是那样用的。 问题三 delims 默认的分隔符是 空格 和 Tab |
|
| 第8楼 Evangel | 发表于 2008-10-03 21:17 |
| 初级用户 发帖 95 积分 145 | |
|
又偷学一招:%str:str1=str2%。。。
|
|
| 第9楼 lserfn | 发表于 2008-10-03 21:52 |
| 初级用户 发帖 49 积分 97 | |
|
问题一:
比如我现在有一个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= 直接留个空格 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |